Jump to content

override controller Admin Orders


felek

Recommended Posts

Hello,

I'm new in developing prestashop, i create first module using tutorial on page, and create my config file.

Now i want to override Admin Orders controller and view.

I'm need to add little form to view that will get some data from my config module and than process it.

As far I understand to achieve that /modules/my_module/override/controllers/admin/AdminOrdersController.php

 

And inside i create my class. basic markup:

class AdminOrdersController extends AdminOrdersControllerCore
{
  public function __construct()
{
parent::__construct();
  }
}

Now i want to know how inside of my module file i can override template.

Template is inside of: admin999fxzxg5\themes\default\template\controllers\orders\helpers\view.

I try put in folder modules\mymodule\override\controllers\admin\templates\orders\helpers\view but no result.

 

So my first question is were i can put template file to add form.

And than how can i write function inside of controller to retrieve and pass data in this form

 

 

Thanks in advance

 

Link to comment
Share on other sites

Ok I was able to override form but only inside override\controllers\admin\templates\orders\helpers\view\
And i'm sure this is wrong way :)
Also i copy and paste whole "AdminOrdersController.php" and just assign one variable ($this->tpl_view_vars....) to check if t works and it did.
Now I want to know is that correct way of doing overrides in prestashop ? Also how can i create link and assign new function inside of my override controller?
 
I try to follow some doc i Found and end up with this code still its not working any clue what I'm doing wrong way ?

Fow now i just want that var showing up than As sad before run function or update form when link is clicked..

<?php

class AdminOrdersController extends AdminOrdersControllerCore
{
		public function renderView()
	{
		$order = new Order(Tools::getValue('id_order'));
		if (!Validate::isLoadedObject($order))
			$this->errors[] = Tools::displayError('The order cannot be found within your database.');

		$customer = new Customer($order->id_customer);
		$carrier = new Carrier($order->id_carrier);
		$products = $this->getProducts($order);
		$currency = new Currency((int)$order->id_currency);
		// Carrier module call
		$carrier_module_call = null;
		if ($carrier->is_module)
		{
			$module = Module::getInstanceByName($carrier->external_module_name);
			if (method_exists($module, 'displayInfoByCart'))
				$carrier_module_call = call_user_func(array($module, 'displayInfoByCart'), $order->id_cart);
		}

		// Retrieve addresses information
		$addressInvoice = new Address($order->id_address_invoice, $this->context->language->id);
		if (Validate::isLoadedObject($addressInvoice) && $addressInvoice->id_state)
			$invoiceState = new State((int)$addressInvoice->id_state);

		if ($order->id_address_invoice == $order->id_address_delivery)
		{
			$addressDelivery = $addressInvoice;
			if (isset($invoiceState))
				$deliveryState = $invoiceState;
		}
		else
		{
			$addressDelivery = new Address($order->id_address_delivery, $this->context->language->id);
			if (Validate::isLoadedObject($addressDelivery) && $addressDelivery->id_state)
				$deliveryState = new State((int)($addressDelivery->id_state));
		}

		$this->toolbar_title = sprintf($this->l('Order #%1$d (%2$s) - %3$s %4$s'), $order->id, $order->reference, $customer->firstname, $customer->lastname);
		if (Shop::isFeatureActive())
		{
			$shop = new Shop((int)$order->id_shop);
			$this->toolbar_title .= ' - '.sprintf($this->l('Shop: %s'), $shop->name);
		}

		// gets warehouses to ship products, if and only if advanced stock management is activated
		$warehouse_list = null;

		$order_details = $order->getOrderDetailList();
		foreach ($order_details as $order_detail)
		{
			$product = new Product($order_detail['product_id']);

			if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')
				&& $product->advanced_stock_management)
			{
				$warehouses = Warehouse::getWarehousesByProductId($order_detail['product_id'], $order_detail['product_attribute_id']);
				foreach ($warehouses as $warehouse)
				{
					if (!isset($warehouse_list[$warehouse['id_warehouse']]))
						$warehouse_list[$warehouse['id_warehouse']] = $warehouse;
				}
			}
		}

		$payment_methods = array();
		foreach (PaymentModule::getInstalledPaymentModules() as $payment)
		{
			$module = Module::getInstanceByName($payment['name']);
			if (Validate::isLoadedObject($module) && $module->active)
				$payment_methods[] = $module->displayName;
		}

		// display warning if there are products out of stock
		$display_out_of_stock_warning = false;
		$current_order_state = $order->getCurrentOrderState();
		if (Configuration::get('PS_STOCK_MANAGEMENT') && (!Validate::isLoadedObject($current_order_state) || ($current_order_state->delivery != 1 && $current_order_state->shipped != 1)))
			$display_out_of_stock_warning = true;

