* @copyright 2007-2011 PrestaShop SA * @version Release: $Revision: 7449 $ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ 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` = '.(int)($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', 'align' => 'right')); $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 delivery 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 = (int)(Tools::getValue('id_order_detail'))) AND Validate::isUnsignedId($id_order_detail)) { if (($id_order_return = (int)(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 ((int)($orderReturn->countProduct()) > 1) { if (OrderReturn::deleteOrderReturnDetail($id_order_return, $id_order_detail, (int)(Tools::getValue('id_customization', 0)))) Tools::redirectAdmin($currentIndex.'&conf=4token='.$this->token); else $this->_errors[] = Tools::displayError('An error occurred 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 = (int)(Tools::getValue('id_order_return'))) AND Validate::isUnsignedId($id_order_return)) { $orderReturn = new OrderReturn($id_order_return); $order = new Order($orderReturn->id_order); $customer = new Customer($orderReturn->id_customer); $orderReturn->state = (int)(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}' => (isset($orderReturnState->name[(int)$order->id_lang]) ? $orderReturnState->name[(int)$order->id_lang] : $orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')])); Mail::Send((int)$order->id_lang, 'order_return_state', Mail::l('Your order return state has changed', (int)$order->id_lang), $vars, $customer->email, $customer->firstname.' '.$customer->lastname, NULL, NULL, NULL, NULL, _PS_MAIL_DIR_, true); 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((int)($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(); if (!($obj = $this->loadObject(true))) return; echo '
'.($obj->id ? '' : '').'
'.$this->l('Return Merchandise Authorization (RMA)').' '; $customer = new Customer((int)($obj->id_customer)); echo '
'.$customer->firstname.' '.$customer->lastname.'

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

'; $order = new Order((int)($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((int)($obj->id_order)); $quantityDisplayed = array(); /* Customized products */ if ($returnedCustomizations = OrderReturn::getReturnedCustomizedProducts((int)($obj->id_order))) { $allCustomizedDatas = Product::getAllCustomizedDatas((int)($order->id_cart)); foreach ($returnedCustomizations AS $returnedCustomization) { echo ' '; $customizationDatas = &$allCustomizedDatas[(int)($returnedCustomization['product_id'])][(int)($returnedCustomization['product_attribute_id'])][(int)($returnedCustomization['id_customization'])]['datas']; foreach ($customizationDatas AS $type => $datas) { echo ''; } $quantityDisplayed[(int)($returnedCustomization['id_order_detail'])] = isset($quantityDisplayed[(int)($returnedCustomization['id_order_detail'])]) ? $quantityDisplayed[(int)($returnedCustomization['id_order_detail'])] + (int)($returnedCustomization['product_quantity']) : (int)($returnedCustomization['product_quantity']); } } /* Classic products */ $products = OrderReturn::getOrdersReturnProducts($obj->id, $order); foreach ($products AS $k => $product) if (!isset($quantityDisplayed[(int)($product['id_order_detail'])]) OR (int)($product['product_quantity']) > (int)($quantityDisplayed[(int)($product['id_order_detail'])])) echo ' '; echo '
'.$this->l('Reference').' '.$this->l('Product name').' '.$this->l('Quantity').' '.$this->l('Action').'
'.$returnedCustomization['reference'].' '.$returnedCustomization['name'].' '.(int)($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 '
  • '.($data['name'] ? $data['name'] : $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').'

'; } }