Creating Order Structure Module: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
'''1. File creation''' | |||
First you need to create the '''file''' for the new module and place it in the following directory. | |||
'''/lib/common/modules/orderTotal/''' | |||
For example, let us call this new total module '''ot_custom_fee.php''' | |||
The file skeleton should look in the following way: | |||
<pre> | <pre> | ||
<?php | <?php | ||
Line 147: | Line 144: | ||
} | } | ||
</pre> | </pre> | ||
'''Note:''' Pay attention to the '''mandatory''' elements: | |||
* '''namespace''' indicating the class placement | |||
* '''use modules classes''' used for the installation creation | |||
* '''class declaration''' with the '''mandatory''' inheritance from '''ModuleTotal''' | |||
* '''variables''' required for your module | |||
* '''keys for translation''' | |||
* '''constructor''' doing initialization | |||
* '''process''' function for calculations | |||
* '''tax_class''' support | |||
* the minimum set of '''configuration fields''' | |||
* '''describe_status_key''' function responsible for the condition | |||
* '''describe_sort_key''' function responsible for the sort order | |||
It is '''not''' recommended to close '''php tag''' to avoid showing the '''non-printable''' symbols on the pages. | |||
'''2. Module installation''' | |||
After you accessed the admin area of your website click on '''Modules''', '''Order Structure''' and the required '''frontend''' tabs. Switch on '''Show inactive''' and '''Show not installed''' switches, '''find''' your module and click on '''Install''' button. | |||
[[File:Image 819.png|none|thumb|800x800px]] | [[File:Image 819.png|none|thumb|800x800px]] | ||
Line 187: | Line 184: | ||
[[File:Image 823.png|none|thumb|800x800px]] | [[File:Image 823.png|none|thumb|800x800px]] | ||
After that the corresponding values on the front end are applied and '''increased by 20%.''' | After that the corresponding values on the front end are applied and '''increased by 20%.''' | ||
[[File:Image 824.png|none|thumb|800x800px]] | [[File:Image 824.png|none|thumb|800x800px]] |
Latest revision as of 16:10, 24 February 2023
1. File creation
First you need to create the file for the new module and place it in the following directory.
/lib/common/modules/orderTotal/
For example, let us call this new total module ot_custom_fee.php
The file skeleton should look in the following way:
<?php /** * namespace */ namespace common\modules\orderTotal; /** * used classes */ use common\classes\modules\ModuleTotal; use common\classes\modules\ModuleStatus; use common\classes\modules\ModuleSortOrder; use common\helpers\Tax; /** * class declaration */ class ot_custom_fee extends ModuleTotal { /** * variables */ public $title; public $output; /** * default values for translation */ protected $defaultTranslationArray = [ 'MODULE_ORDER_TOTAL_CUSTOM_FEE_TITLE' => 'Custom fee', 'MODULE_ORDER_TOTAL_CUSTOM_FEE_DESCRIPTION' => 'Custom module description' ]; /** * class constructor */ function __construct() { parent::__construct(); $this->code = 'ot_custom_fee'; $this->title = MODULE_ORDER_TOTAL_CUSTOM_FEE_TITLE; $this->description = MODULE_ORDER_TOTAL_CUSTOM_FEE_DESCRIPTION; if (!defined('MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS')) { $this->enabled = false; return false; } $this->enabled = ((MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS == 'true') ? true : false); $this->sort_order = MODULE_ORDER_TOTAL_CUSTOM_FEE_SORT_ORDER; $this->output = []; } /** * your custom process */ function process($replacing_value = -1, $visible = false) { $currencies = \Yii::$container->get('currencies'); $order = $this->manager->getOrderInstance(); if (defined('MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE') && MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE > 0) { $taxation = $this->getTaxValues(MODULE_ORDER_TOTAL_CUSTOM_FEE_TAX_CLASS, $order); $tax_class_id = $taxation['tax_class_id']; $tax = $taxation['tax']; $tax_description = $taxation['tax_description']; $gift_wrap_amount += $order->info['total'] * MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE / 100; $gift_wrap_tax_amount += Tax::roundTax(Tax::calculate_tax($gift_wrap_amount, $tax)); $gift_wrap_amount_inc += Tax::add_tax($gift_wrap_amount, $tax); $order->info['tax'] += $gift_wrap_tax_amount; $order->info['tax_groups']["$tax_description"] += $gift_wrap_tax_amount; $order->info['total'] += ($gift_wrap_amount + $gift_wrap_tax_amount); $order->info['total_inc_tax'] += ($gift_wrap_amount + $gift_wrap_tax_amount); $order->info['total_exc_tax'] += $gift_wrap_amount; parent::$adjusting += $currencies->format_clear($gift_wrap_amount, true, $order->info['currency'], $order->info['currency_value']); } $this->output[] = array( 'title' => $this->title . ':', 'text' => $currencies->format($gift_wrap_amount_inc, true, $order->info['currency'], $order->info['currency_value']), 'value' => $gift_wrap_amount_inc, 'text_exc_tax' => $currencies->format($gift_wrap_amount, true, $order->info['currency'], $order->info['currency_value']), 'text_inc_tax' => $currencies->format(($gift_wrap_amount + $gift_wrap_tax_amount), true, $order->info['currency'], $order->info['currency_value']), 'tax_class_id' => $tax_class_id, 'value_exc_vat' => $gift_wrap_amount, 'value_inc_tax' => ($gift_wrap_amount + $gift_wrap_tax_amount), 'prefix' => '+', ); } /** * configuration fields */ public function configure_keys() { return [ 'MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS' => [ 'title' => 'Display Custom fee', 'value' => 'true', 'description' => 'Do you want to display the Custom fee?', 'sort_order' => '1', 'set_function' => 'tep_cfg_select_option(array(\'true\', \'false\'), ', ], 'MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE' => [ 'title' => 'Fee', 'value' => '0', 'description' => 'Additional fee in percentage', 'sort_order' => '2', ], 'MODULE_ORDER_TOTAL_CUSTOM_FEE_TAX_CLASS' => [ 'title' => 'Tax Class', 'value' => '0', 'description' => 'Use the following tax class on the payment fee.', 'sort_order' => '3', 'use_function' => '\\common\\helpers\\Tax::get_tax_class_title', 'set_function' => 'tep_cfg_pull_down_tax_classes(', ], 'MODULE_ORDER_TOTAL_CUSTOM_FEE_SORT_ORDER' => [ 'title' => 'Sort Order', 'value' => '4', 'description' => 'Sort order of display.', 'sort_order' => '4', ], ]; } public function describe_status_key() { return new ModuleStatus('MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS', 'true', 'false'); } public function describe_sort_key() { return new ModuleSortOrder('MODULE_ORDER_TOTAL_CUSTOM_FEE_SORT_ORDER'); } }
Note: Pay attention to the mandatory elements:
- namespace indicating the class placement
- use modules classes used for the installation creation
- class declaration with the mandatory inheritance from ModuleTotal
- variables required for your module
- keys for translation
- constructor doing initialization
- process function for calculations
- tax_class support
- the minimum set of configuration fields
- describe_status_key function responsible for the condition
- describe_sort_key function responsible for the sort order
It is not recommended to close php tag to avoid showing the non-printable symbols on the pages.
2. Module installation
After you accessed the admin area of your website click on Modules, Order Structure and the required frontend tabs. Switch on Show inactive and Show not installed switches, find your module and click on Install button.
Check the keys and if the module is switched on. If you have the section Available for in your version fill it in and save the changes.