Example #1
0
    /**
     * Post treatment for suppliers
     */
    public function processSuppliers()
    {
        if ((int) Tools::getValue('supplier_loaded') === 1 && Validate::isLoadedObject($product = new Product((int) Tools::getValue('id_product')))) {
            // Get all id_product_attribute
            $attributes = $product->getAttributesResume($this->context->language->id);
            if (empty($attributes)) {
                $attributes[] = array('id_product_attribute' => 0, 'attribute_designation' => '');
            }
            // Get all available suppliers
            $suppliers = Supplier::getSuppliers();
            // Get already associated suppliers
            $associated_suppliers = ProductSupplier::getSupplierCollection($product->id);
            $suppliers_to_associate = array();
            $new_default_supplier = 0;
            if (Tools::isSubmit('default_supplier')) {
                $new_default_supplier = (int) Tools::getValue('default_supplier');
            }
            // Get new associations
            foreach ($suppliers as $supplier) {
                if (Tools::isSubmit('check_supplier_' . $supplier['id_supplier'])) {
                    $suppliers_to_associate[] = $supplier['id_supplier'];
                }
            }
            // Delete already associated suppliers if needed
            foreach ($associated_suppliers as $key => $associated_supplier) {
                if (!in_array($associated_supplier->id_supplier, $suppliers_to_associate)) {
                    $associated_supplier->delete();
                    unset($associated_suppliers[$key]);
                }
            }
            // Associate suppliers
            foreach ($suppliers_to_associate as $id) {
                $to_add = true;
                foreach ($associated_suppliers as $as) {
                    if ($id == $as->id_supplier) {
                        $to_add = false;
                    }
                }
                if ($to_add) {
                    $product_supplier = new ProductSupplier();
                    $product_supplier->id_product = $product->id;
                    $product_supplier->id_product_attribute = 0;
                    $product_supplier->id_supplier = $id;
                    if ($this->context->currency->id) {
                        $product_supplier->id_currency = (int) $this->context->currency->id;
                    } else {
                        $product_supplier->id_currency = (int) Configuration::get('PS_CURRENCY_DEFAULT');
                    }
                    $product_supplier->save();
                    $associated_suppliers[] = $product_supplier;
                }
            }
            // Manage references and prices
            foreach ($attributes as $attribute) {
                foreach ($associated_suppliers as $supplier) {
                    if (Tools::isSubmit('supplier_reference_' . $product->id . '_' . $attribute['id_product_attribute'] . '_' . $supplier->id_supplier) || Tools::isSubmit('product_price_' . $product->id . '_' . $attribute['id_product_attribute'] . '_' . $supplier->id_supplier) && Tools::isSubmit('product_price_currency_' . $product->id . '_' . $attribute['id_product_attribute'] . '_' . $supplier->id_supplier)) {
                        $reference = pSQL(Tools::getValue('supplier_reference_' . $product->id . '_' . $attribute['id_product_attribute'] . '_' . $supplier->id_supplier, ''));
                        $price = (double) str_replace(array(' ', ','), array('', '.'), Tools::getValue('product_price_' . $product->id . '_' . $attribute['id_product_attribute'] . '_' . $supplier->id_supplier, 0));
                        $price = Tools::ps_round($price, 6);
                        $id_currency = (int) Tools::getValue('product_price_currency_' . $product->id . '_' . $attribute['id_product_attribute'] . '_' . $supplier->id_supplier, 0);
                        if ($id_currency <= 0 || (!($result = Currency::getCurrency($id_currency)) || empty($result))) {
                            $this->errors[] = Tools::displayError('The selected currency is not valid');
                        }
                        // Save product-supplier data
                        $product_supplier_id = (int) ProductSupplier::getIdByProductAndSupplier($product->id, $attribute['id_product_attribute'], $supplier->id_supplier);
                        if (!$product_supplier_id) {
                            $product->addSupplierReference($supplier->id_supplier, (int) $attribute['id_product_attribute'], $reference, (double) $price, (int) $id_currency);
                            if ($product->id_supplier == $supplier->id_supplier) {
                                if ((int) $attribute['id_product_attribute'] > 0) {
                                    $data = array('supplier_reference' => pSQL($reference), 'wholesale_price' => (double) Tools::convertPrice($price, $id_currency));
                                    $where = '
										a.id_product = ' . (int) $product->id . '
										AND a.id_product_attribute = ' . (int) $attribute['id_product_attribute'];
                                    ObjectModel::updateMultishopTable('Combination', $data, $where);
                                } else {
                                    $product->wholesale_price = (double) Tools::convertPrice($price, $id_currency);
                                    //converted in the default currency
                                    $product->supplier_reference = pSQL($reference);
                                    $product->update();
                                }
                            }
                        } else {
                            $product_supplier = new ProductSupplier($product_supplier_id);
                            $product_supplier->id_currency = (int) $id_currency;
                            $product_supplier->product_supplier_price_te = (double) $price;
                            $product_supplier->product_supplier_reference = pSQL($reference);
                            $product_supplier->update();
                        }
                    } elseif (Tools::isSubmit('supplier_reference_' . $product->id . '_' . $attribute['id_product_attribute'] . '_' . $supplier->id_supplier)) {
                        //int attribute with default values if possible
                        if ((int) $attribute['id_product_attribute'] > 0) {
                            $product_supplier = new ProductSupplier();
                            $product_supplier->id_product = $product->id;
                            $product_supplier->id_product_attribute = (int) $attribute['id_product_attribute'];
                            $product_supplier->id_supplier = $supplier->id_supplier;
                            $product_supplier->save();
                        }
                    }
                }
            }
            // Manage defaut supplier for product
            if ($new_default_supplier != $product->id_supplier) {
                $this->object->id_supplier = $new_default_supplier;
                $this->object->update();
            }
        }
    }
Example #2
0
 /**
  * Sets Supplier Reference
  *
  * @param int $id_supplier
  * @param int $id_product_attribute
  * @param string $supplier_reference
  * @param float $price
  * @param int $id_currency
  */
 public function addSupplierReference($id_supplier, $id_product_attribute, $supplier_reference = null, $price = null, $id_currency = null)
 {
     //in some case we need to add price without supplier reference
     if ($supplier_reference === null) {
         $supplier_reference = '';
     }
     //Try to set the default supplier reference
     if ($id_supplier > 0) {
         $id_product_supplier = (int) ProductSupplier::getIdByProductAndSupplier($this->id, $id_product_attribute, $id_supplier);
         if (!$id_product_supplier) {
             //create new record
             $product_supplier_entity = new ProductSupplier();
             $product_supplier_entity->id_product = (int) $this->id;
             $product_supplier_entity->id_product_attribute = (int) $id_product_attribute;
             $product_supplier_entity->id_supplier = (int) $id_supplier;
             $product_supplier_entity->product_supplier_reference = pSQL($supplier_reference);
             $product_supplier_entity->product_supplier_price_te = (int) $price;
             $product_supplier_entity->id_currency = (int) $id_currency;
             $product_supplier_entity->save();
         } else {
             $product_supplier = new ProductSupplier((int) $id_product_supplier);
             $product_supplier->product_supplier_reference = pSQL($supplier_reference);
             $product_supplier->update();
         }
     }
 }