Magento2.2 add custom product tab with custom template on product edit page

In this blogpost we will learn how to add custom tab in product edit page in admin panel.Create a file with mentioned path and add the following code:-

view\adminhtml\ui_component\product_form.xml
 <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <htmlContent name="qrcode" sortOrder="22">
        <argument name="data" xsi:type="array">
            <item name="wrapper" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">Qrcode</item>
                <item name="collapsible" xsi:type="boolean">true</item>
                <item name="opened" xsi:type="boolean">false</item>
            </item>
        </argument>
        <settings>
            <wrapper>
                <canShow>true</canShow>
                <componentType>fieldset</componentType>
            </wrapper>
        </settings>
        <block class="W3solver\Qrcode\Block\Adminhtml\Catalog\Product\Edit\Tab\Qrcode" name="qrcode">
            <arguments>
                <argument name="config" xsi:type="array">
                    <item name="label" xsi:type="string" translate="true">Qrcode</item>
                    <item name="collapsible" xsi:type="boolean">true</item>
                    <item name="opened" xsi:type="boolean">false</item>
                    <item name="sortOrder" xsi:type="string">11</item>
                    <item name="canShow" xsi:type="boolean">true</item>
                    <item name="componentType" xsi:type="string">fieldset</item>
                </argument>
            </arguments>
        </block>
    </htmlContent>
</form>

Lets understand above code. product_form is used for customization of product edit page in admin panel as per magento documentation(for more info refer the link). So above code will add some htmlcontent which will thus render a block to show your custom tab and its template.

Now lets create our block at below path

 W3solver\Qrcode\Block\Adminhtml\Catalog\Product\Edit\Tab\Qrcode.php 
<?php
/**
 * W3solver.com
 * @category    W3solver
 * @package     W3solver_Qrcode
 * @Description Block to add qrcode tab to product edit page
 * @author      W3solver
 * @copyright   Copyright (c) 2017 w3solver
 */
namespace W3solver\Qrcode\Block\Adminhtml\Catalog\Product\Edit\Tab;

use Magento\Backend\Block\Template\Context;
use Magento\Framework\Registry;
use W3solver\Qrcode\Model\QrcodeListFactory;

class Qrcode extends \Magento\Framework\View\Element\Template {

    protected $_template = 'product/edit/qrcode.phtml';
    protected $_qrcodeListFactory;
    protected $fileName;

    /**
     * Core registry
     *
     * @var Registry
     */
    protected $_coreRegistry = null;

    /**
     * @param Magento\Backend\Block\Template\Context
     * @param Magento\Framework\Registry
     * @param W3solver\Qrcode\Model\QrcodeListFactory
     * @param Magento\Store\Model\StoreManagerInterface
     */
    public function __construct(
    Context $context, Registry $registry, QrcodeListFactory $qrcodeListFactory, array $data = []
    ) {
        $this->_coreRegistry = $registry;
        $this->_qrcodeListFactory = $qrcodeListFactory;
        
        parent::__construct($context, $data);
    }

    /**
     * Retrieve product
     *
     * @return \Magento\Catalog\Model\Product
     */
    public function getProduct() {
        return $this->_coreRegistry->registry('current_product');
    }
}

We also need to create our template file to show whatever content we want at following path:-

w3solver\Qrcode\view\adminhtml\templates\product\edit\qrcode.phtml

So above code will craete a Qrcode tab on product edit page in admin. Drop in your comments if you face any issue.

Magento 2 some important coding practice for developers

In my previous blogpost for code sniffer, we have come to know how we can find if our extension is following MEQP2 standards. Today let us see some most common coding practice that will help us while developing Magento extension. This will make our code more magento friendly.

Use dependency injection not object manager

We all love to use object manager though we know it is not a recommended practice by Magento. We should not use it for several reason:-

a. To maintain code consistency
b. Testing become easier(as we can pass mock object as an argument)
c. Dependency injection make dependencies more clear – as everything can be easily found in constructor rather than hidden in middle of the code.
d. It also prevent us from using repeated dependency as we can make use already existing dependency of parent class

There are several exception to this scenario:-

• in static magic methods like __wakeup, serialize, etc
• in case you should make backward compatibility of constructor
• in global scope, like in fixtures of integration test.
• in class that needs only for creation of object like factory, proxy , etc


You can go through http://www.javacreed.com/why-should-we-use-dependency-injection/ for more details about dependency injection.

Do not use session in dependency injection

Whenever you will check your code with MEQP2 standard it will raise an issue if you have used session object in constructor as dependency injection. You will get below error. You can simply replace it from parent class session objects.

“Session object MUST NOT be requested in constructor. It can only be passed as a method argument. “

Use Magento exception library not core PHP – Do not throw exception using PHP keyword.

You can use message manager to show error, warning or ant exception message rather than using throw keyword.
Include \Magento\Framework\Message\ManagerInterface $messageManager in your constructor and call the respective function to show error, warning or exception.

Use magento library function instead of core PHP function

For example for curl request instead of using curl_init, curl_setopt, curl_exec use the function provide by curl class in magento (\Magento\Framework\HTTP\Client\Curl $curl)

Magento 2 place order without a Email address

This blogpost guide you a hack to place order in magento 2 via Email. As we all know email is an essential component for managing data in Magento. But today i came across to one of my client who does not want email to be necessary, i told him that this is not possible in Magento but he wanted to implement such functionality. So i came across a hack, i removed validation from client side and passed a random generated email. Here are the steps that i followed:-

To achieve this we need to override Magento_Checkout/js/action/place-order file and Magento_Checkout/template/form/element/email.html, to do that create a requirejs-config file in your module under view/frontend/requirejs-config.js

var config = {
    map: {
        '*': {
            'Magento_Checkout/template/form/element/email.html': 
            'W3solver_Trackorder/template/form/element/email.phtml',
	    'Magento_Checkout/js/action/place-order': 
            'W3solver_Trackorder/js/action/place-order'
        }
  }
};

Place your overriden file under view/frontend/web/js/action/place-order.js and add the below code. Here we have just added an optional email(emailOptional@w3solver.com), so all order will be placed by this email.

/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
define(
    [
        'Magento_Checkout/js/model/quote',
        'Magento_Checkout/js/model/url-builder',
        'Magento_Customer/js/model/customer',
        'Magento_Checkout/js/model/place-order'
    ],
    function (quote, urlBuilder, customer, placeOrderService) {
        'use strict';

        return function (paymentData, messageContainer) {
            var serviceUrl, payload, email;

            payload = {
                cartId: quote.getQuoteId(),
                billingAddress: quote.billingAddress(),
                paymentMethod: paymentData
            };

            if (customer.isLoggedIn()) {
                serviceUrl = urlBuilder.createUrl('/carts/mine/payment-information', {});
            } else {
                serviceUrl = urlBuilder.createUrl('/guest-carts/:quoteId/payment-information', {
                    quoteId: quote.getQuoteId()
                });
                
                /* added email optional*/
                if(quote.guestEmail == null) {
                    email = 'emailOptional@w3solver.com';
                }
                payload.email = email;
            }

            return placeOrderService(serviceUrl, payload, messageContainer);
        };
    }
);

Now we will look how to make email as non-required field, for that we have overridden core email.html file, place your overriden file under view/frontend/web/template/form/element/email.phtml and remove the required from email input as seen in below code:-

