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; }