示例#1
0
 function populate()
 {
     $orders = new SOrderLineCollection(new SOrderLine());
     $pl = new PageList('top_sales_orders');
     $customerorders = $orders->getTopOrders();
     $this->contents = $customerorders;
 }
 function populate()
 {
     $orders = new SOrderLineCollection();
     if (empty($this->params['period'])) {
         $this->params['period'] = 'today';
     }
     if (empty($this->params['type'])) {
         $this->params['type'] = 'O';
     }
     $this->contents = $orders->getOrderItemSummary($this->params['period'], $this->params['type'], '', $this->limit);
     foreach ($this->params as $param => $value) {
         $this->params[$param] = $param . "=" . $value;
     }
     $this->contents['url'] = '/?module=sales_order&controller=sorders&action=orderitemsummary&' . implode('&', $this->params) . '&_target=sorders_item_overview';
 }
 function populate()
 {
     $orderline = DataObjectFactory::Factory('SOrderLine');
     $cc = new ConstraintChain();
     $cc->add(new Constraint('status', 'in', "('D', 'P')"));
     $order_total = $orderline->getSum('base_net_value', $cc);
     $orders = new SOrderLineCollection($orderline);
     $orders->setParams();
     $sh = new SearchHandler($orders, FALSE);
     $fields = array('order_id', 'order_number', 'customer', 'order_date', 'actual_despatch_date');
     $sh->setGroupBy($fields);
     $sh->setOrderBy(array('actual_despatch_date', 'order_number', 'customer'));
     $fields[] = 'sum(base_net_value) as base_net_value';
     $sh->setFields($fields);
     $sh->addConstraint($cc);
     $this->setSearchLimit($sh);
     $orders->load($sh);
     $orders->collection_date_label = 'actual_despatch_date';
     $orders->collection_total_label = 'Total (Base Net Value) Order Lines not Invoiced';
     $orders->collection_total = $order_total;
     $this->contents = $orders;
 }
示例#4
0
文件: STItem.php 项目: uzerpllp/uzerp
 public function getSOrderLines()
 {
     // This gets all Sales Order Lines
     if ($this->solines) {
         return $this->solines;
     }
     $solines = new SOrderLineCollection();
     $sh = new SearchHandler($solines, false);
     $sh->addConstraint(new Constraint('stitem_id', '=', $this->id));
     $sh->addConstraint(new Constraint('status', 'in', "('N', 'R', 'P', 'S')"));
     $sh->setOrderby('due_despatch_date');
     $solines->load($sh);
     if ($solines) {
         $this->solines = $solines;
         return $this->solines;
     } else {
         return array();
     }
 }
