Beispiel #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['POrder']) || empty($data['POrderLine'])) {
         $flash->addError('Error trying to import order');
         return false;
     }
     $errors = array();
     $db = DB::Instance();
     $db->StartTrans();
     $header = $data['POrder'];
     $lines_data = DataObjectCollection::joinArray($data['POrderLine'], 0);
     if (!$lines_data || empty($lines_data)) {
         $lines_data[] = $data['POrderLine'];
     }
     $order = POrder::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 = POrderLine::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 Purchase 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;
 }