* @copyright PrestaShop * @license http://www.opensource.org/licenses/osl-3.0.php Open-source licence 3.0 * @version 1.3 * */ include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php'); class AdminReturn extends AdminTab { public function __construct() { global $cookie; $this->table = 'order_return'; $this->className = 'OrderReturn'; $this->colorOnBackground = true; $this->_select = 'orsl.`name`'; $this->_join = 'LEFT JOIN '._DB_PREFIX_.'order_return_state_lang orsl ON (orsl.`id_order_return_state` = a.`state` AND orsl.`id_lang` = '.intval($cookie->id_lang).')'; $this->fieldsDisplay = array( 'id_order_return' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25), 'id_order' => array('title' => $this->l('Order ID'), 'width' => 75, 'align' => 'center'), 'name' => array('title' => $this->l('Status'), 'width' => 150, 'align' => 'center'), 'date_add' => array('title' => $this->l('Date issued'), 'width' => 60, 'type' => 'date')); $this->optionTitle = $this->l('Merchandise return (RMA) options'); $this->_fieldsOptions = array( 'PS_ORDER_RETURN' => array('title' => $this->l('Enable returns:'), 'desc' => $this->l('Select whether or not to activate merchandise return for your shop'), 'cast' => 'intval', 'type' => 'bool'), 'PS_ORDER_RETURN_NB_DAYS' => array('title' => $this->l('Time limit of validity:'), 'desc' => $this->l('Number of days the customer can make a return after the purchase date'), 'cast' => 'intval', 'type' => 'text', 'size' => '2'), ); parent::__construct(); } public function postProcess() { global $currentIndex, $cookie; if (Tools::isSubmit('deleteorder_return_detail')) { if ($this->tabAccess['delete'] === '1') { if (($id_order_detail = intval(Tools::getValue('id_order_detail'))) AND Validate::isUnsignedId($id_order_detail)) { if (($id_order_return = intval(Tools::getValue('id_order_return'))) AND Validate::isUnsignedId($id_order_return)) { $orderReturn = new OrderReturn($id_order_return); if (!Validate::isLoadedObject($orderReturn)) die(Tools::displayError()); if (intval($orderReturn->countProduct()) > 1) { if (OrderReturn::deleteOrderReturnDetail($id_order_return, $id_order_detail, intval(Tools::getValue('id_customization', 0)))) Tools::redirectAdmin($currentIndex.'&conf=4token='.$this->token); else $this->_errors[] = Tools::displayError('an error occured while deleting an order return detail'); } else $this->_errors[] = Tools::displayError('you need at least one product'); } else $this->_errors[] = Tools::displayError('the order return is invalid'); } else $this->_errors[] = Tools::displayError('the order return detail is invalid'); } else $this->_errors[] = Tools::displayError('You do not have permission to delete here.'); } elseif (Tools::isSubmit('submitAddorder_return')) { if ($this->tabAccess['edit'] === '1') { if (($id_order_return = intval(Tools::getValue('id_order_return'))) AND Validate::isUnsignedId($id_order_return)) { $orderReturn = new OrderReturn($id_order_return); $customer = new Customer($orderReturn->id_customer); $orderReturn->state = intval(Tools::getValue('state')); if ($orderReturn->save()) { $orderReturnState = new OrderReturnState($orderReturn->state); $vars = array( '{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{id_order_return}' => $id_order_return, '{state_order_return}' => $orderReturnState->name[intval(Configuration::get('PS_LANG_DEFAULT'))]); Mail::Send(intval($cookie->id_lang), 'order_return_state', html_entity_decode($this->l('Your order return state has changed'), ENT_NOQUOTES, 'UTF-8'), $vars, $customer->email, $customer->firstname.' '.$customer->lastname); Tools::redirectAdmin($currentIndex.'&conf=4&token='.$this->token); } } else $this->_errors[] = Tools::displayError('no order return ID.'); } else $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); } parent::postProcess(); } public function display() { global $currentIndex, $cookie; // Include current tab if (isset($_GET['update'.$this->table])) { if ($this->tabAccess['edit'] === '1') { $this->displayForm(); echo '