<div class="field">
            <label class="label" for="customer-email">
                <span data-bind="i18n: 'Email Address (Optional)'"></span>
            </label>
            <div class="control _with-tooltip">
                <input class="input-text"
                       type="email"
                       data-bind="
                            textInput: email,
                            hasFocus: emailFocused"
                       name="username"
                       data-validate="{'validate-email':true}"
                       id="customer-email" />
                <!-- ko template: 'ui/form/element/helper/tooltip' --><!-- /ko -->
                <span class="note" data-bind="fadeVisible: isPasswordVisible() == false"><!-- ko i18n: 'You can create an account after checkout.'--><!-- /ko --></span>
            </div>
        </div>

Magento 2 track order issue (track order link not working when an order has more than one shipment)

Magento 2 track order issue (track order link not working when an order has more than one shipment)
This blogpost has a fix for core magento issue i.e, track order not working when more than one shipment is placed. Below is the screen you will get when you will place more than one shipment for a single order.

This issue is because in popup.phtml we have called child block to show every shipment details but if you check below code

'shipping.tracking.details.' . $counter 

Above code only has counter which is index of an array of track details and for every shipment it will take counter as 0, thus we will get an issue that block already called or exist. To fix this we have to make it unique so I have added ship id to this. You need to override popup.phtml in your code and replace it with below code:-

<?php
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

use Magento\Framework\View\Element\Template;

// @codingStandardsIgnoreFile

/** @var $block \Magento\Shipping\Block\Tracking\Popup */

$results = $block->getTrackingInfo();
?>
<div class="page tracking">
    <?php if (!empty($results)): ?>
        <?php foreach ($results as $shipId => $result): ?>
            <?php if ($shipId): ?>
                <div class="order subtitle caption"><?php /* @noEscape */ echo $block->escapeHtml(__('Shipment #')) . $shipId; ?></div>
            <?php endif; ?>
            <?php if (!empty($result)): ?>
                <?php foreach ($result as $counter => $track): 
                if(!is_array($track)) {
                ?>
                    <div class="table-wrapper">
                        <?php
                            $block->addChild('shipping.tracking.details.' . $counter . $shipId, Template::class, [
                                'track' => $track,
                                'template' => 'Magento_Shipping::tracking/details.phtml',
                                'storeSupportEmail' => $block->getStoreSupportEmail()
                            ]
                        );
                        ?>
                        <?php /* @noEscape */ echo $block->getChildHtml('shipping.tracking.details.' . $counter. $shipId); ?>
                    </div>
                    <?php if (!empty($track->getProgressdetail())): ?>
                        <?php
                            $block->addChild('shipping.tracking.progress.'. $counter, Template::class, [
                                'track' => $track,
                                'template' => 'Magento_Shipping::tracking/progress.phtml'
                            ]);
                        ?>
                        <?php /* @noEscape */ echo $block->getChildHtml('shipping.tracking.progress.' . $counter); ?>
                    <?php endif; 

                }
                    ?>
                <?php endforeach; ?>
            <?php else: ?>
                <div class="message info empty">
                    <div><?php echo $block->escapeHtml(__('There is no tracking available for this shipment.')); ?></div>
                </div>
            <?php endif; ?>
        <?php endforeach; ?>
    <?php else: ?>
        <div class="message info empty">
            <div><?php echo $block->escapeHtml(__('There is no tracking available.')); ?></div>
        </div>
    <?php endif; ?>
    <div class="actions">
        <button type="button"
                title="<?php echo $block->escapeHtml(__('Close Window')); ?>"
                class="action close"
                onclick="window.close(); window.opener.focus();">
            <span><?php echo $block->escapeHtml(__('Close Window')); ?></span>
        </button>
    </div>
</div>

Configure Code Sniffer With Netbeans (MEQP2 OR Magento 2 standard)

CodeSniffer, an essential code review tool which helps you to make your code clean and consistent, specially when we work with Magento we should make it our habit to use such tools to have better development process. This blogpost is for those who uses NetBeans IDE for Magento 2 development, here are the steps to integrate PHP CodeSniffer with NetBeans IDE using MEQP2 standards.

Note:- Make sure that you have code sniffer already steup as this blogpost only explains code sniffer configuration with netbeans.

Code Sniffer configuration steps in netbeans:

• Open NetBeans IDE (this process is for Netbeans 8.2).
• Go to tools-> Plugin and install the NetBeans plugin ‘phpCS-MD’. You will get it under “Available Plugins” tab. If it does not show then check next step, it will be already setup then.

• Now go to “Tools” -> “Options”->”PHP”->”Code Analysis”.

• Click on the tab “CodeSniffer”.
Here you have to provide the path to phpcs.bat file present under your PHP installation directory. Do this by clicking the “Browse” button there.

• Now you need to select the coding standard for which you want to test your application, in our case it is MEQP2. Select it and click ok to complete configuration.

Testing Code using code sniffer in netbeans:

To test the code just select file or folder from project directory and the go to source > inspect to get the below screen:-

Click on Inspect button to get the list of all issues and warning:-

Hope this helps, just drop in your comment for any issue.

Magento 2 UI Component simplest way to show only time for date column

This is a very short blog, but i wrote this post to provide the quick and best solution to hide time for date column n UI component. For this, you have to simply provide the date format setting without time format as given below in your ui-component.xml file

<column name="salesperson_createddt" class="Magento\Ui\Component\Listing\Columns\Date" >
    <argument name="data" xsi:type="array">
      <item name="config" xsi:type="array">
         <item name="filter" xsi:type="string">dateRange</item>
         <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
         <item name="dataType" xsi:type="string">date</item>
         <item name="label" xsi:type="string" translate="true">Created Date</item>
         <item name="dateFormat" xsi:type="string">MMM d, Y</item>
      </item>
   </argument>
</column>

Magento 2 add complex (aggregate sql function) collection query for grid

This blogpost provides solution to most common problem which we face several time while creating grid. If you have some complex collection query for grid creation specially if you are using aggregate function then you might face issue with filters, export csv functionality.

Magento 2 grid Creation with custom query

For adding custom query we need to override __initSelect function in our collection file as shown in below code:-

namespace Namespace\ModuleName\Model\ResourceModel\SpCommission;

use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;

class Collection extends AbstractCollection {

    protected function _initSelect() {
        parent::_initSelect();
        $ObjectManager = \Magento\Framework\App\ObjectManager::getInstance();

        $this->getSelect()->columns('created_dt as salesperson_createddt');
        $connection = $this->_resource->getConnection(\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION);
        $table = $connection->getTableName('i95dev_ar_book');
        $this->getSelect()->join(array('options' => $table), '`main_table`.`i95dev_ar_book_id` = `options`.`primary_id`');
        $this->getSelect()->columns('SUM(salesperson_commision) as total_commission')
            ->group(array('gp_salesperson_id'));
        $this->addFilterToMap('salesperson_createddt', 'main_table.created_dt');
        $this->addFilterToMap('primary_id', 'main_table.primary_id');

    }
}

So above is the way to customize your collection query for grids. Now we will see the tips for some issue you might face:-

Field is ambiguous

Suppose you joined two table and both have same name field and you are using it in filters then ‘field is ambiguous’ is most common issue you will face, to avoid it you need to map field with it alias and use alias everywhere rather than field name.

$this->addFilterToMap('primary_id', 'main_table.primary_id');

total_commission(Aggregate function field) is not a column

Note:- Magento 2 grid are made to work for simple queries with not much complexity

This happens when we do filter because as you can see above we are using ‘group by’ and aggregate function. If you see getSelectCountSql() function in \Magento\Framework\Data\Collection\AbstractDb file