示例#5
0
 private function createPostInvoice($sorder, &$errors)
 {
     if ($sorder->customerdetails->accountStopped()) {
         $errors[] = 'Cannot create invoice, customer account stopped';
         return FALSE;
     }
     set_time_limit(0);
     $linestatuses = $sorder->getLineStatuses();
     $linestatus = $linestatuses['count'];
     if (!$sorder->someLinesDespatched($linestatus) && !$sorder->someLinesPicked($linestatus)) {
         $errors[] = 'No lines picked or despatched';
         return FALSE;
     }
     $sinvoicelines = array();
     $db = DB::Instance();
     $db->startTrans();
     $sodespatchlines = array();
     $create_sodespatchlines = array();
     $latest_despatch_date = 0;
     $sorderline = DataObjectFactory::Factory('SOrderLine');
     $sorderlines = new SOrderLineCollection($sorderline);
     $sh = new SearchHandler($sorderlines, FALSE);
     $sh->addConstraint(new Constraint('order_id', '=', $sorder->id));
     $statuses = array($db->qstr($sorderline->despatchStatus()), $db->qstr($sorderline->pickedStatus()));
     $sh->addConstraint(new Constraint('status', 'in', '(' . implode(',', $statuses) . ')'));
     $sorderlines->load($sh);
     $sodespatchline = DataObjectFactory::Factory('SODespatchLine');
     foreach ($sorderlines as $sorderline) {
         $sinvoiceline = array();
         $sodespatchlines[$sorderline->id]['id'] = $sorderline->id;
         $sodespatchlines[$sorderline->id]['line_number'] = $sorderline->line_number;
         if ($sorderline->status == $sorderline->pickedStatus()) {
             $sinvoiceline['move_stock'] = 't';
             $sorderline->del_qty = $sorderline->revised_qty;
             $sorderline->actual_despatch_date = fix_date(date(DATE_FORMAT));
             if (!is_null($sorderline->stitem_id)) {
                 $create_sodespatchlines[$sorder->id][$sorderline->id] = SODespatchLine::makeline($sorder, $sorderline, $errors);
                 $create_sodespatchlines[$sorder->id][$sorderline->id]['status'] = $sodespatchline->despatchStatus();
             }
             $sodespatchlines[$sorderline->id]['fields'] = array('status', 'del_qty', 'actual_despatch_date');
             $sodespatchlines[$sorderline->id]['values'] = array($sorderline->invoicedStatus(), $sorderline->del_qty, $sorderline->actual_despatch_date);
         } else {
             $sodespatchlines[$sorderline->id]['fields'] = array('status');
             $sodespatchlines[$sorderline->id]['values'] = array($sorderline->invoicedStatus());
         }
         foreach ($sorderline->getFields() as $key => $value) {
             $sinvoiceline[$key] = $sorderline->{$key};
         }
         foreach ($sorderline->audit_fields as $field) {
             unset($sinvoiceline[$field]);
         }
         if ($sorderline->actual_despatch_date > $latest_despatch_date) {
             $latest_despatch_date = $sorderline->actual_despatch_date;
         }
         $sinvoiceline['sales_order_id'] = $sorderline->order_id;
         $sinvoiceline['order_line_id'] = $sorderline->id;
         $sinvoiceline['sales_qty'] = $sorderline->del_qty;
         $sinvoiceline['sales_price'] = $sorderline->price;
         $sinvoiceline['net_value'] = bcmul($sorderline->price, $sorderline->del_qty);
         $sinvoiceline['glaccount_centre_id'] = null;
         $sinvoiceline['id'] = '';
         $sinvoicelines[] = $sinvoiceline;
     }
     if (count($errors) == 0 && count($create_sodespatchlines) > 0 && !SODespatchLine::createDespatchNote($create_sodespatchlines, $errors)) {
         $errors[] = 'Error creating Despatch Note';
     }
     foreach ($sodespatchlines as $id => $data) {
         $data['fields'][] = 'glaccount_centre_id';
         $data['values'][] = 'null';
         $result = $this->_uses['SOrderLine']->update($id, $data['fields'], $data['values']);
         if (!$result) {
             $errors['id' . $id] = 'Failed to update order line ' . $data['line_number'] . ' : ' . $db->errorMsg();
         }
     }
     if (count($errors) == 0) {
         // Check line statuses and update header status accordingly
         if (!$sorder->save()) {
             $errors[] = 'Failed to update order header ' . $db->ErrorMsg();
         }
     }
     if (count($sinvoicelines) == 0) {
         $errors[] = 'Failed to create invoice lines';
     }
     // Save the Invoice Header if no errors
     if (count($errors) == 0) {
         $sinvoiceheader = array();
         foreach ($sorder->getFields() as $key => $value) {
             $sinvoiceheader[$key] = $sorder->{$key};
         }
         foreach ($sorder->audit_fields as $field) {
             unset($sinvoiceheader[$field]);
         }
         $sinvoiceheader['id'] = '';
         $sinvoiceheader['sales_order_id'] = $sorder->id;
         $sinvoiceheader['sales_order_number'] = $sorder->order_number;
         $sinvoiceheader['despatch_date'] = un_fix_date($latest_despatch_date);
         $sinvoiceheader['transaction_type'] = 'I';
         $sinvoiceheader['invoice_date'] = un_fix_date($latest_despatch_date);
         $sinvoice = SInvoice::Factory($sinvoiceheader, $errors);
         if ($sinvoice) {
             $result = $sinvoice->save();
             if (!$result) {
                 $errors[] = 'Failed to create invoice';
             }
         }
     }
     // Save the Invoice Lines if no errors
     if (count($errors) == 0) {
         $result = FALSE;
         foreach ($sinvoicelines as $line_data) {
             $sinvoiceline = SInvoiceLine::Factory($sinvoice, $line_data, $errors);
             if ($sinvoiceline) {
                 $result = $sinvoiceline->save();
             }
             if (!$result) {
                 $errors[] = 'Failed to create invoice line ' . $db->ErrorMsg();
                 break;
             }
         }
         // Now save the header again to update the totals
         $result = $sinvoice->save();
         if (!$result) {
             $errors[] = 'Failed to update invoice totals';
             $errors[] = $db->ErrorMsg();
         }
     }
     // Post the Invoice if no errors
     if (count($errors) == 0) {
         $result = $sinvoice->post($errors);
         if (!$result) {
             $errors[] = 'Failed to post invoice';
         }
         foreach ($sodespatchlines as $id => $data) {
             $sodespatchlines = new SODespatchLineCollection($sodespatchline);
             $sh = new SearchHandler($sodespatchlines, FALSE);
             $sh->addConstraint(new Constraint('orderline_id', '=', $id));
             $sh->addConstraint(new Constraint('status', '=', $sodespatchline->despatchStatus()));
             $sh->addConstraint(new Constraint('invoice_id', 'is', 'NULL'));
             if ($sodespatchlines->update(array('invoice_id', 'invoice_number'), array($sinvoice->id, $sinvoice->invoice_number), $sh) === false) {
                 $errors[] = 'Error updating despatch lines : ' . $db->ErrorMsg();
             }
         }
     }
     if (count($errors) > 0) {
         $db->FailTrans();
         $result = FALSE;
     } else {
         // Everything is OK so return the newly created Invoice object
         $result = $sinvoice;
     }
     $db->CompleteTrans();
     return $result;
 }