{"id":1234,"date":"2020-09-09T12:02:51","date_gmt":"2020-09-09T12:02:51","guid":{"rendered":"https:\/\/meetanshi.com\/blog\/2020\/09\/09\/add-company-column-in-abandoned-carts-report-in-magento-2\/"},"modified":"2025-07-17T10:36:12","modified_gmt":"2025-07-17T05:06:12","slug":"add-company-column-in-abandoned-carts-report-in-magento-2","status":"publish","type":"post","link":"https:\/\/meetanshi.com\/blog\/add-company-column-in-abandoned-carts-report-in-magento-2\/","title":{"rendered":"How to Add Company Column in Abandoned Carts Report in Magento 2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The default\u00a0Magento 2\u00a0offers an\u00a0<a href=\"https:\/\/experienceleague.adobe.com\/en\/docs\/commerce-admin\/start\/reporting\/reports-menu\" target=\"_blank\" rel=\"noreferrer noopener\">abandoned carts report<\/a>\u00a0that lists all registered customers who have abandoned carts which is yet to be expired.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The abandoned carts report grid lists the below details:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Customer Name<\/li>\n\n\n\n<li>Email Address<\/li>\n\n\n\n<li>Number of products in the cart<\/li>\n\n\n\n<li>Cart Subtotal<\/li>\n\n\n\n<li>Applied Coupon<\/li>\n\n\n\n<li>Date created<\/li>\n\n\n\n<li>Date of the last update<\/li>\n\n\n\n<li>IP address<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These details can help the store owner track the reason for the cart abandonment and strive for customer retention. Cart abandonment can cost the business all the efforts, time, and money put to bring the valuable traffic to the site.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In March 2020, 88.05% of <a href=\"https:\/\/meetanshi.com\/blog\/abandonment-statistics\/\">online shopping orders were abandoned<\/a> \u2013&nbsp;<a href=\"https:\/\/www.statista.com\/statistics\/457078\/category-cart-abandonment-rate-worldwide\/\" target=\"_blank\" rel=\"noreferrer noopener\">Statista<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To reduce this number, the store owners employ various tactics using the customer data that is collected by&nbsp;<a href=\"https:\/\/meetanshi.com\/blog\/configure-magento-2-customer-accounts\/\" target=\"_blank\" rel=\"noreferrer noopener\">configuring customer accounts in Magento 2<\/a>&nbsp;store.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It may happen, depending on the nature of the business, that some useful customer data is not included in the abandoned carts report in Magento 2 default grid.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, the customer\u2019s company name that is collected during registration can be helpful to decide their purchase power and including it in the abandoned carts report can make the task easier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To&nbsp;<em><strong>add company column in abandoned carts report in Magento 2<\/strong><\/em>&nbsp;can be easy with the method given in this post. However, do not forget to first enable company name in customer account in Magento 2 from the admin panel.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The default Abandoned carts report in Magento 2 looks something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/meetanshi.com\/blog\/wp-content\/uploads\/2020\/09\/Default-Magento-2-Abandoned-carts-report.png\" alt=\"Default Magento 2 Abandoned carts report\" class=\"wp-image-10427\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Stepwise method to add company column in abandoned carts report in Magento 2:<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create&nbsp;<em><strong>registration.php<\/strong><\/em>&nbsp;file at&nbsp;<strong><strong>app\\code\\Vendor\\Module<\/strong><\/strong>&nbsp;directory<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\nuse \\Magento\\Framework\\Component\\ComponentRegistrar;\n\nComponentRegistrar::register(ComponentRegistrar::MODULE, 'Vendor_Module', __DIR__);<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Create&nbsp;<em><strong>module.xml<\/strong><\/em>&nbsp;file at&nbsp;<strong><strong>app\\code\\Vendor\\Module\\etc<\/strong><\/strong>&nbsp;directory<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\"?>\n&lt;config xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n        xsi:noNamespaceSchemaLocation=\"urn:magento:framework:Module\/etc\/module.xsd\">\n    &lt;module name=\"Vendor_Module\" setup_version=\"1.0.0\"\/>\n&lt;\/config><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Create&nbsp;<em><strong>di.xml<\/strong><\/em>&nbsp;file at&nbsp;<strong><strong>app\\code\\Vendor\\Module\\etc\\adminhtml<\/strong><\/strong>&nbsp;directory<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?xml version=\"1.0\"?>\n&lt;config xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"urn:magento:framework:ObjectManager\/etc\/config.xsd\">\n    &lt;preference for=\"Magento\\Reports\\Block\\Adminhtml\\Shopcart\\Abandoned\\Grid\" type=\"Vendor\\Module\\Block\\Adminhtml\\Shopcart\\Abandoned\\Grid\" \/>\n&lt;\/config><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Create&nbsp;<em><strong>Grid.php<\/strong><\/em>&nbsp;at&nbsp;<strong><strong>app\\code\\Vendor\\Module\\Block\\Adminhtml\\Shopcart\\Abandoned<\/strong><\/strong>&nbsp;directory<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\nnamespace Vendor\\Module\\Block\\Adminhtml\\Shopcart\\Abandoned;\n\nclass Grid extends \\Magento\\Reports\\Block\\Adminhtml\\Grid\\Shopcart\n{\n    protected $_quotesFactory;\n\n    public function __construct(\n        \\Magento\\Backend\\Block\\Template\\Context $context,\n        \\Magento\\Backend\\Helper\\Data $backendHelper,\n        \\Magento\\Reports\\Model\\ResourceModel\\Quote\\CollectionFactory $quotesFactory,\n        array $data = []\n    ) {\n        $this->_quotesFactory = $quotesFactory;\n        parent::__construct($context, $backendHelper, $data);\n    }\n\n    protected function _construct()\n    {\n        parent::_construct();\n        $this->setId('gridAbandoned');\n    }\n\n    protected function _prepareCollection()\n    {\n        $collection = $this->_quotesFactory->create();\n\n        $filter = $this->getParam($this->getVarNameFilter(), []);\n        if ($filter) {\n            $filter = base64_decode($filter);\n            parse_str(urldecode($filter), $data);\n        }\n\n        if (!empty($data)) {\n            $collection->prepareForAbandonedReport($this->_storeIds, $data);\n        } else {\n            $collection->prepareForAbandonedReport($this->_storeIds);\n        }\n\n        $this->setCollection($collection);\n        parent::_prepareCollection();\n        if ($this->_isExport) {\n            $collection->setPageSize(null);\n        }\n        $this->getCollection()->resolveCustomerNames();\n        \n        return $this;\n    }\n\n    protected function _addColumnFilterToCollection($column)\n    {\n        $field = $column->getFilterIndex() ? $column->getFilterIndex() : $column->getIndex();\n        $skip = ['subtotal', 'customer_name', 'email'];\n\n        if (in_array($field, $skip)) {\n            return $this;\n        }\n\n        parent::_addColumnFilterToCollection($column);\n        return $this;\n    }\n\n    protected function _prepareColumns()\n    {\n        $this->addColumn(\n            'customer_name',\n            [\n                'header' => __('Customer'),\n                'index' => 'customer_name',\n                'sortable' => false,\n                'header_css_class' => 'col-name',\n                'column_css_class' => 'col-name'\n            ]\n        );\n\n        $this->addColumn(\n            'email',\n            [\n                'header' => __('Email'),\n                'index' => 'email',\n                'sortable' => false,\n                'header_css_class' => 'col-email',\n                'column_css_class' => 'col-email'\n            ]\n        );\n\n        \n        \/\/add Company field\n        $this->addColumn(\n            'company',\n            [\n                'header' => __('Company'),\n                'index' => 'company',\n                'sortable' => false,\n                'renderer' => \\Meetanshi\\Register\\Block\\Adminhtml\\Grid\\Column\\Renderer\\Company::class,\n                'header_css_class' => 'col-company',\n                'column_css_class' => 'col-company'\n            ]\n        );\n\n        $this->addColumn(\n            'items_count',\n            [\n                'header' => __('Products'),\n                'index' => 'items_count',\n                'sortable' => false,\n                'type' => 'number',\n                'header_css_class' => 'col-number',\n                'column_css_class' => 'col-number'\n            ]\n        );\n\n        $this->addColumn(\n            'items_qty',\n            [\n                'header' => __('Quantity'),\n                'index' => 'items_qty',\n                'sortable' => false,\n                'type' => 'number',\n                'header_css_class' => 'col-qty',\n                'column_css_class' => 'col-qty'\n            ]\n        );\n\n        if ($this->getRequest()->getParam('website')) {\n            $storeIds = $this->_storeManager->getWebsite($this->getRequest()->getParam('website'))->getStoreIds();\n        } elseif ($this->getRequest()->getParam('group')) {\n            $storeIds = $this->_storeManager->getGroup($this->getRequest()->getParam('group'))->getStoreIds();\n        } elseif ($this->getRequest()->getParam('store')) {\n            $storeIds = [(int)$this->getRequest()->getParam('store')];\n        } else {\n            $storeIds = [];\n        }\n        $this->setStoreIds($storeIds);\n        $currencyCode = $this->getCurrentCurrencyCode();\n\n        $this->addColumn(\n            'subtotal',\n            [\n                'header' => __('Subtotal'),\n                'type' => 'currency',\n                'currency_code' => $currencyCode,\n                'index' => 'subtotal',\n                'sortable' => false,\n                'renderer' => \\Magento\\Reports\\Block\\Adminhtml\\Grid\\Column\\Renderer\\Currency::class,\n                'rate' => $this->getRate($currencyCode),\n                'header_css_class' => 'col-subtotal',\n                'column_css_class' => 'col-subtotal'\n            ]\n        );\n\n        $this->addColumn(\n            'coupon_code',\n            [\n                'header' => __('Applied Coupon'),\n                'index' => 'coupon_code',\n                'sortable' => false,\n                'header_css_class' => 'col-coupon',\n                'column_css_class' => 'col-coupon'\n            ]\n        );\n\n        $this->addColumn(\n            'created_at',\n            [\n                'header' => __('Created'),\n                'type' => 'datetime',\n                'index' => 'created_at',\n                'filter_index' => 'main_table.created_at',\n                'sortable' => false,\n                'header_css_class' => 'col-created',\n                'column_css_class' => 'col-created'\n            ]\n        );\n\n        $this->addColumn(\n            'updated_at',\n            [\n                'header' => __('Updated'),\n                'type' => 'datetime',\n                'index' => 'updated_at',\n                'filter_index' => 'main_table.updated_at',\n                'sortable' => false,\n                'header_css_class' => 'col-updated',\n                'column_css_class' => 'col-updated'\n            ]\n        );\n\n        $this->addColumn(\n            'remote_ip',\n            [\n                'header' => __('IP Address'),\n                'index' => 'remote_ip',\n                'sortable' => false,\n                'header_css_class' => 'col-ip',\n                'column_css_class' => 'col-ip'\n            ]\n        );\n\n        $this->addExportType('*\/*\/exportAbandonedCsv', __('CSV'));\n        $this->addExportType('*\/*\/exportAbandonedExcel', __('Excel XML'));\n\n        return parent::_prepareColumns();\n    }\n\n    \/**\n     * Get rows url\n     *\n     * @param \\Magento\\Framework\\DataObject $row\n     *\n     * @return string\n     *\/\n    public function getRowUrl($row)\n    {\n        return $this->getUrl('customer\/index\/edit', ['id' => $row->getCustomerId(), 'active_tab' => 'cart']);\n    }\n}<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Create&nbsp;<em><strong>Company.php<\/strong><\/em>&nbsp;at&nbsp;<strong>app\\code\\Vendor\\Module\\Block\\Adminhtml\\Grid\\Column\\Renderer<\/strong> and add below code<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;?php\n\nnamespace Vendor\\Module\\Block\\Adminhtml\\Grid\\Column\\Renderer;\n\nuse Magento\\Backend\\Block\\Context;\nuse Magento\\Customer\\Model\\CustomerFactory;\nuse Magento\\Framework\\DataObject;\n\nclass Company extends \\Magento\\Backend\\Block\\Widget\\Grid\\Column\\Renderer\\AbstractRenderer\n{\n    protected $customerFactory;\n\n    public function __construct(Context $context, array $data = array(),CustomerFactory $customerFactory) {\n        $this->customerFactory = $customerFactory;\n        parent::__construct($context, $data);\n    }\n\n    public function render(DataObject $row)\n    {\n        $customerFactory = $this->customerFactory->create();\n\n        $customerId = $row->getcustomer_id();\n\n        $customer = $customerFactory->load($customerId);\n\n        $Addresses = $customer->getAddresses();\n\n        foreach ($Addresses as $address){\n            return $address->getData('company');\n        }\n\n    }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, if you\u2019ll check, the abandoned carts report in Magento 2 will have the company column added:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/meetanshi.com\/blog\/wp-content\/uploads\/2020\/09\/add-company-column-in-abandoned-carts-report-in-Magento-2.png\" alt=\"add company column in abandoned carts report in Magento 2\" class=\"wp-image-10428\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Also, do share the solution with the Magento community via social media.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thanks.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The default\u00a0Magento 2\u00a0offers an\u00a0abandoned carts report\u00a0that lists all registered customers who have abandoned carts which is yet to be expired. The abandoned carts report grid&#8230;<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[34],"tags":[],"class_list":["post-1234","post","type-post","status-publish","format-standard","hentry","category-magento"],"acf":[],"_links":{"self":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts\/1234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/comments?post=1234"}],"version-history":[{"count":5,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts\/1234\/revisions"}],"predecessor-version":[{"id":14683,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/posts\/1234\/revisions\/14683"}],"wp:attachment":[{"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/media?parent=1234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/categories?post=1234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meetanshi.com\/blog\/wp-json\/wp\/v2\/tags?post=1234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}