public function getSelectCountSql()
    {
        $this->_renderFilters();

        $countSelect = clone $this->getSelect();
        $countSelect->reset(\Magento\Framework\DB\Select::ORDER);
        $countSelect->reset(\Magento\Framework\DB\Select::LIMIT_COUNT);
        $countSelect->reset(\Magento\Framework\DB\Select::LIMIT_OFFSET);
        $countSelect->reset(\Magento\Framework\DB\Select::COLUMNS);

        if (!count($this->getSelect()->getPart(\Magento\Framework\DB\Select::GROUP))) {
            $countSelect->columns(new \Zend_Db_Expr('COUNT(*)'));
            return $countSelect;
        }

        $countSelect->reset(\Magento\Framework\DB\Select::GROUP);
        $group = $this->getSelect()->getPart(\Magento\Framework\DB\Select::GROUP);
        $countSelect->columns(new \Zend_Db_Expr(("COUNT(DISTINCT ".implode(", ", $group).")")));
        return $countSelect;
    }

Above you can see that our collection column, limit offset, count , order and all other things are being reset to get the count of result. Since column get reset how will magneto know what is total_commission as this is not already created column name in any table thus you need to override this method to make customization according to your own needs.

Aggregate function column Alias is not working with filter due to where clause

Here mapping filter will be a bad suggestion, thus you need to override addFieldToFilter() function and request for having clause rather than where to make your code work.

Magento 2 add custom filter to grid for date (dropdown with value as today, lastweek)

In this blogpost we will look to customize the date filter to provide it more option:-

So as can be seen in above image we need to add a dropdown for date filter. On selection of any date it will make changes to input box, and we can can filter our data according to date.
To achieve this you need to override Magento_Ui/js/form/components/group.js file
In your module add requirejs-config.js file in view/adminhtml folder and write the below code:-

var config = {
    map: {
        '*': {
            'Magento_Ui/js/form/components/group':
            'Namespace_Salesperson/js/form/components/group',
        }
  }
};

Then add the group.js file in your own module on view\base\web\js\form\components\group.js and make changes in initialize function. You need to add a condition specifically for your field and provide the template to which you want to refer it:-

initialize: function () {
            this._super()
                ._setClasses();

                if(this.index == 'salesperson_createddt') {

                        this.template = 'Namespace_Salesperson/group/groupdt';
                }

            return this;
        },

Now add a html file at this <strong>view/base/web/template/group/groupdt.html</strong>

<legend class="admin__form-field-legend">
    <span text="label"/>
</legend>
<div class="admin__form-field" outereach="elems" render=""/>

<div class="salesperson_createddt" style="margin-left:67px;">
    <select id="salesperson_createddt">
    <option value="none"></option>
    <option value="today">Today</option>
    <option value="yesterday">Yesterday</option>
    <option value="this_week">This Week</option>
    <option value="last_week">Last Week</option>
    <option value="this_month">This Month</option>
    <option value="last_month">Last Month</option>
    <option value="last_month_2">Last 2 Months</option>
    <option value="ytd">YTD</option>
    </select>
</div>

Now to make dropdown work, i.e, on click of select dropdown, input box should have values according to selection made
Add your JS file path in layout xml file. Below is the code to add in your JS file:-

require(['jquery', 'jquery/ui'], function ($) {

    $(document).on('change', '#salesperson_createddt', function () {
        rangeSelect($(this).val(), "salesperson_createddt[from]", "salesperson_createddt[to]");
        $("input[name='salesperson_createddt[from]']").trigger('change');
        $("input[name='salesperson_createddt[to]']").trigger('change');
    });
    function rangeSelect(value, from, to) {
        from = "input[name='" + from + "']";
        to = "input[name='" + to + "']";

        if (value == "today") {
            var today = new Date();
            var dd = today.getDate();
            var mm = today.getMonth() + 1; //January is 0!
            var yyyy = today.getFullYear();
            today = mm + "/" + dd + "/" + yyyy;

            $(from).val(today);
            $(to).val(today);
        } else if (value == "yesterday") {
            var today = new Date();
            var dd = today.getDate() - 1;
            var mm = today.getMonth() + 1; //January is 0!
            var yyyy = today.getFullYear();
            today = mm + "/" + dd + "/" + yyyy;

            $(from).val(today);
            $(to).val(today);
        } else if (value == "this_week") {
            var curr = new Date();
            var firstDay = new Date(curr.setDate(curr.getDate() - curr.getDay()));
            var lastDay = new Date(curr.setDate(curr.getDate() - curr.getDay() + 6));

            firstDay = (firstDay.getMonth() + 1) + "/" + (firstDay.getDate()) + "/" + firstDay.getFullYear();
            lastDay = (lastDay.getMonth() + 1) + "/" + (lastDay.getDate()) + "/" + lastDay.getFullYear();

            $(from).val(firstDay);
            $(to).val(lastDay);
        } else if (value == "last_week") {
            var curr = new Date();
            var firstDay = new Date(curr.setDate(curr.getDate() - curr.getDay() - 6));
            var lastDay = new Date(curr.setDate(curr.getDate() - curr.getDay() + 6));

            firstDay = (firstDay.getMonth() + 1) + "/" + (firstDay.getDate()) + "/" + firstDay.getFullYear();
            lastDay = (lastDay.getMonth() + 1) + "/" + (lastDay.getDate()) + "/" + lastDay.getFullYear();

            $(from).val(firstDay);
            $(to).val(lastDay);
        } else if (value == "this_month") {
            var date = new Date(), y = date.getFullYear(), m = date.getMonth() + 1;
            var firstDay = m + "/" + 1 + "/" + y;
            var lastDay = new Date(y, m, 0);
            var lastDayWithSlashes = (lastDay.getMonth() + 1) + "/" + (lastDay.getDate()) + "/" + lastDay.getFullYear();

            $(from).val(firstDay);
            $(to).val(lastDayWithSlashes);
        } else if (value == "last_month") {
            var date = new Date(), y = date.getFullYear(), m = date.getMonth();
            var firstDay = m + "/" + 1 + "/" + y;
            var lastDay = new Date(y, m, 0);
            var lastDayWithSlashes = (lastDay.getMonth() + 1) + "/" + (lastDay.getDate()) + "/" + lastDay.getFullYear();
            $(from).val(firstDay);
            $(to).val(lastDayWithSlashes);
        } else if (value == "last_month_2") {
            var date = new Date(), y = date.getFullYear(), m = date.getMonth() - 1;
            var firstDay = m + "/" + 1 + "/" + y;
            var lastDay = new Date(y, m + 1, 0);
            var lastDayWithSlashes = (lastDay.getMonth() + 1) + "/" + (lastDay.getDate()) + "/" + lastDay.getFullYear();
            $(from).val(firstDay);
            $(to).val(lastDayWithSlashes);
        } else if (value == "ytd") {
            $(from).val("");
            $(to).val("");
        } else {
            document.getElementById(from).value = "";
            document.getElementById(to).value = "";
            $(from).val("");
            $(to).val("");
        }
    }
});
NOTE:- Replace salesperson_createddt with your field name

Magento 2 Event Cheat Sheet

Event-observer is a importance part for Magento.Magento uses event hooking system heavily, following the Observer Design Pattern, which allows dditional functionality to be hooked in and out without modifying the core code.

Below is the list of events directly from the Magento codebase. It’s pretty unlikely that anything was missed but if you do notice something then let me know.

