private function initSuppliersForm() { if ($this->product->product_id) { if ($this->product_exists_in_shop) { // Get all id_product_attribute $attributes = $this->product->getAttributesResume($this->context->language->lang_id); if (empty($attributes)) { $attribute = new JeproshopAttributeModelAttribute(); $attribute->product_id = $this->product->product_id; $attribute->product_attribute_id = 0; $attribute->attribute_designation = ''; $attributes[] = $attribute; } $product_designation = array(); foreach ($attributes as $attribute) { $product_designation[$attribute->product_attribute_id] = rtrim($this->product->name[$this->context->language->lang_id] . ' - ' . $attribute->attribute_designation, ' - '); } // Get all available suppliers $suppliers = JeproshopSupplierModelSupplier::getSuppliers(); // Get already associated suppliers $associated_suppliers = JeproshopProductSupplierModelProductSupplier::getSupplierCollection($this->product->product_id); // Get already associated suppliers and force to retrieve product declinations $product_supplier_collection = JeproshopProductSupplierModelProductSupplier::getSupplierCollection($this->product->product_id, false); $default_supplier = 0; if (count($suppliers) > 0) { foreach ($suppliers as &$supplier) { $supplier->is_selected = false; $supplier->is_default = false; foreach ($associated_suppliers as $associated_supplier) { if ($associated_supplier->supplier_id == $supplier->supplier_id) { $associated_supplier->name = $supplier->name; $supplier->is_selected = true; if ($this->product->supplier_id == $supplier->supplier_id) { $supplier->is_default = true; $default_supplier = $supplier->supplier_id; } } } } } $this->assignRef('attributes', $attributes); $this->assignRef('suppliers', $suppliers); $this->assignRef('default_supplier', $default_supplier); $this->assignRef('associated_suppliers', $associated_suppliers); $this->assignRef('associated_suppliers_collection', $product_supplier_collection); $this->assignRef('product_designation', $product_designation); /*$this->assignRef( 'currencies' => Currency::getCurrencies(), 'link' => $this->context->link, 'token' => $this->token,));*/ $default_currency_id = JeproshopSettingModelSetting::getValue('default_currency'); $this->assignRef('default_currency_id', $default_currency_id); } else { $this->displayWarning($this->l('You must save the product in this shop before managing suppliers.')); } } else { $this->displayWarning($this->l('You must save this product before managing suppliers.')); } //$this->tpl_form_vars['custom_form'] = $data->fetch(); }
/** * Post treatment for suppliers */ public function processSuppliers() { $app = JFactory::getApplication(); $db = JFactory::getDBO(); $product = new JeproshopProductModelProduct((int) $app->input->get('product_id')); if (JeproshopTools::isLoadedObject($product, 'product_id')) { // Get all id_product_attribute $attributes = $product->getAttributesResume($this->context->language->lang_id); if (empty($attributes)) { $attribute = new JObject(); $attribute->set('product_attribute_id', 0); $attribute->set('attribute_designation', ''); $attributes[] = $attribute; } // Get all available suppliers $suppliers = JeproshopSupplierModelSupplier::getSuppliers(); // Get already associated suppliers $associated_suppliers = JeproshopProductSupplierModelProductSupplier::getSupplierCollection($product->product_id); $input = JRequest::get('post'); $product_data = $input['supplier']; $suppliers_to_associate = array(); $new_default_supplier = 0; if (isset($product_data['default_supplier'])) { $new_default_supplier = (int) $product_data['default_supplier']; } // Get new associations foreach ($suppliers as $supplier) { if (isset($product_data['check_supplier_' . $supplier->supplier_id])) { $suppliers_to_associate[] = $supplier->supplier_id; } } // Delete already associated suppliers if needed foreach ($associated_suppliers as $key => $associated_supplier) { if (!in_array($associated_supplier->supplier_id, $suppliers_to_associate)) { $associated_supplier->delete(); unset($associated_suppliers[$key]); } } // Associate suppliers foreach ($suppliers_to_associate as $supplier_id) { $to_add = true; foreach ($associated_suppliers as $as) { if ($supplier_id == $as->supplier_id) { $to_add = false; } } if ($to_add) { $product_supplier = new JeproshopProductSupplierModelProductSupplier(); $product_supplier->product_id = $product->product_id; $product_supplier->product_attribute_id = 0; $product_supplier->supplier_id = $supplier_id; if ($this->context->currency->currency_id) { $product_supplier->currency_id = (int) $this->context->currency->currency_id; } else { $product_supplier->currency_id = (int) JeproshopSettingModelSetting::getValue('default_currency'); } $product_supplier->save(); $associated_suppliers[] = $product_supplier; } } // Manage references and prices foreach ($attributes as $attribute) { foreach ($associated_suppliers as $supplier) { if ($product_data['supplier_reference_' . $product->product_id . '_' . $attribute->product_attribute_id . '_' . $supplier->supplier_id] || $product_data['product_price_' . $product->product_id . '_' . $attribute->product_attribute_id . '_' . $supplier->supplier_id] && $product_data['product_price_currency_' . $product->product_id . '_' . $attribute->product_attribute_id . '_' . $supplier->supplier_id]) { $reference = JFactory::getDBO()->quote($app->input->get('supplier_reference_' . $product->product_id . '_' . $attribute->product_attribute_id . '_' . $supplier->supplier_id, '')); $price = (double) str_replace(array(' ', ','), array('', '.'), $app->input->get('product_price_' . $product->product_id . '_' . $attribute->product_attribute_id . '_' . $supplier->supplier_id, 0)); $price = JeproshopTools::roundPrice($price, 6); $currency_id = (int) $app->input->get('product_price_currency_' . $product->product_id . '_' . $attribute->product_attribute_id . '_' . $supplier->supplier_id, 0); if ($currency_id <= 0 || (!($result = JeproshopCurrencyModelCurrency::getCurrency($currency_id)) || empty($result))) { $this->context->controller->has_errors = JText::_('The selected currency is not valid' . __FILE__ . 'on line ' . __LINE__); } // Save product-supplier data $product_supplier_id = (int) JeproshopProductSupplierModelProductSupplier::getIdByProductAndSupplier($product->product_id, $attribute->product_attribute_id, $supplier->supplier_id); if (!$product_supplier_id) { $product->addSupplierReference($supplier->supplier_id, (int) $attribute->product_attribute_id, $reference, (double) $price, (int) $currency_id); if ($product->supplier_id == $supplier->supplier_id) { if ((int) $attribute->product_attribute_id > 0) { $data = new JObject(); $data->set('supplier_reference', $db->quote($reference)); $data->set('wholesale_price', (double) JeproshopTools::convertPrice($price, $currency_id)); $where = " combination.product_id = " . (int) $product->product_id . " AND combination.product_attribute_id = " . (int) $attribute->product_attribute_id; JeproshopCombinationModelCombination::updateMultishopTable($data, $where); } else { $product->wholesale_price = (double) Tools::convertPrice($price, $currency_id); //converted in the default currency $product->supplier_reference = $db->quote($reference); $product->update(); } } } else { $product_supplier = new JeproshopProductSupplierModelProductSupplier($product_supplier_id); $product_supplier->currency_id = (int) $currency_id; $product_supplier->product_supplier_price_te = (double) $price; $product_supplier->product_supplier_reference = $db->quote($reference); $product_supplier->update(); } } elseif ($app->input->get('supplier_reference_' . $product->product_id . '_' . $attribute->product_attribute_id . '_' . $supplier->supplier_id)) { //int attribute with default values if possible if ((int) $attribute->product_attribute_id > 0) { $product_supplier = new JeproshopProductSupplierModelProductSupplier(); $product_supplier->product_id = $product->product_id; $product_supplier->product_attribute_id = (int) $attribute->product_attribute_id; $product_supplier->supplier_id = $supplier->supplier_id; $product_supplier->save(); } } } } /* // Manage default supplier for product if ($new_default_supplier != $product->supplier_id) { $product->supplier_id = $new_default_supplier; $query = "UPDATE " . $db->quoteName('#__jeproshop_product') . " SET " . $db->quoteName('supplier_id') . " = " . (int)$new_default_supplier; $query .= " WHERE " . $db->quoteName('product_id') . " = " . (int)$product->product_id; $db->setQuery($query); $db->query(); } */ } }