// Fix duplicate invoice delivery number

This commit is contained in:
Jerome Nadaud committed 2013-10-09 17:43:43 +02:00
1 parent 68d84892c7
commit f6bbb6e241
1 file changed
+51 -14
+51 -14
View File
@@ -1109,6 +1109,18 @@ class OrderCore extends ObjectModel
return Db::getInstance()->execute($sql); return Db::getInstance()->execute($sql);
} }
public function getInvoiceNumber($order_invoice_id)
{
if (!$order_invoice_id)
return false;
return Db::getInstance()->getValue('
SELECT `number`
FROM `'._DB_PREFIX_.'order_invoice`
WHERE `id_order_invoice` = '.(int)$order_invoice_id
);
}
/** /**
* This method allows to generate first invoice of the current order * This method allows to generate first invoice of the current order
*/ */
@@ -1193,11 +1205,46 @@ class OrderCore extends ObjectModel
// Keep it for backward compatibility, to remove on 1.6 version // Keep it for backward compatibility, to remove on 1.6 version
$this->invoice_date = $order_invoice->date_add; $this->invoice_date = $order_invoice->date_add;
$this->invoice_number = $order_invoice->number; $this->invoice_number = $this->getInvoiceNumber($order_invoice->id);
$this->update(); $this->update();
} }
} }
public function setDeliveryNumber($order_invoice_id, $id_shop)
{
if (!$order_invoice_id)
return false;
$number = Configuration::get('PS_DELIVERY_NUMBER', null, null, $id_shop);
// If invoice start number has been set, you clean the value of this configuration
if ($number)
Configuration::updateValue('PS_DELIVERY_NUMBER', false, false, null, $id_shop);
$sql = 'UPDATE `'._DB_PREFIX_.'order_invoice` SET delivery_number =';
if ($number)
$sql .= (int)$number;
else
$sql .= '(SELECT new_number FROM (SELECT (MAX(`delivery_number`) + 1) AS new_number
FROM `'._DB_PREFIX_.'order_invoice`) AS result)';
$sql .=' WHERE `id_order_invoice` = '.(int)$order_invoice_id;
return Db::getInstance()->execute($sql);
}
public function getDeliveryNumber($order_invoice_id)
{
if (!$order_invoice_id)
return false;
return Db::getInstance()->getValue('
SELECT `delivery_number`
FROM `'._DB_PREFIX_.'order_invoice`
WHERE `id_order_invoice` = '.(int)$order_invoice_id
);
}
public function setDelivery() public function setDelivery()
{ {
// Get all invoice // Get all invoice
@@ -1206,24 +1253,14 @@ class OrderCore extends ObjectModel
{ {
if ($order_invoice->delivery_number) if ($order_invoice->delivery_number)
continue; continue;
$number = (int)Configuration::get('PS_DELIVERY_NUMBER', null, null, $this->id_shop);
if (!$number)
{
//if delivery number is not set or wrong, we set a default one.
Configuration::updateValue('PS_DELIVERY_NUMBER', 1, false, null, $this->id_shop);
$number = 1;
}
// Set delivery number on invoice // Set delivery number on invoice
$order_invoice->delivery_number = $number; $order_invoice->delivery_number = 0;
$order_invoice->delivery_date = date('Y-m-d H:i:s'); $order_invoice->delivery_date = date('Y-m-d H:i:s');
// Update Order Invoice // Update Order Invoice
$order_invoice->update(); $order_invoice->update();
$this->setDeliveryNumber($order_invoice->id, $this->id_shop);
// Keep for backward compatibility $this->delivery_number = $this->getDeliveryNumber($order_invoice->id);
$this->delivery_number = $number;
Configuration::updateValue('PS_DELIVERY_NUMBER', $number + 1, false, null, $this->id_shop);
} }
// Keep it for backward compatibility, to remove on 1.6 version // Keep it for backward compatibility, to remove on 1.6 version