Ejemplo n.º 1
0
 protected function supplyOrdersImportOne($info, $force_ids, $current_line, $validateOnly = false)
 {
     // sets default values if needed
     AdminImportController::setDefaultValues($info);
     // if an id is set, instanciates a supply order with this id if possible
     if (array_key_exists('id', $info) && (int) $info['id'] && SupplyOrder::exists((int) $info['id'])) {
         $supply_order = new SupplyOrder((int) $info['id']);
     } elseif (array_key_exists('reference', $info) && $info['reference'] && SupplyOrder::exists(pSQL($info['reference']))) {
         $supply_order = SupplyOrder::getSupplyOrderByReference(pSQL($info['reference']));
     } else {
         // new supply order
         $supply_order = new SupplyOrder();
     }
     // gets parameters
     $id_supplier = (int) $info['id_supplier'];
     $id_lang = (int) $info['id_lang'];
     $id_warehouse = (int) $info['id_warehouse'];
     $id_currency = (int) $info['id_currency'];
     $reference = pSQL($info['reference']);
     $date_delivery_expected = pSQL($info['date_delivery_expected']);
     $discount_rate = (double) $info['discount_rate'];
     $is_template = (bool) $info['is_template'];
     $error = '';
     // checks parameters
     if (!Supplier::supplierExists($id_supplier)) {
         $error = sprintf($this->l('Supplier ID (%d) is not valid (at line %d).'), $id_supplier, $current_line + 1);
     }
     if (!Language::getLanguage($id_lang)) {
         $error = sprintf($this->l('Lang ID (%d) is not valid (at line %d).'), $id_lang, $current_line + 1);
     }
     if (!Warehouse::exists($id_warehouse)) {
         $error = sprintf($this->l('Warehouse ID (%d) is not valid (at line %d).'), $id_warehouse, $current_line + 1);
     }
     if (!Currency::getCurrency($id_currency)) {
         $error = sprintf($this->l('Currency ID (%d) is not valid (at line %d).'), $id_currency, $current_line + 1);
     }
     if (empty($supply_order->reference) && SupplyOrder::exists($reference)) {
         $error = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
     }
     if (!empty($supply_order->reference) && ($supply_order->reference != $reference && SupplyOrder::exists($reference))) {
         $error = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
     }
     if (!Validate::isDateFormat($date_delivery_expected)) {
         $error = sprintf($this->l('Date format (%s) is not valid (at line %d). It should be: %s.'), $date_delivery_expected, $current_line + 1, $this->l('YYYY-MM-DD'));
     } elseif (new DateTime($date_delivery_expected) <= new DateTime('yesterday')) {
         $error = sprintf($this->l('Date (%s) cannot be in the past (at line %d). Format: %s.'), $date_delivery_expected, $current_line + 1, $this->l('YYYY-MM-DD'));
     }
     if ($discount_rate < 0 || $discount_rate > 100) {
         $error = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate, $current_line + 1, $this->l('Format: Between 0 and 100'));
     }
     if ($supply_order->id > 0 && !$supply_order->isEditable()) {
         $error = sprintf($this->l('Supply Order (%d) is not editable (at line %d).'), $supply_order->id, $current_line + 1);
     }
     // if no errors, sets supply order
     if (empty($error)) {
         // adds parameters
         $info['id_ref_currency'] = (int) Currency::getDefaultCurrency()->id;
         $info['supplier_name'] = pSQL(Supplier::getNameById($id_supplier));
         if ($supply_order->id > 0) {
             $info['id_supply_order_state'] = (int) $supply_order->id_supply_order_state;
             $info['id'] = (int) $supply_order->id;
         } else {
             $info['id_supply_order_state'] = 1;
         }
         // sets parameters
         AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order);
         // updatesd($supply_order);
         $res = false;
         if ((int) $supply_order->id && ($supply_order->exists((int) $supply_order->id) || $supply_order->exists($supply_order->reference))) {
             $res = $validateOnly || $supply_order->update();
         } else {
             $supply_order->force_id = (bool) $force_ids;
             $res = $validateOnly || $supply_order->add();
         }
         // errors
         if (!$res) {
             $this->errors[] = sprintf($this->l('Supply Order could not be saved (at line %d).'), $current_line + 1);
         }
     } else {
         $this->errors[] = $error;
     }
 }
 /**
  * @since 1.5.0
  */
 public function supplyOrdersImport()
 {
     // opens CSV & sets locale
     $this->receiveTab();
     $handle = $this->openCsvFile();
     AdminImportController::setLocale();
     // main loop, for each supply orders to import
     for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); ++$current_line) {
         // if convert requested
         if (Tools::getValue('convert')) {
             $line = $this->utf8EncodeArray($line);
         }
         $info = AdminImportController::getMaskedRow($line);
         // sets default values if needed
         AdminImportController::setDefaultValues($info);
         // if an id is set, instanciates a supply order with this id if possible
         if (array_key_exists('id', $info) && (int) $info['id'] && SupplyOrder::exists((int) $info['id'])) {
             $supply_order = new SupplyOrder((int) $info['id']);
         } elseif (array_key_exists('reference', $info) && $info['reference'] && SupplyOrder::exists(pSQL($info['reference']))) {
             $supply_order = SupplyOrder::getSupplyOrderByReference(pSQL($info['reference']));
         } else {
             // new supply order
             $supply_order = new SupplyOrder();
         }
         // gets parameters
         $id_supplier = (int) $info['id_supplier'];
         $id_lang = (int) $info['id_lang'];
         $id_warehouse = (int) $info['id_warehouse'];
         $id_currency = (int) $info['id_currency'];
         $reference = pSQL($info['reference']);
         $date_delivery_expected = pSQL($info['date_delivery_expected']);
         $discount_rate = (double) $info['discount_rate'];
         $is_template = (bool) $info['is_template'];
         $error = '';
         // checks parameters
         if (!Supplier::supplierExists($id_supplier)) {
             $error = sprintf($this->l('Supplier ID (%d) is not valid (at line %d).'), $id_supplier, $current_line + 1);
         }
         if (!Language::getLanguage($id_lang)) {
             $error = sprintf($this->l('Lang ID (%d) is not valid (at line %d).'), $id_lang, $current_line + 1);
         }
         if (!Warehouse::exists($id_warehouse)) {
             $error = sprintf($this->l('Warehouse ID (%d) is not valid (at line %d).'), $id_warehouse, $current_line + 1);
         }
         if (!Currency::getCurrency($id_currency)) {
             $error = sprintf($this->l('Currency ID (%d) is not valid (at line %d).'), $id_currency, $current_line + 1);
         }
         if (empty($supply_order->reference) && SupplyOrder::exists($reference)) {
             $error = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
         }
         if (!empty($supply_order->reference) && ($supply_order->reference != $reference && SupplyOrder::exists($reference))) {
             $error = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
         }
         if (!Validate::isDateFormat($date_delivery_expected)) {
             $error = sprintf($this->l('Date (%s) is not valid (at line %d). Format: %s.'), $date_delivery_expected, $current_line + 1, $this->l('YYYY-MM-DD'));
         } elseif (new DateTime($date_delivery_expected) <= new DateTime('yesterday')) {
             $error = sprintf($this->l('Date (%s) cannot be in the past (at line %d). Format: %s.'), $date_delivery_expected, $current_line + 1, $this->l('YYYY-MM-DD'));
         }
         if ($discount_rate < 0 || $discount_rate > 100) {
             $error = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate, $current_line + 1, $this->l('Format: Between 0 and 100'));
         }
         if ($supply_order->id > 0 && !$supply_order->isEditable()) {
             $error = sprintf($this->l('Supply Order (%d) is not editable (at line %d).'), $supply_order->id, $current_line + 1);
         }
         // if no errors, sets supply order
         if (empty($error)) {
             // adds parameters
             $info['id_ref_currency'] = (int) Currency::getDefaultCurrency()->id;
             $info['supplier_name'] = pSQL(Supplier::getNameById($id_supplier));
             if ($supply_order->id > 0) {
                 $info['id_supply_order_state'] = (int) $supply_order->id_supply_order_state;
                 $info['id'] = (int) $supply_order->id;
             } else {
                 $info['id_supply_order_state'] = 1;
             }
             // sets parameters
             AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order);
             // updatesd($supply_order);
             $res = true;
             if ((int) $supply_order->id && ($supply_order->exists((int) $supply_order->id) || $supply_order->exists($supply_order->reference))) {
                 $res &= $supply_order->update();
             } else {
                 $supply_order->force_id = (bool) Tools::getValue('forceIDs');
                 $res &= $supply_order->add();
             }
             // errors
             if (!$res) {
                 $this->errors[] = sprintf($this->l('Supply Order could not be saved (at line %d).'), $current_line + 1);
             }
         } else {
             $this->errors[] = $error;
         }
     }
     // closes
     $this->closeCsvFile($handle);
 }