312 lines
10 KiB
PHP
312 lines
10 KiB
PHP
<?php
|
|
class Order extends OrderCore
|
|
{
|
|
/** @var int True if the order comes from app */
|
|
public $appli = 0;
|
|
|
|
protected $fieldsValidate = array(
|
|
'id_address_delivery' => 'isUnsignedId',
|
|
'id_address_invoice' => 'isUnsignedId',
|
|
'id_cart' => 'isUnsignedId',
|
|
'id_currency' => 'isUnsignedId',
|
|
'id_lang' => 'isUnsignedId',
|
|
'id_customer' => 'isUnsignedId',
|
|
'id_carrier' => 'isUnsignedId',
|
|
'secure_key' => 'isMd5',
|
|
'payment' => 'isGenericName',
|
|
'recyclable' => 'isBool',
|
|
'gift' => 'isBool',
|
|
'gift_message' => 'isMessage',
|
|
'total_discounts' => 'isPrice',
|
|
'total_paid' => 'isPrice',
|
|
'total_paid_real' => 'isPrice',
|
|
'total_products' => 'isPrice',
|
|
'total_products_wt' => 'isPrice',
|
|
'total_shipping' => 'isPrice',
|
|
'carrier_tax_rate' => 'isFloat',
|
|
'total_wrapping' => 'isPrice',
|
|
'shipping_number' => 'isUrl',
|
|
'conversion_rate' => 'isFloat',
|
|
'appli' => 'isUnsignedInt',
|
|
);
|
|
|
|
public function getFields()
|
|
{
|
|
ObjectModel::validateFields();
|
|
|
|
$fields['id_address_delivery'] = (int)($this->id_address_delivery);
|
|
$fields['id_address_invoice'] = (int)($this->id_address_invoice);
|
|
$fields['id_cart'] = (int)($this->id_cart);
|
|
$fields['id_currency'] = (int)($this->id_currency);
|
|
$fields['id_lang'] = (int)($this->id_lang);
|
|
$fields['id_customer'] = (int)($this->id_customer);
|
|
$fields['id_carrier'] = (int)($this->id_carrier);
|
|
$fields['secure_key'] = pSQL($this->secure_key);
|
|
$fields['payment'] = pSQL($this->payment);
|
|
$fields['module'] = pSQL($this->module);
|
|
$fields['conversion_rate'] = (float)($this->conversion_rate);
|
|
$fields['recyclable'] = (int)($this->recyclable);
|
|
$fields['gift'] = (int)($this->gift);
|
|
$fields['gift_message'] = pSQL($this->gift_message);
|
|
$fields['shipping_number'] = pSQL($this->shipping_number);
|
|
$fields['total_discounts'] = (float)($this->total_discounts);
|
|
$fields['total_paid'] = (float)($this->total_paid);
|
|
$fields['total_paid_real'] = (float)($this->total_paid_real);
|
|
$fields['total_products'] = (float)($this->total_products);
|
|
$fields['total_products_wt'] = (float)($this->total_products_wt);
|
|
$fields['total_shipping'] = (float)($this->total_shipping);
|
|
$fields['carrier_tax_rate'] = (float)($this->carrier_tax_rate);
|
|
$fields['total_wrapping'] = (float)($this->total_wrapping);
|
|
$fields['invoice_number'] = (int)($this->invoice_number);
|
|
$fields['delivery_number'] = (int)($this->delivery_number);
|
|
$fields['invoice_date'] = pSQL($this->invoice_date);
|
|
$fields['delivery_date'] = pSQL($this->delivery_date);
|
|
$fields['valid'] = (int)($this->valid) ? 1 : 0;
|
|
$fields['appli'] = (int)($this->appli);
|
|
$fields['date_add'] = pSQL($this->date_add);
|
|
$fields['date_upd'] = pSQL($this->date_upd);
|
|
|
|
return $fields;
|
|
}
|
|
|
|
public function printMixedSale($value, $params) {
|
|
return Db::getInstance()->getValue('
|
|
SELECT COUNT(DISTINCT `id_sale`)
|
|
FROM `'._DB_PREFIX_.'product_ps_cache`
|
|
WHERE `id_product` IN (
|
|
SELECT `product_id` FROM `'._DB_PREFIX_.'order_detail`
|
|
WHERE `id_order` = '.(int) $value.'
|
|
)
|
|
') == 1? 'S': 'M';
|
|
}
|
|
|
|
public function printCountry($value, $params)
|
|
{
|
|
return '<img src="/img/flags/'.(int) $value.'.png" alt="" />';
|
|
}
|
|
|
|
public function printAppliIcons($value, $params)
|
|
{
|
|
$name = ((int)$value?'mobile':'computer');
|
|
return '<img src="/img/'.$name.'.png" alt="" width="18px"/>';
|
|
}
|
|
|
|
public function printDeviceIcons($value, $params)
|
|
{
|
|
switch($value) {
|
|
default:
|
|
case 0:
|
|
$name = 'computer';
|
|
$icon = 'display';
|
|
break;
|
|
case 1:
|
|
$name = 'application';
|
|
$icon = 'android';
|
|
break;
|
|
case 2:
|
|
$name = 'mobile';
|
|
$icon = 'mobile';
|
|
break;
|
|
}
|
|
|
|
return '<span title="'.$name.'" class="anticon anticon-'.$icon.'"></span>';
|
|
}
|
|
|
|
public function printCarrier($value, $params)
|
|
{
|
|
$laposte_carriers = unserialize(Configuration::get('LAPOSTEWS_CARRIERS', serialize(array())));
|
|
$mondialrelay_carriers = unserialize(Configuration::get('MONDIALRELAYWS_CARRIERS', serialize(array())));
|
|
$carriers_drop = explode(',',Configuration::get('ANT_CARRIER_DROP'));
|
|
if(in_array((int)$value,$mondialrelay_carriers)){
|
|
return '<img width="18px" src="/img/carriers/logo_mr.png" alt="" />';
|
|
}elseif(in_array((int)$value,$laposte_carriers) || in_array((int)$value,$carriers_drop)){
|
|
return '<img width="18px" src="/img/carriers/logo_socol.png" alt="" />';
|
|
}
|
|
}
|
|
|
|
public static function getTotalbyDate($date_start, $date_end, $state = 0){
|
|
if($state == 0){
|
|
if($date_start == $date_end){
|
|
return Db::getInstance()->getValue('
|
|
SELECT SUM(`total_paid`)
|
|
FROM `ps_orders` o
|
|
WHERE `date_add` LIKE "'.$date_start.'%"
|
|
');
|
|
}else{
|
|
return Db::getInstance()->getValue('
|
|
SELECT SUM(`total_paid`)
|
|
FROM `ps_orders` o
|
|
WHERE `date_add` BETWEEN "'.$date_start.' 00:00:00" AND "'.$date_end.' 23:59:59"
|
|
');
|
|
}
|
|
}else{
|
|
if($date_start == $date_end){
|
|
return Db::getInstance()->getValue('
|
|
SELECT SUM(`total_paid`)
|
|
FROM `ps_orders` o
|
|
WHERE `date_add` LIKE "'.$date_start.'%"
|
|
AND (SELECT id_order_state FROM ps_order_history hi WHERE o.id_order = hi.id_order ORDER BY id_order_history DESC LIMIT 1) = '.$state.'
|
|
');
|
|
}else{
|
|
return Db::getInstance()->getValue('
|
|
SELECT SUM(`total_paid`)
|
|
FROM `ps_orders` o
|
|
WHERE `date_add` BETWEEN "'.$date_start.' 00:00:00" AND "'.$date_end.' 23:59:59"
|
|
AND (SELECT id_order_state FROM ps_order_history hi WHERE o.id_order = hi.id_order ORDER BY id_order_history DESC LIMIT 1) = '.$state.'
|
|
');
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getProducts($products = false, $selectedProducts = false, $selectedQty = false, $tri = false)
|
|
{
|
|
if (!$products)
|
|
$products = $this->getProductsDetail($tri);
|
|
$resultArray = array();
|
|
|
|
$ids_order_detail = array_column($products, 'id_order_detail');
|
|
$send_infos = Order::getIfSended($ids_order_detail);
|
|
|
|
foreach ($products AS $row)
|
|
{
|
|
if( $send_infos[$row['id_order_detail']]
|
|
== ($row['product_quantity'] - ($row['product_quantity_return'] + $row['product_quantity_refunded']) )
|
|
) {
|
|
$row['sended'] = 1;
|
|
} else {
|
|
$row['sended'] = 0;
|
|
}
|
|
|
|
// Change qty if selected
|
|
if ($selectedQty)
|
|
{
|
|
$row['product_quantity'] = 0;
|
|
foreach ($selectedProducts AS $key => $id_product)
|
|
if ($row['id_order_detail'] == $id_product)
|
|
$row['product_quantity'] = (int)($selectedQty[$key]);
|
|
if (!$row['product_quantity'])
|
|
continue ;
|
|
}
|
|
$this->setProductPrices($row);
|
|
|
|
/* Add information for virtual product */
|
|
if ($row['download_hash'] AND !empty($row['download_hash']))
|
|
$row['filename'] = ProductDownload::getFilenameFromIdProduct($row['product_id']);
|
|
|
|
/* Stock product */
|
|
$resultArray[(int)($row['id_order_detail'])] = $row;
|
|
}
|
|
return $resultArray;
|
|
}
|
|
|
|
public function getProductsDetail($tri = false)
|
|
{
|
|
if ($tri) {
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
|
SELECT *
|
|
FROM `'._DB_PREFIX_.'order_detail` od
|
|
WHERE od.`id_order` = '.(int)($this->id) . '
|
|
ORDER BY product_reference ASC');
|
|
} else {
|
|
return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
|
SELECT *
|
|
FROM `'._DB_PREFIX_.'order_detail` od
|
|
WHERE od.`id_order` = '.(int)($this->id));
|
|
}
|
|
}
|
|
|
|
public static function getIfSended($ids) {
|
|
$data = array();
|
|
|
|
if (is_array($ids) && !empty($ids)) {
|
|
foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
|
SELECT
|
|
d.`id_order_detail`,
|
|
IF(
|
|
(SELECT COUNT(p.`id_order_detail`)
|
|
FROM `'._DB_PREFIX_.'lapostews` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
(SELECT SUM(p.`quantity`)
|
|
FROM `'._DB_PREFIX_.'lapostews` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
0
|
|
) as `total_send`
|
|
FROM `'._DB_PREFIX_.'order_detail` d
|
|
WHERE d.`id_order_detail` IN ('.implode(',', $ids).')
|
|
') as $key => $info) {
|
|
$data[$info['id_order_detail']] = $info['total_send'];
|
|
}
|
|
foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
|
SELECT
|
|
d.`id_order_detail`,
|
|
IF(
|
|
(SELECT COUNT(p.`id_order_detail`)
|
|
FROM `'._DB_PREFIX_.'mondialrelay_parcel` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
(SELECT SUM(p.`quantity`)
|
|
FROM `'._DB_PREFIX_.'mondialrelay_parcel` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
0
|
|
) as `total_send`
|
|
FROM `'._DB_PREFIX_.'order_detail` d
|
|
WHERE d.`id_order_detail` IN ('.implode(',', $ids).')
|
|
') as $key => $info) {
|
|
if($data[$info['id_order_detail']]==0){
|
|
$data[$info['id_order_detail']] = $info['total_send'];
|
|
}
|
|
}
|
|
foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
|
SELECT
|
|
d.`id_order_detail`,
|
|
IF(
|
|
(SELECT COUNT(p.`id_order_detail`)
|
|
FROM `'._DB_PREFIX_.'ant_dropshipping_parcel` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
(SELECT SUM(p.`quantity`)
|
|
FROM `'._DB_PREFIX_.'ant_dropshipping_parcel` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
0
|
|
) as `total_send`
|
|
FROM `'._DB_PREFIX_.'order_detail` d
|
|
WHERE d.`id_order_detail` IN ('.implode(',', $ids).')
|
|
') as $key => $info) {
|
|
if($data[$info['id_order_detail']]==0){
|
|
$data[$info['id_order_detail']] = $info['total_send'];
|
|
}
|
|
}
|
|
foreach (Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
|
|
SELECT
|
|
d.`id_order_detail`,
|
|
IF(
|
|
(SELECT COUNT(p.`id_order_detail`)
|
|
FROM `'._DB_PREFIX_.'philea_parcel` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
(SELECT SUM(p.`quantity`)
|
|
FROM `'._DB_PREFIX_.'philea_parcel` p
|
|
WHERE d.`id_order_detail` = p.`id_order_detail`),
|
|
0
|
|
) as `total_send`
|
|
FROM `'._DB_PREFIX_.'order_detail` d
|
|
WHERE d.`id_order_detail` IN ('.implode(',', $ids).')
|
|
') as $key => $info) {
|
|
if($data[$info['id_order_detail']]==0){
|
|
$data[$info['id_order_detail']] = $info['total_send'];
|
|
}
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
public static function getCurrentIdState($id_order)
|
|
{
|
|
$id_order_state = Db::getInstance()->getValue('
|
|
SELECT `id_order_state`
|
|
FROM `'._DB_PREFIX_.'order_state_current`
|
|
WHERE `id_order`='.(int)$id_order
|
|
);
|
|
return $id_order_state?$id_order_state:false;
|
|
}
|
|
|
|
|
|
}
|