// Product Suppliers : Debug and optimizations

git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@10589 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
dSevere
2011-11-23 18:48:09 +00:00
parent b12517c17c
commit ddcede4ef5
3 changed files with 43 additions and 44 deletions
+20 -3
View File
@@ -121,10 +121,10 @@ class ProductSupplierCore extends ObjectModel
* For a given product, retrieves its suppliers * For a given product, retrieves its suppliers
* *
* @param int $id_product * @param int $id_product
* @param int $id_lang * @param int $group_by_supplier
* @return array * @return array
*/ */
public static function getSupplierCollection($id_product, $group_by_product = true) public static function getSupplierCollection($id_product, $group_by_supplier = true)
{ {
// build query // build query
$query = new DbQuery(); $query = new DbQuery();
@@ -132,11 +132,28 @@ class ProductSupplierCore extends ObjectModel
$query->from('product_supplier ps'); $query->from('product_supplier ps');
$query->where('ps.id_product = '.(int)$id_product); $query->where('ps.id_product = '.(int)$id_product);
if ($group_by_product) if ($group_by_supplier)
$query->groupBy('ps.id_supplier'); $query->groupBy('ps.id_supplier');
$results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
return ObjectModel::hydrateCollection('ProductSupplier', $results); return ObjectModel::hydrateCollection('ProductSupplier', $results);
} }
public function delete()
{
$res = parent::delete();
if ($res && $this->id_product_attribute == 0)
{
$items = self::getSupplierCollection($this->id_product, false);
foreach ($items as &$item)
{
if ($item->id_product_attribute > 0)
$item->delete();
}
}
return $res;
}
} }
+20 -38
View File
@@ -1975,7 +1975,7 @@ class AdminProductsControllerCore extends AdminController
*/ */
public function postProcessFormSuppliers() public function postProcessFormSuppliers()
{ {
if (Validate::isLoadedObject($product = new Product((int)(Tools::getValue('id_product'))))) if (Validate::isLoadedObject($product = new Product((int)Tools::getValue('id_product'))))
{ {
// Get all available suppliers // Get all available suppliers
$suppliers = Supplier::getSuppliers(); $suppliers = Supplier::getSuppliers();
@@ -1995,9 +1995,12 @@ class AdminProductsControllerCore extends AdminController
$suppliers_to_associate[] = $supplier['id_supplier']; $suppliers_to_associate[] = $supplier['id_supplier'];
// Delete already associated suppliers if needed // Delete already associated suppliers if needed
foreach ($associated_suppliers as &$associated_supplier) foreach ($associated_suppliers as $key => &$associated_supplier)
if (!in_array($associated_supplier->id_supplier, $suppliers_to_associate)) if (!in_array($associated_supplier->id_supplier, $suppliers_to_associate))
{
$associated_supplier->delete(); $associated_supplier->delete();
unset($associated_suppliers[$key]);
}
// Associate suppliers // Associate suppliers
foreach ($suppliers_to_associate as $id) foreach ($suppliers_to_associate as $id)
@@ -2014,6 +2017,8 @@ class AdminProductsControllerCore extends AdminController
$product_supplier->id_product_attribute = 0; $product_supplier->id_product_attribute = 0;
$product_supplier->id_supplier = $id; $product_supplier->id_supplier = $id;
$product_supplier->save(); $product_supplier->save();
$associated_suppliers[] = $product_supplier;
} }
} }
@@ -2026,17 +2031,6 @@ class AdminProductsControllerCore extends AdminController
$this->confirmations[] = $this->l('Suppliers of the product have been updated'); $this->confirmations[] = $this->l('Suppliers of the product have been updated');
$this->postProcessFormSupplierReferences();
}
}
/**
* Post traitment for supplier product references
*/
public function postProcessFormSupplierReferences()
{
if (Validate::isLoadedObject($product = new Product((int)(Tools::getValue('id_product')))))
{
// Get all id_product_attribute // Get all id_product_attribute
$attributes = $product->getAttributesResume($this->context->language->id); $attributes = $product->getAttributesResume($this->context->language->id);
if (empty($attributes)) if (empty($attributes))
@@ -2045,28 +2039,22 @@ class AdminProductsControllerCore extends AdminController
'attribute_designation' => '' 'attribute_designation' => ''
); );
// get associated suppliers
$associated_suppliers = ProductSupplier::getSupplierCollection($product->id);
// Get already associated suppliers and force to retreive product declinaisons
$product_supplier_collection = ProductSupplier::getSupplierCollection($product->id, false);
// Manage references // Manage references
foreach ($attributes as $attribute) foreach ($attributes as $attribute)
foreach ($associated_suppliers as $supplier) foreach ($associated_suppliers as $supplier)
if (Tools::isSubmit('supplier_reference_'.$attribute['id_product'].'_'.$attribute['id_product_attribute'].'_'.$supplier->id_supplier)) if (Tools::isSubmit('supplier_reference_'.$product->id.'_'.$attribute['id_product_attribute'].'_'.$supplier->id_supplier))
{ {
$reference = Tools::getValue('supplier_reference_'.$attribute['id_product'].'_'.$attribute['id_product_attribute'].'_'.$supplier->id_supplier, ''); $reference = Tools::getValue('supplier_reference_'.$product->id.'_'.$attribute['id_product_attribute'].'_'.$supplier->id_supplier, '');
if (!empty($reference)) if (!empty($reference))
{ {
$existing_reference = ProductSupplier::getProductSupplierReference($attribute['id_product'], $attribute['id_product_attribute'], $supplier->id_supplier); $existing_id = (int)ProductSupplier::getIdByProductAndSupplier($product->id, $attribute['id_product_attribute'], $supplier->id_supplier);
if (empty($existing_reference)) if ($existing_id <= 0)
{ {
//create new record //create new record
$product_supplier_entity = new ProductSupplier(); $product_supplier_entity = new ProductSupplier();
$product_supplier_entity->id_product = $attribute['id_product']; $product_supplier_entity->id_product = $product->id;
$product_supplier_entity->id_product_attribute = $attribute['id_product_attribute']; $product_supplier_entity->id_product_attribute = $attribute['id_product_attribute'];
$product_supplier_entity->id_supplier = $supplier->id_supplier; $product_supplier_entity->id_supplier = $supplier->id_supplier;
$product_supplier_entity->product_supplier_reference = pSQL($reference); $product_supplier_entity->product_supplier_reference = pSQL($reference);
@@ -2075,21 +2063,14 @@ class AdminProductsControllerCore extends AdminController
else else
{ {
//update existing record //update existing record
foreach ($product_supplier_collection as &$psc) $product_supplier_entity = new ProductSupplier($existing_id);
if ($psc->id_product == $attribute['id_product'] $reference = pSQL($reference);
&& $psc->id_product_attribute == $attribute['id_product_attribute']
&& $psc->id_supplier == $supplier->id_supplier
)
{
$reference = pSQL($reference);
if ($reference != $psc->product_supplier_reference) if ($product_supplier_entity->product_supplier_reference != $reference)
{ {
$psc->product_supplier_reference = pSQL($reference); $product_supplier_entity->product_supplier_reference = pSQL($reference);
$psc->update(); $product_supplier_entity->update();
} }
break;
}
} }
} }
} }
@@ -3199,6 +3180,7 @@ class AdminProductsControllerCore extends AdminController
$attributes = $obj->getAttributesResume($this->context->language->id); $attributes = $obj->getAttributesResume($this->context->language->id);
if (empty($attributes)) if (empty($attributes))
$attributes[] = array( $attributes[] = array(
'id_product' => $this->object->id,
'id_product_attribute' => 0, 'id_product_attribute' => 0,
'attribute_designation' => '' 'attribute_designation' => ''
); );
@@ -541,7 +541,7 @@ class AdminSupplyOrdersControllerCore extends AdminController
'title' => $this->l('Creation date'), 'title' => $this->l('Creation date'),
'width' => 150, 'width' => 150,
'align' => 'right', 'align' => 'right',
'type' => 'datetime', 'type' => 'date',
'havingFilter' => true, 'havingFilter' => true,
'filter_key' => 'a!date_add' 'filter_key' => 'a!date_add'
), ),
@@ -549,7 +549,7 @@ class AdminSupplyOrdersControllerCore extends AdminController
'title' => $this->l('Last modification date'), 'title' => $this->l('Last modification date'),
'width' => 150, 'width' => 150,
'align' => 'right', 'align' => 'right',
'type' => 'datetime', 'type' => 'date',
'havingFilter' => true, 'havingFilter' => true,
'filter_key' => 'a!date_upd' 'filter_key' => 'a!date_upd'
), ),
@@ -557,7 +557,7 @@ class AdminSupplyOrdersControllerCore extends AdminController
'title' => $this->l('Delivery date'), 'title' => $this->l('Delivery date'),
'width' => 150, 'width' => 150,
'align' => 'right', 'align' => 'right',
'type' => 'datetime', 'type' => 'date',
'havingFilter' => true, 'havingFilter' => true,
'filter_key' => 'a!date_delivery_expected' 'filter_key' => 'a!date_delivery_expected'
), ),