* @copyright PrestaShop * @license http://www.opensource.org/licenses/osl-3.0.php Open-source licence 3.0 * @version 1.3 * */ class OrderReturn extends ObjectModel { /** @var integer */ public $id; /** @var integer */ public $id_customer; /** @var integer */ public $id_order; /** @var integer */ public $state; /** @var string message content */ public $question; /** @var string Object creation date */ public $date_add; /** @var string Object last modification date */ public $date_upd; protected $tables = array ('order_return'); protected $fieldsRequired = array ('id_customer', 'id_order'); protected $fieldsValidate = array('id_customer' => 'isUnsignedId', 'id_order' => 'isUnsignedId', 'question' => 'isMessage'); protected $table = 'order_return'; protected $identifier = 'id_order_return'; public function getFields() { parent::validateFields(); $fields['id_customer'] = pSQL($this->id_customer); $fields['id_order'] = pSQL($this->id_order); $fields['state'] = pSQL($this->state); $fields['date_add'] = pSQL($this->date_add); $fields['date_upd'] = pSQL($this->date_upd); $fields['question'] = pSQL(nl2br2($this->question), true); return $fields; } public function addReturnDetail($orderDetailList, $productQtyList, $customizationIds, $customizationQtyInput) { /* Classic product return */ if ($orderDetailList) foreach ($orderDetailList AS $key => $orderDetail) if ($qty = intval($productQtyList[$key])) Db::getInstance()->AutoExecute(_DB_PREFIX_.'order_return_detail', array('id_order_return' => intval($this->id), 'id_order_detail' => intval($orderDetail), 'product_quantity' => $qty, 'id_customization' => 0), 'INSERT'); /* Customized product return */ if ($customizationIds) foreach ($customizationIds AS $orderDetailId => $customizations) foreach ($customizations AS $customizationId) if ($quantity = intval($customizationQtyInput[intval($customizationId)])) Db::getInstance()->AutoExecute(_DB_PREFIX_.'order_return_detail', array('id_order_return' => intval($this->id), 'id_order_detail' => intval($orderDetailId), 'product_quantity' => $quantity, 'id_customization' => intval($customizationId)), 'INSERT'); } public function checkEnoughProduct($orderDetailList, $productQtyList, $customizationIds, $customizationQtyInput) { $order = new Order(intval($this->id_order)); if (!Validate::isLoadedObject($order)) die(Tools::displayError()); $products = $order->getProducts(); /* Products already returned */ $order_return = self::getOrdersReturn($order->id_customer, $order->id, true); foreach ($order_return AS $or) { $order_return_products = self::getOrdersReturnProducts($or['id_order_return'], $order); foreach ($order_return_products AS $key => $orp) $products[$key]['product_quantity'] -= intval($orp['product_quantity']); } /* Quantity check */ if ($orderDetailList) foreach ($orderDetailList AS $key => $orderDetail) if ($qty = intval($productQtyList[$key])) if ($products[$key]['product_quantity'] - $qty < 0) return false; /* Customization quantity check */ if ($customizationIds) { $orderedCustomizations = Customization::getOrderedCustomizations(intval($order->id_cart)); foreach ($customizationIds AS $productId => $customizations) foreach ($customizations AS $customizationId) { $customizationId = intval($customizationId); if (!isset($orderedCustomizations[$customizationId])) return false; $quantity = (isset($returnedCustomizations[$customizationId]) ? $returnedCustomizations[$customizationId]['product_quantity'] : 0) + (isset($customizationQtyInput[$customizationId]) ? intval($customizationQtyInput[$customizationId]) : 0); if (intval($orderedCustomizations[$customizationId]['quantity']) - $quantity < 0) return false; } } return true; } public function countProduct() { if (!$data = Db::getInstance()->getRow(' SELECT COUNT(`id_order_return`) AS total FROM `'._DB_PREFIX_.'order_return_detail` WHERE `id_order_return` = '.intval($this->id))) return false; return intval($data['total']); } static public function getOrdersReturn($customer_id, $order_id = false, $no_denied = false) { global $cookie; $data = Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'order_return` WHERE `id_customer` = '.intval($customer_id). ($order_id ? ' AND `id_order` = '.intval($order_id) : ''). ($no_denied ? ' AND `state` != 4' : '').' ORDER BY `date_add` DESC'); foreach ($data AS $k => $or) { $state = new OrderReturnState($or['state']); $data[$k]['state_name'] = $state->name[$cookie->id_lang]; } return $data; } static public function getOrdersReturnDetail($id_order_return) { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'order_return_detail` WHERE `id_order_return` = '.intval($id_order_return)); } static public function getOrdersReturnProducts($orderReturnId, $order) { $productsRet = self::getOrdersReturnDetail($orderReturnId); $products = $order->getProducts(); $tmp = array(); foreach ($productsRet AS $return_detail) { $tmp[$return_detail['id_order_detail']]['quantity'] = isset($tmp[$return_detail['id_order_detail']]['quantity']) ? $tmp[$return_detail['id_order_detail']]['quantity'] + intval($return_detail['product_quantity']) : intval($return_detail['product_quantity']); $tmp[$return_detail['id_order_detail']]['customizations'] = intval($return_detail['id_customization']); } $resTab = array(); foreach ($products AS $key => $product) if (isset($tmp[$product['id_order_detail']])) { $resTab[$key] = $product; $resTab[$key]['product_quantity'] = $tmp[$product['id_order_detail']]['quantity']; $resTab[$key]['customizations'] = $tmp[$product['id_order_detail']]['customizations']; } return $resTab; } static public function getReturnedCustomizedProducts($id_order) { $returns = Customization::getReturnedCustomizations($id_order); $order = new Order(intval($id_order)); if (!Validate::isLoadedObject($order)) die(Tools::displayError()); $products = $order->getProducts(); foreach ($returns AS &$return) { $return['product_id'] = intval($products[intval($return['id_order_detail'])]['product_id']); $return['product_attribute_id'] = intval($products[intval($return['id_order_detail'])]['product_attribute_id']); $return['name'] = $products[intval($return['id_order_detail'])]['product_name']; $return['reference'] = $products[intval($return['id_order_detail'])]['product_reference']; } return $returns; } static public function deleteOrderReturnDetail($id_order_return, $id_order_detail, $id_customization = 0) { return Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'order_return_detail` WHERE `id_order_detail` = '.intval($id_order_detail).' AND `id_order_return` = '.intval($id_order_return).' AND `id_customization` = '.intval($id_customization)); } } ?>