I'm struggling with OC 2.0.1.1, adding to admin side just a single Region / State column. I found a free vqmod module for customer cities. It's working perfectly using the City data. I even tried to modify for Region-State but could'nt make it. In my country, we use regions more than cities and I'm stuck here. Any help would be a gold. Here is the vqmod module what I'm trying to modify :
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id><![CDATA[<font color="#000000"><b>Customer Cities in Admin</b></font>]]></id>
<version><![CDATA[1.0<br><b>OC:2.0.3.1</b>]]></version>
<vqmver><![CDATA[2.5.1]]></vqmver>
<author><![CDATA[<font color="#0C9603"><b>aljawaid</font><br><font color="#0C9603"><a href="mailto:aljawaid@hotmail.co.uk">aljawaid@hotmail.co.uk</a></font>]]></author>
<comment><![CDATA[ THIS FILE IS PROVIDED AS-IS WITHOUT ANY WARRANTY OR SUPPORT ]]></comment>
<!-- THIS EXTENSION WILL SHOW THE CUSTOMER'S SAVED CITIES IN THE CUSTOMER LIST - USEFUL IF ONLY DELIVERING TO ONE COUNTRY -->
<!-- THIS EXTENSION IS INSPIRED BY: http://www.opencart.com/index.php?route=extension/extension/info&extension_id=21191 -->
<file name="admin/controller/sale/customer.php">
<operation info="ADD TO CONTROLLER" error="log">
<search position="before"><![CDATA[
'ip' => $result['ip'],
]]></search>
<add><![CDATA[
'city' => $result['city'],
]]></add>
</operation>
</file>
<file name="admin/model/sale/customer.php">
<operation info="ADD TO MODEL" error="log">
<search position="replace"><![CDATA[
$sql = "SELECT *, CONCAT(c.firstname, ' ', c.lastname) AS name, cgd.name AS customer_group FROM " . DB_PREFIX . "customer c LEFT JOIN " . DB_PREFIX . "customer_group_description cgd ON (c.customer_group_id = cgd.customer_group_id) WHERE cgd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
]]></search>
<add><![CDATA[
$sql = "SELECT *, CONCAT(c.firstname, ' ', c.lastname) AS name, cgd.name AS customer_group ,
(
SELECT GROUP_CONCAT(ctty.city,'=',ctty.city)
FROM " . DB_PREFIX . "address addr
LEFT JOIN " . DB_PREFIX . "address ctty
ON (addr.city = ctty.city)
WHERE addr.customer_id = c.customer_id
) as city
FROM " . DB_PREFIX . "customer c
LEFT JOIN " . DB_PREFIX . "customer_group_description cgd
ON (c.customer_group_id = cgd.customer_group_id)
WHERE cgd.language_id = '" . (int)$this->config->get('config_language_id') . "'";
]]></add>
</operation>
</file>
<file name="admin/view/template/sale/customer_list.tpl">
<operation info="ADD COLUMN TITLE" error="log">
<search position="before"><![CDATA[
<td class="text-left"><?php if ($sort == 'customer_group') { ?>
]]></search>
<add><![CDATA[
<td style="font-weight:normal;" class="text-left">Location(s)</td>
]]></add>
</operation>
<!-- IF CUSTOMER HAS MULTIPLE LOCATIONS SAVED IN THEIR ADDRESS BOOK, THEN ALL CITIES WILL BE SHOWN -->
<!-- IF CUSTOMER HAS NO ADDRESS THEN "NO ADDRESS" WILL BE SHOWN -->
<operation info="ADD SAVED CITY FOR EACH CUSTOMER" error="log">
<search position="before"><![CDATA[
<td class="text-left"><?php echo $customer['customer_group']; ?></td>
]]></search>
<add><![CDATA[
<td style="text-align: left;">
<?php
$get_city = explode(',',$customer['city']);
foreach($get_city as $i =>$key) {
//echo $i.' '.$key .'</br>';
$separate = explode('=',$key);
$city_name = $separate[0];
?>
<span><?php if ($city_name) { ?> <i class="fa fa-map-marker" data-toggle="tooltip" data-placement="left" title="Saved in customer's address book"></i>
<?php }
else { ?><span style="font-style:italic; color:red;" data-toggle="tooltip" data-placement="right" title="This customer has not saved any addresses yet">No address</span>
<?php } ?>
<?php echo $city_name; ?></span><br>
<?php } ?>
</td>
]]></add>
</operation>
</file>
</modification>