Esempio n. 1
0
 public function save_model($data)
 {
     // Used to save Order Header and Order Lines from import or copy of existing
     $flash = Flash::Instance();
     if (empty($data['SOrder']) || empty($data['SOrderLine'])) {
         $flash->addError('Error trying to save order');
         return false;
     }
     $errors = array();
     $db = DB::Instance();
     $db->StartTrans();
     $header = $data['SOrder'];
     $lines_data = DataObjectCollection::joinArray($data['SOrderLine'], 0);
     if (!$lines_data || empty($lines_data)) {
         $lines_data[] = $data['SOrderLine'];
     }
     $order = SOrder::Factory($header, $errors);
     if (!$order || count($errors) > 0) {
         $errors[] = 'Order validation failed';
     } elseif (!$order->save()) {
         $errors[] = 'Order creation failed';
     }
     foreach ($lines_data as $line) {
         $line['order_id'] = $order->{$order->idField};
         $orderline = SOrderLine::Factory($order, $line, $errors);
         if (!$orderline || count($errors) > 0) {
             $errors[] = 'Order Line validation failed for line ' . $line['line_number'];
         } elseif (!$orderline->save()) {
             $errors[] = 'Order Line creation failed for line ' . $line['line_number'];
         }
     }
     if (count($errors) === 0) {
         if (!$order->save()) {
             $errors[] = 'Error updating Sales Order totals';
         } else {
             $result = array('internal_id' => $order->{$order->idField}, 'internal_identifier_field' => $order->identifierField, 'internal_identifier_value' => $order->getidentifierValue());
         }
     }
     if (count($errors) > 0) {
         $flash->addErrors($errors);
         $db->FailTrans();
         $result = false;
     }
     $db->CompleteTrans();
     return $result;
 }
Esempio n. 2
0
 public function saveselectedproducts()
 {
     if (!isset($this->_data['cancelform']) && !$this->checkParams($this->modeltype)) {
         sendBack();
     }
     $errors = array();
     $flash = Flash::Instance();
     if (isset($this->_data['cancelform'])) {
         unset($_SESSION['selectedproducts']);
         sendBack();
     }
     $selectedproducts = empty($_SESSION['selectedproducts']) ? array() : $_SESSION['selectedproducts'];
     if (empty($selectedproducts)) {
         $flash->addError('No products selected - order not created');
         sendBack();
     }
     $productlines = new SOProductLineCollection(DataObjectFactory::Factory('SOProductLine'));
     $sh = new SearchHandler($productlines, false);
     $sh->addConstraint(new Constraint('id', 'in', '(' . implode(',', array_keys($selectedproducts)) . ')'));
     $productlines->load($sh);
     $db = DB::Instance();
     $db->StartTrans();
     $header = $this->_data[$this->modeltype];
     $header['type'] = 'O';
     $trans_type = 'Sales Order';
     // Check the Customer
     $customer = DataObjectFactory::Factory('SLCustomer');
     $customer->load($header['slmaster_id']);
     if ($customer) {
         $header['currency_id'] = $customer->currency_id;
         $header['payment_term_id'] = $customer->payment_term_id;
         $header['tax_status_id'] = $customer->tax_status_id;
         $deliveryAddresses = $customer->getDeliveryAddresses();
         $header['del_address_id'] = key($deliveryAddresses);
         $invoiceAddresses = $customer->getInvoiceAddresses();
         $header['inv_address_id'] = key($invoiceAddresses);
         $header['despatch_action'] = $customer->despatch_action;
     } else {
         $errors[] = 'Cannot find Customer';
     }
     if ($customer->accountStopped()) {
         $flash->addWarning('Customer Account on Stop');
     }
     $header['despatch_date'] = $header['due_date'] = $header['order_date'] = date(DATE_FORMAT);
     $header['net_value'] = 0;
     $lines_data = array();
     foreach ($productlines as $productline) {
         $line = array();
         $line['productline_id'] = $productline->id;
         $line['revised_qty'] = $line['os_qty'] = $line['order_qty'] = $this->_data['qty'][$productline->id];
         $line['price'] = $productline->price;
         $line['currency_id'] = $productline->currency_id;
         $line['glaccount_id'] = $productline->glaccount_id;
         $line['glcentre_id'] = $productline->glcentre_id;
         $line['stitem_id'] = $productline->product_detail->stitem_id;
         $line['stuom_id'] = $productline->product_detail->stuom_id;
         $line['item_description'] = $productline->product_detail->stitem;
         $line['description'] = $productline->product_detail->description;
         $line['tax_rate_id'] = $productline->product_detail->tax_rate_id;
         $line['net_value'] = bcmul($line['order_qty'], $line['price']);
         $lines_data[] = $line;
         $header['net_value'] = bcadd($header['net_value'], $line['net_value']);
     }
     $order = SOrder::Factory($header, $errors);
     if ($order && count($errors) === 0) {
         $result = $order->save();
     } else {
         $result = false;
     }
     if ($result) {
         foreach ($lines_data as $line_data) {
             $orderline = SOrderLine::Factory($order, $line_data, $errors);
             if ($orderline) {
                 $result = $orderline->save();
             } else {
                 $result = false;
             }
             if (count($errors) > 0 || $result === false) {
                 $errors[] = 'Error saving Sales Order Line ';
                 break;
             }
         }
     }
     if ($result !== false && $db->CompleteTrans()) {
         unset($_SESSION['selectedproducts']);
         $flash->addMessage($trans_type . ' created successfully');
         sendTo($this->name, 'edit', $this->_modules, array('id' => $order->id));
     }
     $flash->addError('Error saving ' . $trans_type);
     $db->FailTrans();
     $db->completeTrans();
     $flash->addErrors($errors);
     $this->view->set('page_title', $this->getPageName('', 'Select Products for'));
     $this->refresh();
 }