EventnameFilepath
wishlist_add_itemvendor\magento\module-wishlist\Model\ Wishlist.php
wishlist_product_add_aftervendor\magento\module-wishlist\Model\ Wishlist.php
rss_wishlist_xml_callbackvendor\magento\module-wishlist\Model\Rss\Wishlist.php
wishlist_item_collection_products_after_loadvendor\magento\module-wishlist\Model\ResourceModel\Item\Collection.php
wishlist_items_renewedvendor\magento\module-wishlist\Helper\Data.php
wishlist_update_itemvendor\magento\module-wishlist\Controller\Index\UpdateItemOptions.php
wishlist_sharevendor\magento\module-wishlist\Controller\Index\Send.php
wishlist_add_productvendor\magento\module-wishlist\Controller\Index\Add.php
product_option_renderer_initmodule-wishlist\Block\Customer\Wishlist\Item\Options.php
‘payment_method_assign_data_vault_’. $this->getProviderCode()vendor\magento\module-vault\Model\Method\Vault.php
payment_method_assign_data_vaultvendor\magento\module-vault\Model\Method\Vault.php
admin_user_authenticate_aftervendor\magento\module-user\Model\User.php
admin_user_authenticate_aftervendor\magento\module-user\Model\User.php
admin_user_authenticate_beforevendor\magento\module-user\Model\User.php
admin_permissions_role_prepare_saveVendor\magento\module-user\Controller\Adminhtml\User\Role\SaveRole.php
permissions_role_html_beforevendor\magento\module-user\Block\Role.php
adminhtml_cache_flush_systemVendor\magento\magento\module-translation\Model\Inline\CacheManager.php
admin_system_config_changed_section_designvendor\magento\module-theme\Model\Design\Config\Plugin.php
admin_system_config_changed_section_designvendor\magento\module-theme\Model\Design\Config\Plugin.php
assign_theme_to_stores_aftervendor\magento\module-theme\Model\Config.php
page_block_html_topmenu_gethtml_aftervendor\magento\module-theme\Block\Html\Topmenu.php
page_block_html_topmenu_gethtml_beforevendor\magento\module-theme\Block\Html\Topmenu.php
tax_settings_change_aftervendor\magento\module-tax\Model\Calculation\Rule.php
tax_settings_change_aftervendor\magento\module-tax\Model\Calculation\Rule.php
tax_settings_change_aftervendor\magento\module-tax\Model\Calculation\Rate.php
tax_settings_change_aftervendor\magento\module-tax\Model\Calculation\Rate.php
tax_settings_change_aftervendor\magento\module-tax\Model\Calculation\Rate.php
tax_rate_data_fetchvendor\magento\module-tax\Model\Calculation.php
adminhtml_cache_refresh_typevendor\magento\module-tax\Controller\Adminhtml\Tax\IgnoreTaxNotification.php
swatch_gallery_upload_image_aftervendor\magento\module-swatches\Controller\Adminhtml\Iframe\Show.php
store_address_formatvendor\magento\module-store\Model\Address\Renderer.php
sendfriend_productvendor\magento\module-send-friend\Controller\Product\Send.php
on_view_reportvendor\magento\module-search\Controller\Adminhtml\Term\Report.php
sales_order_state_change_beforevendor\magento\module-sales\Model\Service\OrderService.php
sales_order_creditmemo_cancelvendor\magento\module-sales\Model\Service\CreditmemoService.php
rss_order_new_collection_selectvendor\magento\module-sales\Model\Rss\NewOrder.php
sales_sale_collection_query_beforevendor\magento\module-sales\Model\ResourceModel\Sale\Collection.php
$this->_eventPrefix . ‘_set_sales_order’vendor\magento\module-sales\Model\ResourceModel\Order\Collection\AbstractCollection.php
$this->_eventPrefix . ‘_load_after’vendor\magento\module-sales\Model\ResourceModel\Order\Address\Collection.php
$object->getEventPrefix() . ‘_save_attribute_after’vendor\magento\module-sales\Model\ResourceModel\Attribute.php
$object->getEventPrefix() . ‘_save_attribute_before’vendor\magento\module-sales\Model\ResourceModel\Attribute.php
sales_order_status_unassignvendor\magento\module-sales\Model\Order\Status.php
email_shipment_set_template_vars_beforevendor\magento\module-sales\Model\Order\Shipment\Sender\EmailSender.php
$this->_eventPrefix . ‘_html_txn_id’vendor\magento\module-sales\Model\Order\Payment\Transaction.php
sales_order_payment_capturevendor\magento\module-sales\Model\Order\Payment\Operations\CaptureOperation.php
sales_order_payment_cancelvendor\magento\module-sales\Model\Order\Payment.php
sales_order_payment_cancel_creditmemovendor\magento\module-sales\Model\Order\Payment.php
sales_order_payment_refundvendor\magento\module-sales\Model\Order\Payment.php
sales_order_payment_voidvendor\magento\module-sales\Model\Order\Payment.php
sales_order_payment_cancel_invoicevendor\magento\module-sales\Model\Order\Payment.php
sales_order_payment_payvendor\magento\module-sales\Model\Order\Payment.php
sales_order_payment_place_endvendor\magento\module-sales\Model\Order\Payment.php
sales_order_payment_place_startvendor\magento\module-sales\Model\Order\Payment.php
sales_order_item_cancelvendor\magento\module-sales\Model\Order\Item.php
email_invoice_set_template_vars_beforevendor\magento\module-sales\Model\Order\Invoice\Sender\EmailSender.php
sales_order_invoice_registervendor\magento\module-sales\Model\Order\Invoice\PayOperation.php
sales_order_invoice_registervendor\magento\module-sales\Model\Order\Invoice.php
sales_order_invoice_cancelvendor\magento\module-sales\Model\Order\Invoice.php
sales_order_invoice_payvendor\magento\module-sales\Model\Order\Invoice.php
email_shipment_set_template_vars_beforevendor\magento\module-sales\Model\Order\Email\Sender\ShipmentSender.php
email_shipment_comment_set_template_vars_beforevendor\magento\module-sales\Model\Order\Email\Sender\ShipmentCommentSender.php
email_order_set_template_vars_beforevendor\magento\module-sales\Model\Order\Email\Sender\OrderSender.php
email_order_comment_set_template_vars_beforevendor\magento\module-sales\Model\Order\Email\Sender\OrderCommentSender.php
email_invoice_set_template_vars_beforevendor\magento\module-sales\Model\Order\Email\Sender\InvoiceSender.php
email_invoice_comment_set_template_vars_beforevendor\magento\module-sales\Model\Order\Email\Sender\InvoiceCommentSender.php
email_creditmemo_set_template_vars_beforevendor\magento\module-sales\Model\Order\Email\Sender\CreditmemoSender.php
email_creditmemo_set_template_vars_beforevendor\magento\module-sales\Model\Order\Creditmemo\Sender\EmailSender.php
sales_order_creditmemo_refundvendor\magento\module-sales\Model\Order\Creditmemo\RefundOperation.php
customer_address_formatvendor\magento\module-sales\Model\Order\Address\Renderer.php
order_cancel_aftervendor\magento\module-sales\Model\Order.php
sales_order_place_aftervendor\magento\module-sales\Model\Order.php
sales_order_place_beforevendor\magento\module-sales\Model\Order.php
EventPrefix_dev_grid_async_indexing_’ . $statevendor\magento\module-sales\Model\Config\Backend\Grid\AsyncIndexing.php
EventPrefix_sales_email_general_async_sending_’ . $statevendor\magento\module-sales\Model\Config\Backend\Email\AsyncSending.php
checkout_submit_all_aftervendor\magento\module-sales\Model\AdminOrder\Create.php
sales_convert_order_item_to_quote_itemvendor\magento\module-sales\Model\AdminOrder\Create.php
sales_convert_order_to_quotevendor\magento\module-sales\Model\AdminOrder\Create.php
adminhtml_sales_order_creditmemo_register_beforevendor\magento\module-sales\Controller\Adminhtml\Order\CreditmemoLoader.php
adminhtml_sales_order_create_process_datavendor\magento\module-sales\Controller\Adminhtml\Order\Create.php
adminhtml_sales_order_create_process_data_beforevendor\magento\module-sales\Controller\Adminhtml\Order\Create.php
admin_sales_order_address_updatevendor\magento\module-sales\Controller\Adminhtml\Order\AddressSave.php
adminhtml_customer_orders_add_action_renderervendor\magento\module-sales\Block\Adminhtml\Reorder\Renderer\Action.php
salesrule_validator_processvendor\magento\module-sales-rule\Model\RulesApplier.php
salesrule_rule_condition_combinevendor\magento\module-sales-rule\Model\Rule\Condition\Combine.php
salesrule_rule_get_coupon_typesvendor\magento\module-sales-rule\Model\Rule.php
sales_quote_address_discount_itemvendor\magento\module-sales-rule\Model\Quote\Discount.php
sales_quote_address_discount_itemvendor\magento\module-sales-rule\Model\Quote\Discount.php
adminhtml_controller_salesrule_prepare_savevendor\magento\module-sales-rule\Controller\Adminhtml\Promo\Quote\Save.php
adminhtml_block_promo_widget_chooser_prepare_collectionvendor\magento\module-sales-rule\Block\Adminhtml\Promo\Widget\Chooser.php
adminhtml_promo_quote_edit_tab_coupons_form_prepare_formvendor\magento\module-sales-rule\Block\Adminhtml\Promo\Quote\Edit\Tab\Coupons\Form.php
adminhtml_block_salesrule_actions_prepareformvendor\magento\module-sales-rule\Block\Adminhtml\Promo\Quote\Edit\Tab\Actions.php
rss_catalog_review_collection_selectvendor\magento\module-review\Model\Rss.php
review_review_collection_load_beforevendor\magento\module-review\Model\ResourceModel\Review\Collection.php
rating_rating_collection_load_beforevendor\magento\module-review\Model\ResourceModel\Rating\Collection.php
review_controller_product_init_beforevendor\magento\module-review\Controller\Product.php
review_controller_product_initvendor\magento\module-review\Controller\Product.php
review_controller_product_init_aftervendor\magento\module-review\Controller\Product.php
sales_prepare_amount_expressionvendor\magento\module-reports\Model\ResourceModel\Order\Collection.php
adminhtml_widget_grid_filter_collectionvendor\magento\module-reports\Block\Adminhtml\Grid.php
sales_quote_item_collection_products_after_loadvendor\magento\module-quote\Model\ResourceModel\Quote\Item\Collection.php
prepare_catalog_product_collection_pricesvendor\magento\module-quote\Model\ResourceModel\Quote\Item\Collection.php
EventPrefix_load_aftervendor\magento\module-quote\Model\ResourceModel\Quote\Address\Collection.php
sales_model_service_quote_submit_failurevendor\magento\module-quote\Model\QuoteManagement.php
sales_model_service_quote_submit_successvendor\magento\module-quote\Model\QuoteManagement.php
sales_model_service_quote_submit_beforevendor\magento\module-quote\Model\QuoteManagement.php
checkout_submit_all_aftervendor\magento\module-quote\Model\QuoteManagement.php
checkout_submit_beforevendor\magento\module-quote\Model\QuoteManagement.php
sales_quote_address_collect_totals_aftervendor\magento\module-quote\Model\Quote\TotalsCollector.php
sales_quote_address_collect_totals_beforevendor\magento\module-quote\Model\Quote\TotalsCollector.php
sales_quote_collect_totals_aftervendor\magento\module-quote\Model\Quote\TotalsCollector.php
sales_quote_collect_totals_beforevendor\magento\module-quote\Model\Quote\TotalsCollector.php
EventPrefix_import_data_beforevendor\magento\module-quote\Model\Quote\Payment.php
sales_quote_item_qty_set_aftervendor\magento\module-quote\Model\Quote\Item.php
sales_quote_item_set_productvendor\magento\module-quote\Model\Quote\Item.php
sales_convert_quote_to_ordervendor\magento\module-quote\Model\Quote\Address\ToOrder.php
EventPrefix _merge_aftervendor\magento\module-quote\Model\Quote.php
EventPrefix_merge_beforevendor\magento\module-quote\Model\Quote.php
sales_quote_product_add_aftervendor\magento\module-quote\Model\Quote.php
sales_quote_add_itemvendor\magento\module-quote\Model\Quote.php
sales_quote_remove_itemvendor\magento\module-quote\Model\Quote.php
items_additional_datavendor\magento\module-quote\Model\Cart\Totals\ItemConverter.php
persistent_session_expiredvendor\magento\module-persistent\Observer\CheckExpirePersistentQuoteObserver.php
persistent_session_expiredvendor\magento\module-persistent\Controller\Index\UnsetCookie.php
payment_method_assign_datavendor\magento\module-paypal\Model\Payflowpro.php
‘payment_method_assign_data_MethodCodevendor\magento\module-paypal\Model\Payflowpro.php
paypal_express_place_order_successvendor\magento\module-paypal\Controller\Express\AbstractExpress\PlaceOrder.php
payment_method_assign_datavendor\magento\module-payment\Model\Method\Adapter.php
payment_method_assign_data_MethodCodevendor\magento\module-payment\Model\Method\Adapter.php
payment_method_is_activevendor\magento\module-payment\Model\Method\Adapter.php
payment_method_is_activevendor\magento\module-payment\Model\Method\AbstractMethod.php
payment_method_assign_datavendor\magento\module-payment\Model\Method\AbstractMethod.php
payment_method_assign_data_MethodCodevendor\magento\module-payment\Model\Method\AbstractMethod.php
payment_cart_collect_items_and_amountsvendor\magento\module-payment\Model\Cart.php
payment_form_block_to_html_beforevendor\magento\module-payment\Block\Form\Cc.php
depersonalize_clear_sessionvendor\magento\module-page-cache\Model\Layout\DepersonalizePlugin.php
adminhtml_cache_refresh_typevendor\magento\module-page-cache\Model\Cache\Type.php
checkout_multishipping_refund_allvendor\magento\module-multishipping\Model\Checkout\Type\Multishipping.php
checkout_submit_all_aftervendor\magento\module-multishipping\Model\Checkout\Type\Multishipping.php
checkout_type_multishipping_create_orders_singlevendor\magento\module-multishipping\Model\Checkout\Type\Multishipping.php
checkout_type_multishipping_set_shipping_itemsvendor\magento\module-multishipping\Model\Checkout\Type\Multishipping.php
multishipping_checkout_controller_success_actionvendor\magento\module-multishipping\Controller\Checkout\ShippingPost.php
checkout_controller_multishipping_shipping_postvendor\magento\module-multishipping\Controller\Checkout\ShippingPost.php
clean_cache_after_reindexvendor\magento\module-indexer\Model\Processor\CleanCache.php
clean_cache_by_tagsvendor\magento\module-indexer\Model\Processor\CleanCache.php
catalog_product_prepare_index_selectvendor\magento\module-grouped-product\Model\ResourceModel\Product\Indexer\Price\Grouped.php
gift_options_prepare_itemsvendor\magento\module-gift-message\Block\Message\Inline.php
eav_collection_abstract_load_beforevendor\magento\module-eav\Model\Entity\Collection\AbstractCollection.php
adminhtml_block_eav_attribute_edit_form_initvendor\magento\module-eav\Block\Adminhtml\Attribute\Edit\Main\AbstractMain.php
visitor_activity_savevendor\magento\module-customer\Model\Visitor.php
visitor_initvendor\magento\module-customer\Model\Visitor.php
customer_logoutvendor\magento\module-customer\Model\Session.php
customer_data_object_loginvendor\magento\module-customer\Model\Session.php
customer_loginvendor\magento\module-customer\Model\Session.php
customer_data_object_loginvendor\magento\module-customer\Model\Session.php
customer_loginvendor\magento\module-customer\Model\Session.php
customer_session_initvendor\magento\module-customer\Model\Session.php
customer_save_after_data_objectvendor\magento\module-customer\Model\ResourceModel\CustomerRepository.php
customer_customer_authenticatedvendor\magento\module-customer\Model\Customer.php
customer_address_formatvendor\magento\module-customer\Model\Address\AbstractAddress.php
customer_data_object_loginvendor\magento\module-customer\Model\AccountManagement.php:
customer_customer_authenticatedvendor\magento\module-customer\Model\AccountManagement.php:
adminhtml_customer_save_aftervendor\magento\module-customer\Controller\Adminhtml\Index\Save.php
adminhtml_customer_prepare_savevendor\magento\module-customer\Controller\Adminhtml\Index\Save.php
customer_account_editedvendor\magento\module-customer\Controller\Account\EditPost.php
customer_register_successvendor\magento\module-customer\Controller\Account\CreatePost.php
adminhtml_block_html_beforevendor\magento\module-customer\Block\Adminhtml\Edit\Tab\Carts.php
admin_system_config_changed_section_currencyvendor\magento\module-currency-symbol\Model\System\Currencysymbol.php
admin_system_config_changed_section_currency_before_reinitvendor\magento\module-currency-symbol\Model\System\Currencysymbol.php
controller_action_nocookiesvendor\magento\module-cookie\Controller\Index\NoCookies.php
catalog_product_validate_variations_beforevendor\magento\module-configurable-product\Model\Product\Validator\Plugin.php
admin_system_config_changed_section_{$this->getSection()}vendor\magento\module-config\Model\Config.php
adminhtml_system_config_advanced_disableoutput_render_beforevendor\magento\module-config\Block\System\Config\Form\Fieldset\Modules\DisableOutput.php
cms_wysiwyg_images_static_urls_allowedvendor\magento\module-cms\Helper\Wysiwyg\Images.php
cms_page_rendervendor\magento\module-cms\Helper\Page.php
cms_controller_router_match_beforevendor\magento\module-cms\Controller\Router.php
cms_page_prepare_savevendor\magento\module-cms\Controller\Adminhtml\Page\Save.php
adminhtml_cmspage_on_deletevendor\magento\module-cms\Controller\Adminhtml\Page\Delete.php
checkout_type_onepage_save_order_aftervendor\magento\module-checkout\Model\Type\Onepage.php
checkout_submit_all_aftervendor\magento\module-checkout\Model\Type\Onepage.php
restore_quotevendor\magento\module-checkout\Model\Session.php
checkout_quote_destroyvendor\magento\module-checkout\Model\Session.php
load_customer_quote_beforevendor\magento\module-checkout\Model\Session.php
checkout_quote_initvendor\magento\module-checkout\Model\Session.php
custom_quote_processvendor\magento\module-checkout\Model\Session.php
checkout_cart_product_update_aftervendor\magento\module-checkout\Model\Cart.php
checkout_cart_save_aftervendor\magento\module-checkout\Model\Cart.php
checkout_cart_save_beforevendor\magento\module-checkout\Model\Cart.php
checkout_cart_update_items_aftervendor\magento\module-checkout\Model\Cart.php
checkout_cart_update_items_beforevendor\magento\module-checkout\Model\Cart.php
checkout_cart_product_add_aftervendor\magento\module-checkout\Model\Cart.php
checkout_allow_guestvendor\magento\module-checkout\Helper\Data.php
checkout_onepage_controller_success_actionvendor\magento\module-checkout\Controller\Onepage\Success.php
checkout_controller_onepage_saveOrdervendor\magento\module-checkout\Controller\Onepage\SaveOrder.php
checkout_cart_update_item_completevendor\magento\module-checkout\Controller\Cart\UpdateItemOptions.php
checkout_cart_add_product_completevendor\magento\module-checkout\Controller\Cart\Add.php
shortcut_buttons_containervendor\magento\module-checkout\Block\QuoteShortcutButtons.php
clean_cache_by_tagsvendor\magento\module-catalog\Plugin\Model\Product\Action\UpdateAttributesFlushCache.php
clean_cache_by_tagsvendor\magento\module-catalog\Plugin\Model\Product\Action\UpdateAttributesFlushCache.php
rss_catalog_notify_stock_collection_selectvendor\magento\module-catalog\Model\Rss\Product\NotifyStock.php
prepare_catalog_product_index_selectvendor\magento\module-catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice.php
prepare_catalog_product_index_selectvendor\magento\module-catalog\Model\ResourceModel\Product\Indexer\Eav\Source.php
prepare_catalog_product_index_selectvendor\magento\module-catalog\Model\ResourceModel\Product\Indexer\Eav\Source.php
prepare_catalog_product_index_selectvendor\magento\module-catalog\Model\ResourceModel\Product\Indexer\Eav\Decimal.php
prepare_catalog_product_index_selectvendor\magento\module-catalog\Model\ResourceModel\Product\Indexer\Eav\AbstractEav.php
catalog_product_compare_item_collection_clearvendor\magento\module-catalog\Model\ResourceModel\Product\Compare\Item\Collection.php
catalog_product_collection_apply_limitations_aftervendor\magento\module-catalog\Model\ResourceModel\Product\Collection.php
catalog_product_collection_before_add_count_to_categoriesvendor\magento\module-catalog\Model\ResourceModel\Product\Collection.php
catalog_product_collection_load_aftervendor\magento\module-catalog\Model\ResourceModel\Product\Collection.php
catalog_prepare_price_selectvendor\magento\module-catalog\Model\ResourceModel\Product\Collection.php
catalog_product_delete_after_donevendor\magento\module-catalog\Model\ResourceModel\Product.php
catalog_category_tree_init_inactive_category_idsvendor\magento\module-catalog\Model\ResourceModel\Category\Tree.php
EventPrefix_add_is_active_filtervendor\magento\module-catalog\Model\ResourceModel\Category\Flat\Collection.php
EventPrefix_load_aftervendor\magento\module-catalog\Model\ResourceModel\Category\Flat\Collection.php
EventPrefix_load_beforevendor\magento\module-catalog\Model\ResourceModel\Category\Flat\Collection.php
catalog_category_flat_loadnodes_beforevendor\magento\module-catalog\Model\ResourceModel\Category\Flat.php
catalog_category_tree_init_inactive_category_idsvendor\magento\module-catalog\Model\ResourceModel\Category\Flat.php
EventPrefix_add_is_active_filtervendor\magento\module-catalog\Model\ResourceModel\Category\Collection.php
EventPrefix_load_aftervendor\magento\module-catalog\Model\ResourceModel\Category\Collection.php
EventPrefix_load_beforevendor\magento\module-catalog\Model\ResourceModel\Category\Collection.php
catalog_category_delete_after_donevendor\magento\module-catalog\Model\ResourceModel\Category.php
catalog_category_change_productsvendor\magento\module-catalog\Model\ResourceModel\Category.php
catalog_product_get_final_pricevendor\magento\module-catalog\Model\Product\Type\Price.php
$eventNamevendor\magento\module-catalog\Model\Product\Type\AbstractType.php
adminhtml_product_attribute_typesvendor\magento\module-catalog\Model\Product\Attribute\Source\Inputtype.php
catalog_product_attribute_update_beforevendor\magento\module-catalog\Model\Product\Action.php
catalog_product_is_salable_aftervendor\magento\module-catalog\Model\Product.php
catalog_product_is_salable_beforevendor\magento\module-catalog\Model\Product.php
EventPrefix_validate_aftervendor\magento\module-catalog\Model\Product.php
EventPrefix_validate_beforevendor\magento\module-catalog\Model\Product.php
clean_cache_by_tagsvendor\magento\module-catalog\Model\Category.php
category_movevendor\magento\module-catalog\Model\Category.php
EventPrefix_move_aftervendor\magento\module-catalog\Model\Category.php
EventPrefix_move_beforevendor\magento\module-catalog\Model\Category.php
catalog_controller_product_viewvendor\magento\module-catalog\Helper\Product\View.php
catalog_controller_product_init_beforevendor\magento\module-catalog\Helper\Product.php
catalog_product_compare_remove_productvendor\magento\module-catalog\Controller\Product\Compare\Remove.php
catalog_product_compare_add_productvendor\magento\module-catalog\Controller\Category\View.php
catalog_controller_category_init_aftervendor\magento\module-catalog\Controller\Category\View.php
controller_action_catalog_product_save_entity_aftervendor\magento\module-catalog\Controller\Adminhtml\Product\Save.php
catalog_product_new_actionvendor\magento\module-catalog\Controller\Adminhtml\Product\NewAction.php
catalog_product_gallery_upload_image_aftervendor\magento\module-catalog\Controller\Adminhtml\Product\Gallery\Upload.php
catalog_product_edit_actionvendor\magento\module-catalog\Controller\Adminhtml\Product\Edit.php
catalog_product_to_website_changevendor\magento\module-catalog\Controller\Adminhtml\Product\Action\Attribute\Save.php
catalog_category_prepare_savevendor\magento\module-catalog\Controller\Adminhtml\Category\Save.php
catalog_controller_category_deletevendor\magento\module-catalog\Controller\Adminhtml\Category\Delete.php
category_prepare_ajax_responsevendor\magento\module-catalog\Controller\Adminhtml\Category.php
shortcut_buttons_containervendor\magento\module-catalog\Block\ShortcutButtons.php
rss_catalog_special_xml_callbackvendor\magento\module-catalog\Block\Rss\Product\Special.php
rss_catalog_new_xml_callbackvendor\magento\module-catalog\Block\Rss\Product\NewProducts.php
rss_catalog_category_xml_callbackvendor\magento\module-catalog\Block\Rss\Category.php
catalog_product_option_price_configuration_aftervendor\magento\module-catalog\Block\Product\View\Options.php
catalog_product_view_configvendor\magento\module-catalog\Block\Product\View.php
catalog_product_upsellvendor\magento\module-catalog\Block\Product\ProductList\Upsell.php
catalog_block_product_list_collectionvendor\magento\module-catalog\Block\Product\ListProduct.php
catalog_block_product_status_displayvendor\magento\module-catalog\Block\Product\AbstractProduct.php
catalog_product_gallery_prepare_layoutvendor\magento\module-catalog\Block\Adminhtml\Product\Helper\Form\Gallery\Content.php
adminhtml_catalog_product_grid_prepare_massactionvendor\magento\module-catalog\Block\Adminhtml\Product\Grid.php
adminhtml_catalog_product_edit_tab_attributes_create_html_beforevendor\magento\module-catalog\Block\Adminhtml\Product\Edit\Tab\Attributes\Create.php
adminhtml_catalog_product_edit_element_typesvendor\magento\module-catalog\Block\Adminhtml\Product\Edit\Tab\Attributes.php
adminhtml_catalog_product_edit_prepare_formvendor\magento\module-catalog\Block\Adminhtml\Product\Edit\Tab\Attributes.php
adminhtml_catalog_product_form_prepare_excluded_field_listvendor\magento\module-catalog\Block\Adminhtml\Product\Edit\Action\Attribute\Tab\Attributes.php
adminhtml_catalog_product_attribute_set_toolbar_main_html_beforevendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Set\Toolbar\Main.php
adminhtml_catalog_product_attribute_set_main_html_beforevendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Set\Main.php
adminhtml_catalog_product_edit_element_typesvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\NewAttribute\Product\Attributes.php
adminhtml_catalog_product_edit_prepare_formvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\NewAttribute\Product\Attributes.php
product_attribute_grid_buildvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Grid.php
product_attribute_form_build_main_tabvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Main.php
adminhtml_product_attribute_typesvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Main.php
adminhtml_catalog_product_attribute_edit_frontend_prepare_formvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Front.php
product_attribute_form_build_front_tabvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Front.php
product_attribute_form_buildvendor\magento\module-catalog\Block\Adminhtml\Product\Attribute\Edit\Tab\Advanced.php
adminhtml_catalog_category_tree_can_add_sub_categoryvendor\magento\module-catalog\Block\Adminhtml\Category\Tree.php
adminhtml_catalog_category_tree_can_add_root_categoryvendor\magento\module-catalog\Block\Adminhtml\Category\Tree.php
adminhtml_catalog_category_tree_is_moveablevendor\magento\module-catalog\Block\Adminhtml\Category\Tree.php
catalogsearch_reset_search_resultvendor\magento\module-catalog-search\Model\ResourceModel\Fulltext.php
catelogsearch_searchable_attributes_load_aftervendor\magento\module-catalog-search\Model\Indexer\Fulltext\Action\Full.php
catelogsearch_searchable_attributes_load_aftervendor\magento\module-catalog-search\Model\Indexer\Fulltext\Action\DataProvider.php
clean_cache_by_tagsvendor\magento\module-catalog-rule\Model\Indexer\AbstractIndexer.php
adminhtml_controller_catalogrule_prepare_savevendor\magento\module-catalog-rule\Controller\Adminhtml\Promo\Catalog\Save.php
catalogrule_dirty_noticevendor\magento\module-catalog-rule\Controller\Adminhtml\Promo\Catalog\Index.php
clean_cache_by_tagsvendor\magento\module-catalog-inventory\Model\Indexer\Stock\AbstractAction.php
catalog_product_import_bunch_save_aftervendor\magento\module-catalog-import-export\Model\Import\Product.php
catalog_product_import_finish_beforevendor\magento\module-catalog-import-export\Model\Import\Product.php
catalog_product_import_bunch_delete_aftervendor\magento\module-catalog-import-export\Model\Import\Product.php
catalog_product_import_bunch_delete_commit_beforevendor\magento\module-catalog-import-export\Model\Import\Product.php
catalog_product_get_final_pricevendor\magento\module-bundle\Pricing\Price\BundleSelectionPrice.php
catalog_product_prepare_index_selectvendor\magento\module-bundle\Model\ResourceModel\Indexer\Price.php
catalog_product_get_final_pricevendor\magento\module-bundle\Model\Product\Price.php
catalog_product_get_final_pricevendor\magento\module-bundle\Model\Product\Price.php
prepare_catalog_product_collection_pricesvendor\magento\module-bundle\Model\Product\Price.php
catalog_product_option_price_configuration_aftervendor\magento\module-bundle\Block\Catalog\Product\View\Type\Bundle.php
backend_auth_user_login_failedvendor\magento\module-backend\Model\Auth.php
backend_auth_user_login_failedvendor\magento\module-backend\Model\Auth.php
backend_auth_user_login_successvendor\magento\module-backend\Model\Auth.php
$eventNamevendor\magento\module-backend\Controller\Adminhtml\System\Store\Save.php
store_group_savevendor\magento\module-backend\Controller\Adminhtml\System\Store\Save.php
store_deletevendor\magento\module-backend\Controller\Adminhtml\System\Store\DeleteStorePost.php
theme_save_aftervendor\magento\module-backend\Controller\Adminhtml\System\Design\Save.php
adminhtml_cache_flush_systemvendor\magento\module-backend\Controller\Adminhtml\Cache\FlushSystem.php
adminhtml_cache_flush_allvendor\magento\module-backend\Controller\Adminhtml\Cache\FlushAll.php
clean_static_files_cache_aftervendor\magento\module-backend\Controller\Adminhtml\Cache\CleanStaticFiles.php
clean_media_cache_aftervendor\magento\module-backend\Controller\Adminhtml\Cache\CleanMedia.php
clean_catalog_images_cache_aftervendor\magento\module-backend\Controller\Adminhtml\Cache\CleanImages.php
adminhtml_cache_flush_allvendor\magento\module-backend\Console\Command\CacheFlushCommand.php
adminhtml_cache_flush_systemvendor\magento\module-backend\Console\Command\CacheCleanCommand.php
backend_block_widget_grid_prepare_grid_beforevendor\magento\module-backend\Block\Widget\Grid.php
adminhtml_block_html_beforevendor\magento\module-backend\Block\Template.php
adminhtml_store_edit_form_prepare_formvendor\magento\module-backend\Block\System\Store\Edit\AbstractForm.php
checkout_directpost_placeOrdervendor\magento\module-authorizenet\Controller\Directpost\Payment\Place.php
layout_render_beforevendor\magento\framework\View\Result\Layout.php
layout_render_before_FullActionNamevendor\magento\framework\View\Result\Layout.php
core_layout_block_create_aftervendor\magento\framework\View\Layout\Generator\Block.php
layout_generate_blocks_aftervendor\magento\framework\View\Layout\Builder.php
layout_generate_blocks_beforevendor\magento\framework\View\Layout\Builder.php
layout_load_beforevendor\magento\framework\View\Layout\Builder.php
core_layout_render_elementvendor\magento\framework\View\Layout.php
view_message_block_render_grouped_html_aftervendor\magento\framework\View\Element\AbstractBlock.php
EventPrefix_process_relationvendor\magento\framework\Model\ResourceModel\Db\VersionControl\RelationComposite.php
EventPrefix_load_aftervendor\magento\framework\Model\ResourceModel\Db\Collection\AbstractCollection.php
core_collection_abstract_load_aftervendor\magento\framework\Model\ResourceModel\Db\Collection\AbstractCollection.php
$this->_eventPrefix . ‘_load_before’vendor\magento\framework\Model\ResourceModel\Db\Collection\AbstractCollection.php
‘core_collection_abstract_load_before’vendor\magento\framework\Model\ResourceModel\Db\Collection\AbstractCollection.php
EventPrefix_clearvendor\magento\framework\Model\AbstractModel.php
model_delete_commit_aftervendor\magento\framework\Model\AbstractModel.php
EventPrefix_delete_commit_aftervendor\magento\framework\Model\AbstractModel.php
model_delete_aftervendor\magento\framework\Model\AbstractModel.php
clean_cache_by_tagsvendor\magento\framework\Model\AbstractModel.php
EventPrefix_delete_aftervendor\magento\framework\Model\AbstractModel.php
EventPrefix_delete_beforevendor\magento\framework\Model\AbstractModel.php
model_delete_beforevendor\magento\framework\Model\AbstractModel.php
EventPrefix_save_aftervendor\magento\framework\Model\AbstractModel.php
clean_cache_by_tagsvendor\magento\framework\Model\AbstractModel.php
model_save_aftervendor\magento\framework\Model\AbstractModel.php
EventPrefix_save_beforevendor\magento\framework\Model\AbstractModel.php
model_save_beforevendor\magento\framework\Model\AbstractModel.php
$this->_eventPrefix . ‘_load_after’vendor\magento\framework\Model\AbstractModel.php
model_load_aftervendor\magento\framework\Model\AbstractModel.php
$this->_eventPrefix . ‘_load_before’vendor\magento\framework\Model\AbstractModel.php
model_load_beforevendor\magento\framework\Model\AbstractModel.php
session_abstract_add_messagevendor\magento\framework\Message\Manager.php
session_abstract_clear_messagesvendor\magento\framework\Message\Manager.php
currency_display_options_formingvendor\magento\framework\Locale\Currency.php
entity_manager_save_beforevendor\magento\framework\EntityManager\Operation\Update.php
entity_manager_save_aftervendor\magento\framework\EntityManager\Operation\Update.php
entity_manager_load_beforevendor\magento\framework\EntityManager\Operation\Read.php
entity_manager_delete_beforevendor\magento\framework\EntityManager\Operation\Delete.php
entity_manager_delete_beforevendor\magento\framework\EntityManager\Operation\Delete.php
entity_manager_save_beforevendor\magento\framework\EntityManager\Operation\Create.php
entity_manager_save_aftervendor\magento\framework\EntityManager\Operation\Create.php
$this->resolveEntityPrefix($entityType) . ‘_’ . $eventSuffixvendor\magento\framework\EntityManager\EventManager.php
$eventNamevendor\magento\framework\EntityManager\EventManager.php
abstract_search_result_load_aftervendor\magento\framework\Data\AbstractSearchResult.php
Eventprefix_load_after’vendor\magento\framework\Data\AbstractSearchResult.php
Eventprefix_load_before’vendor\magento\framework\Data\AbstractSearchResult.php
abstract_search_result_load_beforevendor\magento\framework\Data\AbstractSearchResult.php
controller_action_noroutevendor\magento\framework\Controller\Noroute\Index.php
controller_action_layout_render_beforevendor\magento\framework\App\View.php
controller_action_layout_render_before_FullActionNamevendor\magento\framework\App\View.php
controller_front_send_response_beforevendor\magento\framework\App\Http.php
controller_action_postdispatchvendor\magento\framework\App\Action\Action.php
controller_action_postdispatch_RouteNamevendor\magento\framework\App\Action\Action.php
controller_action_postdispatch_ FullActionNamevendor\magento\framework\App\Action\Action.php
controller_action_predispatch_FullActionNamevendor\magento\framework\App\Action\Action.php
controller_action_predispatch_RouteNamevendor\magento\framework\App\Action\Action.php
controller_action_predispatchvendor\magento\framework\App\Action\Action.php

Magento 2 all about error reports

In this blogpost we will learn how to see error logs of Magento directly on frontend rather then going to reports folder. As we know that Magento does not display error data directly on UI, it rather provide a file name which is found in var/report folder in Magento. This is a good thing and done for security reason, since we don’t want others to know about our file name and paths, which usually shows up in error track. The error reports are generated in text file which have their names in randomly generated number such as 657030389. You can open these files in any text editor to view the error message.

But, during your development phase sometime we want to get this message directly on frontend rather than reading files again and again as this saves our time also, for this we need to make several changes.
Go to pub/errors/local.sample.xml and rename this file to /errors/local.xml Now you would be able to view the error message in your web browser itself.

Above was all about the developer, now what if any such issue appears in front of your customer, then it will not look good? You should display a good looking UI and message to end user. For that we can open the pub/errors/local.xml file and change the

	<action>print</action>
        to 
	<action>email</action>

This will show a nice form on front end, where user can email you back when they view the error message. You can also change style of this page then you can modify it in pub/errors/default/report.html