'.$this->l('Back to list').'
'; } else echo $this->l('You do not have permission to edit here'); } else { $this->getList(intval($cookie->id_lang), !Tools::getValue($this->table.'Orderby') ? 'date_add' : NULL, !Tools::getValue($this->table.'Orderway') ? 'DESC' : NULL); $this->displayList(); $this->displayOptionsList(); $this->includeSubTab('display'); } } public function displayListContent($token = NULL) { global $currentIndex, $cookie; $irow = 0; if ($this->_list) foreach ($this->_list AS $tr) { $tr['id_order'] = $this->l('#').sprintf('%06d', $tr['id_order']); $id = $tr['id_'.$this->table]; echo 'color) AND $this->colorOnBackground) ? 'style="background-color: '.$state->color.'"' : '').'>'; foreach ($this->fieldsDisplay AS $key => $params) echo ''.$tr[$key].''; echo ''; } } public function displayForm($isMainTab = true) { global $currentIndex, $cookie; parent::displayForm(); $obj = $this->loadObject(true); echo '
'.($obj->id ? '' : '').'
'.$this->l('Return Merchandise Authorization (RMA)').' '; $customer = new Customer(intval($obj->id_customer)); echo '
'.$customer->firstname.' '.$customer->lastname.'

'.$this->l('View details on customer page').'

'; $order = new Order(intval($obj->id_order)); echo '
'.$this->l('Order #').sprintf('%06d', $order->id).' '.$this->l('from').' '.Tools::displayDate($order->date_upd, $order->id_lang).'

'.$this->l('View details on order page').'

'.$obj->question.'

'.$this->l('Merchandise return (RMA) status').'

'; if ($obj->state >= 3) echo '
'.$this->l('Generate a new slip from the customer order').'

'.$this->l('More information on order page').'

'; echo '
'; echo '
  '; $order = new Order(intval($obj->id_order)); $quantityDisplayed = array(); /* Customized products */ if ($returnedCustomizations = OrderReturn::getReturnedCustomizedProducts(intval($obj->id_order))) { $allCustomizedDatas = Product::getAllCustomizedDatas(intval($order->id_cart)); foreach ($returnedCustomizations AS $returnedCustomization) { echo ' '; $customizationDatas = &$allCustomizedDatas[intval($returnedCustomization['product_id'])][intval($returnedCustomization['product_attribute_id'])][intval($returnedCustomization['id_customization'])]['datas']; foreach ($customizationDatas AS $type => $datas) { echo ''; } $quantityDisplayed[intval($returnedCustomization['id_order_detail'])] = isset($quantityDisplayed[intval($returnedCustomization['id_order_detail'])]) ? $quantityDisplayed[intval($returnedCustomization['id_order_detail'])] + intval($returnedCustomization['product_quantity']) : intval($returnedCustomization['product_quantity']); } } /* Classic products */ $products = OrderReturn::getOrdersReturnProducts($obj->id, $order); foreach ($products AS $k => $product) if (!isset($quantityDisplayed[intval($product['id_order_detail'])]) OR intval($product['product_quantity']) > intval($quantityDisplayed[intval($product['id_order_detail'])])) echo ' '; echo '
'.$this->l('Reference').' '.$this->l('Product name').' '.$this->l('Quantity').' '.$this->l('Action').'
'.$returnedCustomization['reference'].' '.$returnedCustomization['name'].' '.intval($returnedCustomization['product_quantity']).'
'; if ($type == _CUSTOMIZE_FILE_) { $i = 0; echo '
    '; foreach ($datas AS $data) echo '
  • '; echo '
'; } elseif ($type == _CUSTOMIZE_TEXTFIELD_) { $i = 0; echo '
    '; foreach ($datas AS $data) echo '
  • '.$this->l('Text #').++$i.$this->l(':').' '.$data['value'].'
  • '; echo '
'; } echo '
'.$product['product_reference'].' '.$product['product_name'].' '.$product['product_quantity'].'

'.$this->l('List of products in return package').'

'; } } ?>