Advertisement
waflessnet

override/controllers/admin/AdminImportcontroller.php

Aug 28th, 2013
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.06 KB | None | 0 0
  1. public function supplyOrdersDetailsImport()
  2.     {
  3.         // opens CSV & sets locale
  4.         $this->receiveTab();
  5.         $handle = $this->openCsvFile();
  6.         AdminImportController::setLocale();
  7.  
  8.         $products = array();
  9.         $reset = true;
  10.         // main loop, for each supply orders details to import
  11.         for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); ++$current_line)
  12.         {
  13.             // if convert requested
  14.             if (Tools::getValue('convert'))
  15.                 $line = $this->utf8EncodeArray($line);
  16.             $info = AdminImportController::getMaskedRow($line);
  17.  
  18.             // sets default values if needed
  19.             AdminImportController::setDefaultValues($info);
  20.  
  21.             // gets the supply order
  22.             if (array_key_exists('supply_order_reference', $info) && pSQL($info['supply_order_reference']) && SupplyOrder::exists(pSQL($info['supply_order_reference'])))
  23.                 $supply_order = SupplyOrder::getSupplyOrderByReference(pSQL($info['supply_order_reference']));
  24.             else
  25.                 $this->errors[] = sprintf($this->l('Supply Order (%s) could not be loaded (at line %d).'), (int)$info['supply_order_reference'], $current_line + 1);
  26.  
  27.             if (empty($this->errors))
  28.             {
  29.                 // sets parameters
  30.                 $id_product = (int)$info['id_product'];
  31.                 if (!$info['id_product_attribute'])
  32.                     $info['id_product_attribute'] = 0;
  33.                 $id_product_attribute = (int)$info['id_product_attribute'];
  34.                 $unit_price_te = (float)$info['unit_price_te'];
  35.                 $quantity_expected = (int)$info['quantity_expected'];
  36.                 $discount_rate = (float)$info['discount_rate'];
  37.                 $tax_rate = (float)$info['tax_rate'];
  38.  
  39.                 // checks if one product is there only once
  40.                 if (isset($product['id_product']))
  41.                 {
  42.                     if ($product['id_product'] == $id_product && $product['id_product_attribute']== $id_product_attribute)
  43.                         $this->errors[] = sprintf($this->l('Product (%d/%D) cannot be added twice (at line %d).'), $id_product,
  44.                             $id_product_attribute, $current_line + 1);
  45.                     else{
  46.                         $product['id_product'] = $id_product;
  47.                         $product['id_product_attribute']= $id_product_attribute;
  48.                     }
  49.                        
  50.                 }
  51.                 else
  52.                     $product['id_product'] = 0;
  53.  
  54.                 // checks parameters
  55.                 if (false === ($supplier_reference = ProductSupplier::getProductSupplierReference($id_product, $id_product_attribute, $supply_order->id_supplier)))
  56.                     $this->errors[] = sprintf($this->l('Product (%d/%d) is not available for this order (at line %d).'), $id_product,
  57.                         $id_product_attribute, $current_line + 1);
  58.                 if ($unit_price_te < 0)
  59.                     $this->errors[] = sprintf($this->l('Unit Price (tax excl.) (%d) is not valid (at line %d).'), $unit_price_te, $current_line + 1);
  60.                 if ($quantity_expected < 0)
  61.                     $this->errors[] = sprintf($this->l('Quantity Expected (%d) is not valid (at line %d).'), $quantity_expected, $current_line + 1);
  62.                 if ($discount_rate < 0 || $discount_rate > 100)
  63.                 $this->errors[] = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate,
  64.                                            $current_line + 1, $this->l('Format: between 0 and 100'));
  65.                 if ($tax_rate < 0 || $tax_rate > 100)
  66.                 $this->errors[] = sprintf($this->l('Quantity Expected (%d) is not valid (at line %d).'), $tax_rate,
  67.                                            $current_line + 1, $this->l('Format: between 0 and 100'));
  68.  
  69.                 // if no errors, sets supply order details
  70.                 if (empty($this->errors))
  71.                 {
  72.                     // resets order if needed
  73.                     if ($reset)
  74.                     {
  75.                         $supply_order->resetProducts();
  76.                         $reset = false;
  77.                     }
  78.  
  79.                     // creates new product
  80.                     $supply_order_detail = new SupplyOrderDetail();
  81.                     AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order_detail);
  82.  
  83.                     // sets parameters
  84.                     $supply_order_detail->id_supply_order = $supply_order->id;
  85.                     $currency = new Currency($supply_order->id_ref_currency);
  86.                     $supply_order_detail->id_currency = $currency->id;
  87.                     $supply_order_detail->exchange_rate = $currency->conversion_rate;
  88.                     $supply_order_detail->supplier_reference = $supplier_reference;
  89.                     $supply_order_detail->name = Product::getProductName($id_product, $id_product_attribute, $supply_order->id_lang);
  90.  
  91.                     // gets ean13 / ref / upc
  92.                     $query = new DbQuery();
  93.                     $query->select('
  94.                         IFNULL(pa.reference, IFNULL(p.reference, \'\')) as reference,
  95.                         IFNULL(pa.ean13, IFNULL(p.ean13, \'\')) as ean13,
  96.                         IFNULL(pa.upc, IFNULL(p.upc, \'\')) as upc
  97.                     ');
  98.                     $query->from('product', 'p');
  99.                     $query->leftJoin('product_attribute', 'pa', 'pa.id_product = p.id_product AND id_product_attribute = '.(int)$id_product_attribute);
  100.                     $query->where('p.id_product = '.(int)$id_product);
  101.                     $query->where('p.is_virtual = 0 AND p.cache_is_pack = 0');
  102.                     $res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
  103.                     $product_infos = $res['0'];
  104.  
  105.                     $supply_order_detail->reference = $product_infos['reference'];
  106.                     $supply_order_detail->ean13 = $product_infos['ean13'];
  107.                     $supply_order_detail->upc = $product_infos['upc'];
  108.  
  109.                     $supply_order_detail->add();
  110.                     $supply_order->update();
  111.                     unset($supply_order_detail);
  112.  
  113.                 }
  114.             }
  115.         }
  116.  
  117.         // closes
  118.         $this->closeCsvFile($handle);
  119.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement