Index: orders_event_handler.php =================================================================== --- orders_event_handler.php (revision 14234) +++ orders_event_handler.php (working copy) @@ -1106,9 +1106,8 @@ $object =& $event->getObject( Array('skip_autoload' => true) ); /* @var $object kDBItem */ - $object->SetDBField('Number', $this->getNextOrderNumber($event)); - $object->SetDBField('SubNumber', 0); - $object->SetDBField('Status', ORDER_STATUS_INCOMPLETE); + $this->setNextOrderNumber($event); + $object->SetDBField('Type', ORDER_STATUS_INCOMPLETE); $object->SetDBField('VisitId', $this->Application->RecallVar('visit_id') ); // get user @@ -1282,9 +1281,9 @@ parent::OnPreCreate($event); $object =& $event->getObject(); - $new_number = $this->getNextOrderNumber($event); - $object->SetDBField('Number', $new_number); - $object->SetDBField('SubNumber', 0); + + $this->setNextOrderNumber($event); + $object->SetDBField('OrderIP', $_SERVER['REMOTE_ADDR']); $order_type = $this->getTypeBySpecial( $this->Application->GetVar('order_type') ); $object->SetDBField('Status', $order_type); @@ -1304,9 +1303,7 @@ $object->SetDBField('OriginalAmount', 0); // needed in this case ? } else { - $new_number = $this->getNextOrderNumber($event); - $object->SetDBField('Number', $new_number); - $object->SetDBField('SubNumber', 0); + $this->setNextOrderNumber($event); $object->SetDBField('OriginalAmount', 0); } $object->SetDBField('OrderDate', adodb_mktime()); @@ -1876,16 +1873,31 @@ } /** - * Get next free order number + * Set next available order number * * @param kEvent $event */ - function getNextOrderNumber(&$event) + function setNextOrderNumber(&$event) { $object =& $event->getObject(); + /* @var $object OrdersItem */ + $sql = 'SELECT MAX(Number) FROM ' . $this->Application->GetLiveName($object->TableName); - return max($this->Conn->GetOne($sql) + 1, $this->Application->ConfigValue('Comm_Next_Order_Number')); + $next_order_number = $this->Conn->GetOne($sql) + 1; + + $next_order_number = max($next_order_number, $this->Application->ConfigValue('Comm_Next_Order_Number')); + $this->Application->SetConfigValue('Comm_Next_Order_Number', $next_order_number + 1); + + $object->SetDBField('Number', $next_order_number); + $object->SetDBField('SubNumber', 0); + + // set virtual field too + $number_format = (int)$this->Application->ConfigValue('Comm_Order_Number_Format_P'); + $sub_number_format = (int)$this->Application->ConfigValue('Comm_Order_Number_Format_S'); + $order_number = sprintf('%0' . $number_format . 'd', $next_order_number) . '-' . str_repeat('0', $sub_number_format); + + $object->SetDBField('OrderNumber', $order_number); } /**