// you can define invoice on payment addition

This commit is contained in:
aFolletete
2011-12-14 18:42:50 +00:00
parent e38804f7c2
commit 16175b1561
5 changed files with 103 additions and 54 deletions
+19
View File
@@ -279,6 +279,7 @@
<th>{l s='Payment method'}</th>
<th style="width:15%">{l s='Transaction ID'}</th>
<th style="width:25%">{l s='Amount'}</th>
<th style="width:15%">{l s='Invoice'}</th>
<th style="width:10%">&nbsp;</th>
</tr>
</thead>
@@ -289,6 +290,13 @@
<td>{$payment->payment_method}</td>
<td>{$payment->transaction_id}</td>
<td>{displayPrice price=$payment->amount currency=$payment->id_currency}</td>
<td>
{if $payment->id_order_invoice}
#{Configuration::get('PS_INVOICE_PREFIX', $current_id_lang)}{'%06d'|sprintf:OrderInvoice::retrieveOneById($payment->id_order_invoice)->number}
{else}
{l s='No invoice'}
{/if}
</td>
<td></td>
</tr>
{/foreach}
@@ -313,6 +321,17 @@
{/foreach}
</select>
</td>
<td>
{if sizeof($invoices_collection)}
<select name="payment_invoice">
{foreach from=$invoices_collection item=invoice}
<option value="{$invoice->id}" selected="selected">#{Configuration::get('PS_INVOICE_PREFIX', $current_id_lang)}{'%06d'|sprintf:$invoice->number}</option>
{/foreach}
</select>
{else}
{l s='No invoice available'}
{/if}
</td>
<td><input class="button" type="submit" name="submitAddPayment" value="Add" /></td>
</tr>
</tbody>
+13 -5
View File
@@ -1065,6 +1065,12 @@ class OrderCore extends ObjectModel
SET `id_order_invoice` = '.(int)$order_invoice->id.'
WHERE `id_order` = '.(int)$order_invoice->id_order);
// Update order payment
Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'order_payment`
SET `id_order_invoice` = '.(int)$order_invoice->id.'
WHERE `id_order` = '.(int)$order_invoice->id_order);
$this->invoice_date = $order_invoice->date_add;
$this->invoice_number = $order_invoice->number;
$this->update();
@@ -1313,12 +1319,14 @@ class OrderCore extends ObjectModel
* @param string $payment_transaction_id
* @param Currency $currency
* @param string $date
* @param OrderInvoice $order_invoice
* @return bool
*/
public function addOrderPayment($amount_paid, $payment_method = null, $payment_transaction_id = null, $currency = null, $date = null)
public function addOrderPayment($amount_paid, $payment_method = null, $payment_transaction_id = null, $currency = null, $date = null, $order_invoice = null)
{
$order_payment = new OrderPayment();
$order_payment->id_order = $this->id;
$order_payment->id_order_invoice = (!is_null($order_invoice) ? $order_invoice->id : null);
$order_payment->id_currency = ($currency ? $currency->id : $this->id_currency);
// we kept the currency rate for historization reasons
$order_payment->conversion_rate = ($currency ? $currency->conversion_rate : 1);
@@ -1567,10 +1575,10 @@ class OrderCore extends ObjectModel
return true;
return false;
}
/**
* Get warehouse associated to the order
*
*
* return array List of warehouse
*/
public function getWarehouseList()
@@ -1582,11 +1590,11 @@ class OrderCore extends ObjectModel
GROUP BY id_warehouse');
if (!$results)
return array();
$warehouse_list = array();
foreach ($results as $row)
$warehouse_list[] = $row['id_warehouse'];
return $warehouse_list;
}
}
+54 -40
View File
@@ -381,54 +381,68 @@ class OrderInvoiceCore extends ObjectModel
);
}
/**
* Returns all the order invoice that match the date interval
*
* @since 1.5
* @static
* @param $date_from
* @param $date_to
* @return array collection of OrderInvoice
*/
public static function getByDateInterval($date_from, $date_to)
{
$order_invoice_list = Db::getInstance()->ExecuteS('SELECT oi.*
FROM `'._DB_PREFIX_.'order_invoice` oi
LEFT JOIN `'._DB_PREFIX_.'orders` o ON (o.`id_order` = oi.`id_order`)
WHERE DATE_ADD(oi.date_add, INTERVAL -1 DAY) <= \''.pSQL($date_to).'\'
AND oi.date_add >= \''.pSQL($date_from).'\'
'.Context::getContext()->shop->addSqlRestriction().
' ORDER BY oi.date_add ASC');
/**
* Returns all the order invoice that match the date interval
*
* @since 1.5
* @static
* @param $date_from
* @param $date_to
* @return array collection of OrderInvoice
*/
public static function getByDateInterval($date_from, $date_to)
{
$order_invoice_list = Db::getInstance()->ExecuteS('
SELECT oi.*
FROM `'._DB_PREFIX_.'order_invoice` oi
LEFT JOIN `'._DB_PREFIX_.'orders` o ON (o.`id_order` = oi.`id_order`)
WHERE DATE_ADD(oi.date_add, INTERVAL -1 DAY) <= \''.pSQL($date_to).'\'
AND oi.date_add >= \''.pSQL($date_from).'\'
'.Context::getContext()->shop->addSqlRestriction().
' ORDER BY oi.date_add ASC
');
return ObjectModel::hydrateCollection('OrderInvoice', $order_invoice_list);
}
return ObjectModel::hydrateCollection('OrderInvoice', $order_invoice_list);
}
/**
* @since 1.5
* @static
* @param $id_order_invoice
*/
public static function getCarrier($id_order_invoice)
{
$carrier = false;
if ($id_carrier = OrderInvoice::getCarrierId($id_order_invoice))
$carrier = new Carrier((int)$id_carrier);
return $carrier;
}
/**
* @since 1.5
* @static
* @param $id_order_invoice
*/
public static function getCarrier($id_order_invoice)
{
$carrier = false;
if ($id_carrier = OrderInvoice::getCarrierId($id_order_invoice))
$carrier = new Carrier((int)$id_carrier);
public static function getCarrierId($id_order_invoice)
{
$sql = 'SELECT `id_carrier`
FROM `'._DB_PREFIX_.'order_carrier`
WHERE `id_order_invoice` = '.(int)$id_order_invoice;
return $carrier;
}
return Db::getInstance()->getValue($sql);
}
/**
* @since 1.5
* @static
* @param $id_order_invoice
*/
public static function getCarrierId($id_order_invoice)
{
$sql = 'SELECT `id_carrier`
FROM `'._DB_PREFIX_.'order_carrier`
WHERE `id_order_invoice` = '.(int)$id_order_invoice;
return Db::getInstance()->getValue($sql);
}
/**
* @static
* @param $id
* @return OrderInvoice
*/
public static function retrieveOneById($id)
{
$order_invoice = new OrderInvoice($id);
if (!Validate::isLoadedObject($order_invoice))
throw new PrestashopException('Can\'t load Order Invoice object for id: '.$id);
return $order_invoice;
}
}
+2
View File
@@ -29,6 +29,7 @@ class OrderPaymentCore extends ObjectModel
{
public $id_order;
public $id_currency;
public $id_order_invoice;
public $amount;
public $payment_method;
public $conversion_rate;
@@ -48,6 +49,7 @@ class OrderPaymentCore extends ObjectModel
'fields' => array(
'id_order' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'id_currency' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'id_order_invoice' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'amount' => array('type' => self::TYPE_FLOAT, 'validate' => 'isPrice', 'required' => true),
'payment_method' => array('type' => self::TYPE_STRING, 'validate' => 'isName'),
'conversion_rate' => array('type' => self::TYPE_INT, 'validate' => 'isFloat'),
+15 -9
View File
@@ -559,6 +559,10 @@ class AdminOrdersControllerCore extends AdminController
$order = new Order(Tools::getValue('id_order'));
$amount = str_replace(',', '.', Tools::getValue('payment_amount'));
$currency = new Currency(Tools::getValue('payment_currency'));
if ($order->hasInvoice())
$order_invoice = new OrderInvoice(Tools::getValue('payment_invoice'));
else
$order_invoice = null;
if (!Validate::isLoadedObject($order))
$this->_errors[] = Tools::displayError('Order can\'t be found');
elseif (!Validate::isPrice($amount))
@@ -569,11 +573,13 @@ class AdminOrdersControllerCore extends AdminController
$this->_errors[] = Tools::displayError('Transaction ID is invalid');
elseif (!Validate::isLoadedObject($currency))
$this->_errors[] = Tools::displayError('Currency is invalid');
elseif ($order->hasInvoice() && !Validate::isLoadedObject($order_invoice))
$this->_errors[] = Tools::displayError('Invoice is invalid');
elseif (!Validate::isDate(Tools::getValue('payment_date')))
$this->_errors[] = Tools::displayError('Date is invalid');
else
{
if (!$order->addOrderPayment($amount, Tools::getValue('payment_method'), Tools::getValue('payment_transaction_id'), $currency, Tools::getValue('payment_date')))
if (!$order->addOrderPayment($amount, Tools::getValue('payment_method'), Tools::getValue('payment_transaction_id'), $currency, Tools::getValue('payment_date'), $order_invoice))
$this->_errors[] = Tools::displayError('An error occured on adding of order payment');
else
Tools::redirectAdmin(self::$currentIndex.'&id_order='.$order->id.'&vieworder&conf=4&token='.$this->token);
@@ -839,9 +845,9 @@ class AdminOrdersControllerCore extends AdminController
// Tax rate for this customer
if (Tools::isSubmit('id_address'))
$product['tax_rate'] = $productObj->getTaxesRate(new Address(Tools::getValue('id_address')));
$product['warehouse_list'] = array();
foreach($attributes AS $attribute)
{
if (!isset($combinations[$attribute['id_product_attribute']]['attributes']))
@@ -859,23 +865,23 @@ class AdminOrdersControllerCore extends AdminController
}
if (!isset($combinations[$attribute['id_product_attribute']]['qty_in_stock']))
$combinations[$attribute['id_product_attribute']]['qty_in_stock']= StockAvailable::getQuantityAvailableByProduct((int)$product['id_product'], $attribute['id_product_attribute'], (int)$this->context->shop->getID());
if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
$product['warehouse_list'][$attribute['id_product_attribute']] = Warehouse::getProductWarehouseList($product['id_product'], $attribute['id_product_attribute']);
else
$product['warehouse_list'][$attribute['id_product_attribute']] = array();
$product['stock'][$attribute['id_product_attribute']] = Product::getRealQuantity($product['id_product'], $attribute['id_product_attribute']);
}
if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
$product['warehouse_list'][0] = Warehouse::getProductWarehouseList($product['id_product']);
else
$product['warehouse_list'][0] = array();
$product['stock'][0] = Product::getRealQuantity($product['id_product'], 0, 0);
foreach ($combinations AS &$combination)
$combination['attributes'] = rtrim($combination['attributes'], ' - ');