// you can define invoice on payment addition
This commit is contained in:
@@ -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%"> </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
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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'),
|
||||
|
||||
@@ -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'], ' - ');
|
||||
|
||||
Reference in New Issue
Block a user