		// products current stock (from stock_available)
		foreach ($products as &$product)
		{
			// Get total customized quantity for current product
			$customized_product_quantity = 0;

			if (is_array($product['customizedDatas']))
				foreach ($product['customizedDatas'] as $customizationPerAddress)
					foreach ($customizationPerAddress as $customizationId => $customization)
						$customized_product_quantity += (int)$customization['quantity'];

			$product['customized_product_quantity'] = $customized_product_quantity;
			$product['current_stock'] = StockAvailable::getQuantityAvailableByProduct($product['product_id'], $product['product_attribute_id'], $product['id_shop']);
			$resume = OrderSlip::getProductSlipResume($product['id_order_detail']);
			$product['quantity_refundable'] = $product['product_quantity'] - $resume['product_quantity'];
			$product['amount_refundable'] = $product['total_price_tax_excl'] - $resume['amount_tax_excl'];
			$product['amount_refund'] = Tools::displayPrice($resume['amount_tax_incl'], $currency);
			$product['refund_history'] = OrderSlip::getProductSlipDetail($product['id_order_detail']);
			$product['return_history'] = OrderReturn::getProductReturnDetail($product['id_order_detail']);

			// if the current stock requires a warning
			if ($product['current_stock'] == 0 && $display_out_of_stock_warning)
				$this->displayWarning($this->l('This product is out of stock: ').' '.$product['product_name']);
			if ($product['id_warehouse'] != 0)
			{
				$warehouse = new Warehouse((int)$product['id_warehouse']);
				$product['warehouse_name'] = $warehouse->name;
			}
			else
				$product['warehouse_name'] = '--';
		}

		$gender = new Gender((int)$customer->id_gender, $this->context->language->id);

		$history = $order->getHistory($this->context->language->id);

		foreach ($history as &$order_state)
			$order_state['text-color'] = Tools::getBrightness($order_state['color']) < 128 ? 'white' : 'black';

		//felek	
			
			$my_module_name = Configuration::get('CDSIODEMKA_test1');
			
		//felek end
		
		// Smarty assign
		$this->tpl_view_vars = array(
			'test'=>$my_module_name,
			'order' => $order,
			'cart' => new Cart($order->id_cart),
			'customer' => $customer,
			'gender' => $gender,
			'customer_addresses' => $customer->getAddresses($this->context->language->id),
			'addresses' => array(
				'delivery' => $addressDelivery,
				'deliveryState' => isset($deliveryState) ? $deliveryState : null,
				'invoice' => $addressInvoice,
				'invoiceState' => isset($invoiceState) ? $invoiceState : null
			),
			'customerStats' => $customer->getStats(),
			'products' => $products,
			'discounts' => $order->getCartRules(),
			'orders_total_paid_tax_incl' => $order->getOrdersTotalPaid(), // Get the sum of total_paid_tax_incl of the order with similar reference
			'total_paid' => $order->getTotalPaid(),
			'returns' => OrderReturn::getOrdersReturn($order->id_customer, $order->id),
			'customer_thread_message' => CustomerThread::getCustomerMessages($order->id_customer, null, $order->id),
			'orderMessages' => OrderMessage::getOrderMessages($order->id_lang),
			'messages' => Message::getMessagesByOrderId($order->id, true),
			'carrier' => new Carrier($order->id_carrier),
			'history' => $history,
			'states' => OrderState::getOrderStates($this->context->language->id),
			'warehouse_list' => $warehouse_list,
			'sources' => ConnectionsSource::getOrderSources($order->id),
			'currentState' => $order->getCurrentOrderState(),
			'currency' => new Currency($order->id_currency),
			'currencies' => Currency::getCurrenciesByIdShop($order->id_shop),
			'previousOrder' => $order->getPreviousOrderId(),
			'nextOrder' => $order->getNextOrderId(),
			'current_index' => self::$currentIndex,
			'carrierModuleCall' => $carrier_module_call,
			'iso_code_lang' => $this->context->language->iso_code,
			'id_lang' => $this->context->language->id,
			'can_edit' => ($this->tabAccess['edit'] == 1),
			'current_id_lang' => $this->context->language->id,
			'invoices_collection' => $order->getInvoicesCollection(),
			'not_paid_invoices_collection' => $order->getNotPaidInvoicesCollection(),
			'payment_methods' => $payment_methods,
			'invoice_management_active' => Configuration::get('PS_INVOICE', null, null, $order->id_shop),
			'display_warehouse' => (int)Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'),
			'HOOK_CONTENT_ORDER' => Hook::exec('displayAdminOrderContentOrder', array(
				'order' => $order,
				'products' => $products,
				'customer' => $customer)
			),
			'HOOK_CONTENT_SHIP' => Hook::exec('displayAdminOrderContentShip', array(
				'order' => $order,
				'products' => $products,
				'customer' => $customer)
			),
			'HOOK_TAB_ORDER' => Hook::exec('displayAdminOrderTabOrder', array(
				'order' => $order,
				'products' => $products,
				'customer' => $customer)
			),
			'HOOK_TAB_SHIP' => Hook::exec('displayAdminOrderTabShip', array(
				'order' => $order,
				'products' => $products,
				'customer' => $customer)
			),
		);

		return AdminOrdersController::renderView();
	}
}

Edited by felek (see edit history)
Link to comment
Share on other sites

If any one look for this. You have to register new hook during installation of module like so 

$this->registerHook('displayAdminOrder')

After that function 

public function hookdisplayAdminOrder($hook) 

and inside put your logic and at the end return template 

return $this->display(__FILE__, 'views/templates/.....');

No controllers overrides are need.

Can be marked as solved.

Edited by felek (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...