Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function supplyOrdersDetailsImport()
- {
- // opens CSV & sets locale
- $this->receiveTab();
- $handle = $this->openCsvFile();
- AdminImportController::setLocale();
- $products = array();
- $reset = true;
- // main loop, for each supply orders details 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);
- // gets the supply order
- if (array_key_exists('supply_order_reference', $info) && pSQL($info['supply_order_reference']) && SupplyOrder::exists(pSQL($info['supply_order_reference'])))
- $supply_order = SupplyOrder::getSupplyOrderByReference(pSQL($info['supply_order_reference']));
- else
- $this->errors[] = sprintf($this->l('Supply Order (%s) could not be loaded (at line %d).'), (int)$info['supply_order_reference'], $current_line + 1);
- if (empty($this->errors))
- {
- // sets parameters
- $id_product = (int)$info['id_product'];
- if (!$info['id_product_attribute'])
- $info['id_product_attribute'] = 0;
- $id_product_attribute = (int)$info['id_product_attribute'];
- $unit_price_te = (float)$info['unit_price_te'];
- $quantity_expected = (int)$info['quantity_expected'];
- $discount_rate = (float)$info['discount_rate'];
- $tax_rate = (float)$info['tax_rate'];
- // checks if one product is there only once
- if (isset($product['id_product']))
- {
- if ($product['id_product'] == $id_product && $product['id_product_attribute']== $id_product_attribute)
- $this->errors[] = sprintf($this->l('Product (%d/%D) cannot be added twice (at line %d).'), $id_product,
- $id_product_attribute, $current_line + 1);
- else{
- $product['id_product'] = $id_product;
- $product['id_product_attribute']= $id_product_attribute;
- }
- }
- else
- $product['id_product'] = 0;
- // checks parameters
- if (false === ($supplier_reference = ProductSupplier::getProductSupplierReference($id_product, $id_product_attribute, $supply_order->id_supplier)))
- $this->errors[] = sprintf($this->l('Product (%d/%d) is not available for this order (at line %d).'), $id_product,
- $id_product_attribute, $current_line + 1);
- if ($unit_price_te < 0)
- $this->errors[] = sprintf($this->l('Unit Price (tax excl.) (%d) is not valid (at line %d).'), $unit_price_te, $current_line + 1);
- if ($quantity_expected < 0)
- $this->errors[] = sprintf($this->l('Quantity Expected (%d) is not valid (at line %d).'), $quantity_expected, $current_line + 1);
- if ($discount_rate < 0 || $discount_rate > 100)
- $this->errors[] = 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 ($tax_rate < 0 || $tax_rate > 100)
- $this->errors[] = sprintf($this->l('Quantity Expected (%d) is not valid (at line %d).'), $tax_rate,
- $current_line + 1, $this->l('Format: between 0 and 100'));
- // if no errors, sets supply order details
- if (empty($this->errors))
- {
- // resets order if needed
- if ($reset)
- {
- $supply_order->resetProducts();
- $reset = false;
- }
- // creates new product
- $supply_order_detail = new SupplyOrderDetail();
- AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order_detail);
- // sets parameters
- $supply_order_detail->id_supply_order = $supply_order->id;
- $currency = new Currency($supply_order->id_ref_currency);
- $supply_order_detail->id_currency = $currency->id;
- $supply_order_detail->exchange_rate = $currency->conversion_rate;
- $supply_order_detail->supplier_reference = $supplier_reference;
- $supply_order_detail->name = Product::getProductName($id_product, $id_product_attribute, $supply_order->id_lang);
- // gets ean13 / ref / upc
- $query = new DbQuery();
- $query->select('
- IFNULL(pa.reference, IFNULL(p.reference, \'\')) as reference,
- IFNULL(pa.ean13, IFNULL(p.ean13, \'\')) as ean13,
- IFNULL(pa.upc, IFNULL(p.upc, \'\')) as upc
- ');
- $query->from('product', 'p');
- $query->leftJoin('product_attribute', 'pa', 'pa.id_product = p.id_product AND id_product_attribute = '.(int)$id_product_attribute);
- $query->where('p.id_product = '.(int)$id_product);
- $query->where('p.is_virtual = 0 AND p.cache_is_pack = 0');
- $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
- $product_infos = $res['0'];
- $supply_order_detail->reference = $product_infos['reference'];
- $supply_order_detail->ean13 = $product_infos['ean13'];
- $supply_order_detail->upc = $product_infos['upc'];
- $supply_order_detail->add();
- $supply_order->update();
- unset($supply_order_detail);
- }
- }
- }
- // closes
- $this->closeCsvFile($handle);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement