Example #1
0
 public static function createDespatchNote($data, &$errors = array())
 {
     $db = DB::Instance();
     $db->startTrans();
     $result = TRUE;
     foreach ($data as $header) {
         $generator = new DespatchNoteNumberHandler();
         $despatch_number = $generator->handle(new SODespatchLine());
         foreach ($header as $line) {
             $line['despatch_number'] = $despatch_number;
             $saveline = SODespatchLine::Factory($line, $errors, 'SODespatchLine');
             if ($saveline) {
                 $result = $saveline->save();
                 if (!$result) {
                     $errors[] = $db->ErrorMsg();
                     break;
                 }
             }
             $orderline = new SOrderLine();
             $orderline->load($line['orderline_id']);
             if ($orderline->isLoaded()) {
                 if (!is_null($orderline->delivery_note)) {
                     $errors[] = 'Order line already selected on DN ' . $orderline->delivery_note;
                     break;
                 } elseif ($orderline->status != $orderline->awaitingDespatchStatus() && $orderline->status != $orderline->pickedStatus()) {
                     $errors[] = 'Order line no longer available for despatch';
                     break;
                 } elseif (!$orderline->update($line['orderline_id'], 'delivery_note', $despatch_number)) {
                     $errors[] = 'Error updating order line';
                     break;
                 }
             } else {
                 $errors[] = 'Error loading order line';
                 break;
             }
         }
     }
     if (count($errors) > 0) {
         $db->FailTrans();
         $result = FALSE;
     }
     $db->completeTrans();
     if (count($data) == 1) {
         return $saveline->id;
     }
     return $result;
 }