From 72c3b085d6e9f0966dbf63478c7ad2eb480c2a10 Mon Sep 17 00:00:00 2001 From: Oscar Wagento Date: Tue, 29 May 2018 10:46:00 -0400 Subject: [PATCH 1/4] [A] Adding process schedulized of syncronization --- .../community/Zendesk/Zendesk/Helper/Sync.php | 100 ++++++++++++++++++ .../Zendesk/Zendesk/Model/Customer.php | 39 +++++++ .../community/Zendesk/Zendesk/etc/config.xml | 13 +++ 3 files changed, 152 insertions(+) create mode 100644 src/app/code/community/Zendesk/Zendesk/Helper/Sync.php create mode 100644 src/app/code/community/Zendesk/Zendesk/Model/Customer.php diff --git a/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php new file mode 100644 index 00000000..384c0b68 --- /dev/null +++ b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php @@ -0,0 +1,100 @@ +getCustomer(); + $email = $customer->getEmail(); + $orig_email = $customer->getOrigData(); + $orig_email = $orig_email['email']; + echo "correo: ".$email; + //Get Customer Group + $group_id = $customer->getGroupId(); + $group = Mage::getModel('customer/group')->load($group_id); + + //Get Customer Last Login Date + $log_customer = Mage::getModel('log/customer')->loadByCustomer($customer); + if ($log_customer->getLoginAt()) + $logged_in = date("Y-m-d\TH:i:s\Z",strtotime($log_customer->getLoginAt())); + else + $logged_in = ""; + + //Get Customer Sales Statistics + $order_totals = Mage::getResourceModel('sales/order_collection'); + $lifetime_sale = 0; + $average_sale = 0; + + if (is_object($order_totals)) { + $order_totals + ->addFieldToFilter('customer_id', $customer->getId()) + ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE); + + $order_totals->getSelect() + ->reset(Zend_Db_Select::COLUMNS) + ->columns(new Zend_Db_Expr("SUM(grand_total) as total")) + ->columns(new Zend_Db_Expr("AVG(grand_total) as avg_total")) + ->group('customer_id'); + + if (count($order_totals) > 0) { + $sum = (float) $order_totals->getFirstItem()->getTotal(); + $avg = (float) $order_totals->getFirstItem()->getAvgTotal(); + + $lifetime_sale = Mage::helper('core')->currency($sum, true, false); + $average_sale = Mage::helper('core')->currency($avg, true, false); + } + } + + $info['user'] = array( + "name" => $customer->getFirstname() . " " . $customer->getLastname(), + "email" => $email, + "user_fields" => array( + "group" => $group->getCode(), + "name" => $customer->getFirstname() . " " . $customer->getLastname(), + "id" => $customer->getId(), + "logged_in" => $logged_in, + "average_sale" => $average_sale, + "lifetime_sale" => $lifetime_sale + ) + ); + + if($orig_email && $orig_email !== $email) { + $user = Mage::getModel('zendesk/api_users')->find($orig_email); + + if(isset($user['id'])) { + $data['identity'] = array( + 'type' => 'email', + 'value' => $email, + 'verified' => true + ); + $identity = Mage::getModel('zendesk/api_users')->addIdentity($user['id'],$data); + if(isset($identity['id'])) { + Mage::getModel('zendesk/api_users')->setPrimaryIdentity($user['id'], $identity['id']); + } + } + } + if(!$user) { + $user = Mage::getModel('zendesk/api_users')->find($email); + } + + if(isset($user['id'])) { + $this->syncData($info); + } else { + $info['user']['verified'] = true; + $user = Mage::getModel('zendesk/api_users')->create($info); + } + return $user; + } + public function syncData($info) + { + Mage::getModel('zendesk/api_users')->create($info); + } +} \ No newline at end of file diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Customer.php b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php new file mode 100644 index 00000000..dba4a04d --- /dev/null +++ b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php @@ -0,0 +1,39 @@ +getCollection()->setPageSize(90)->setCurPage(1); + $customers->addAttributeToSelect(array('firstname', 'lastname', 'email')) + ->addAttributeToFilter('zendesk_id', array('or'=> array( + 0 => array('is' => new Zend_Db_Expr('null'))) + ), 'left'); + foreach($customers as $customer){ + Mage::log('Synchronization started', null, 'zendesk.log'); + try { + Mage::log('Synchronizing customer with id '.$customer->getId(), null, 'zendesk.log'); + $customer_data = Mage::helper('zendesk/sync')->getCustomerData($customer); + $zendesk_id = $customer_data['id']; + $customer->setZendeskId($zendesk_id); + $customer->save(); + //Zend_Debug::dump($customer_data); + } + catch (Exception $ex) { + Mage::log('Synchronization failed: '.$ex->getMessage(), null, 'zendesk.log'); + + return; + } + Mage::log('Synchronization completed successfully', null, 'zendesk.log'); + + + } + } +} \ No newline at end of file diff --git a/src/app/code/community/Zendesk/Zendesk/etc/config.xml b/src/app/code/community/Zendesk/Zendesk/etc/config.xml index 4c9046e3..dc149d13 100644 --- a/src/app/code/community/Zendesk/Zendesk/etc/config.xml +++ b/src/app/code/community/Zendesk/Zendesk/etc/config.xml @@ -108,6 +108,19 @@ + + + + + */13 * * * * + + + + zendesk/customer::syncronize + + + + From c38e17c85f7250579371aabd94c75c78cbaf404b Mon Sep 17 00:00:00 2001 From: Oscar Wagento Date: Thu, 7 Jun 2018 16:39:25 -0400 Subject: [PATCH 2/4] Removing code commented, blocks commented, camelCode to some variables --- .../community/Zendesk/Zendesk/Helper/Sync.php | 61 ++++++++----------- .../Zendesk/Zendesk/Model/Customer.php | 13 +--- .../data-upgrade-2.0.6-2.1.13.php | 53 ++++++++++++++++ 3 files changed, 83 insertions(+), 44 deletions(-) create mode 100644 src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php diff --git a/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php index 384c0b68..9e4ad5c7 100644 --- a/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php +++ b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php @@ -1,10 +1,5 @@ getCustomer(); $email = $customer->getEmail(); - $orig_email = $customer->getOrigData(); - $orig_email = $orig_email['email']; - echo "correo: ".$email; + $origEmail = $customer->getOrigData(); + $origEmail = $origEmail['email']; //Get Customer Group - $group_id = $customer->getGroupId(); - $group = Mage::getModel('customer/group')->load($group_id); + $groupId = $customer->getGroupId(); + $group = Mage::getModel('customer/group')->load($groupId); //Get Customer Last Login Date - $log_customer = Mage::getModel('log/customer')->loadByCustomer($customer); - if ($log_customer->getLoginAt()) - $logged_in = date("Y-m-d\TH:i:s\Z",strtotime($log_customer->getLoginAt())); + $logCustomer = Mage::getModel('log/customer')->loadByCustomer($customer); + if ($logCustomer->getLoginAt()) + $loggedIn = date("Y-m-d\TH:i:s\Z",strtotime($logCustomer->getLoginAt())); else - $logged_in = ""; + $loggedIn = ""; //Get Customer Sales Statistics - $order_totals = Mage::getResourceModel('sales/order_collection'); - $lifetime_sale = 0; - $average_sale = 0; + $orderTotals = Mage::getResourceModel('sales/order_collection'); + $lifetimeSale = 0; + $averageSale = 0; - if (is_object($order_totals)) { - $order_totals + if (is_object($orderTotals)) { + $orderTotals ->addFieldToFilter('customer_id', $customer->getId()) ->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE); - $order_totals->getSelect() + $orderTotals->getSelect() ->reset(Zend_Db_Select::COLUMNS) ->columns(new Zend_Db_Expr("SUM(grand_total) as total")) ->columns(new Zend_Db_Expr("AVG(grand_total) as avg_total")) ->group('customer_id'); - if (count($order_totals) > 0) { - $sum = (float) $order_totals->getFirstItem()->getTotal(); - $avg = (float) $order_totals->getFirstItem()->getAvgTotal(); + if (count($orderTotals) > 0) { + $sum = (float) $orderTotals->getFirstItem()->getTotal(); + $avg = (float) $orderTotals->getFirstItem()->getAvgTotal(); - $lifetime_sale = Mage::helper('core')->currency($sum, true, false); - $average_sale = Mage::helper('core')->currency($avg, true, false); + $lifetimeSale = Mage::helper('core')->currency($sum, true, false); + $averageSale = Mage::helper('core')->currency($avg, true, false); } } @@ -60,14 +53,14 @@ public function getCustomerData($customer){ "group" => $group->getCode(), "name" => $customer->getFirstname() . " " . $customer->getLastname(), "id" => $customer->getId(), - "logged_in" => $logged_in, - "average_sale" => $average_sale, - "lifetime_sale" => $lifetime_sale + "logged_in" => $loggedIn, + "average_sale" => $averageSale, + "lifetime_sale" => $lifetimeSale ) ); - if($orig_email && $orig_email !== $email) { - $user = Mage::getModel('zendesk/api_users')->find($orig_email); + if($origEmail && $origEmail !== $email) { + $user = Mage::getModel('zendesk/api_users')->find($origEmail); if(isset($user['id'])) { $data['identity'] = array( @@ -93,8 +86,8 @@ public function getCustomerData($customer){ } return $user; } - public function syncData($info) + private function syncData($info) { Mage::getModel('zendesk/api_users')->create($info); } -} \ No newline at end of file +} diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Customer.php b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php index dba4a04d..b7b502c8 100644 --- a/src/app/code/community/Zendesk/Zendesk/Model/Customer.php +++ b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php @@ -1,10 +1,4 @@ getId(), null, 'zendesk.log'); - $customer_data = Mage::helper('zendesk/sync')->getCustomerData($customer); - $zendesk_id = $customer_data['id']; - $customer->setZendeskId($zendesk_id); + $customerData = Mage::helper('zendesk/sync')->getCustomerData($customer); + $zendeskId = $customerData['id']; + $customer->setZendeskId($zendeskId); $customer->save(); - //Zend_Debug::dump($customer_data); } catch (Exception $ex) { Mage::log('Synchronization failed: '.$ex->getMessage(), null, 'zendesk.log'); diff --git a/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php new file mode 100644 index 00000000..b7ffafe8 --- /dev/null +++ b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php @@ -0,0 +1,53 @@ +startSetup(); +$installer->addAttribute('customer', 'zendesk_id', array( + 'group' => 'General', + 'label' => 'Zendesk Id', + 'input' => 'text', + 'type' => 'text', + 'required' => 0, + 'visible_on_front'=> 1, + 'filterable' => 0, + 'searchable' => 0, + 'comparable' => 0, + 'user_defined' => 1, + 'is_configurable' => 0, + 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, + 'note' => '', +)); +$installer->endSetup();*/ + +$installer = new Mage_Eav_Model_Entity_Setup('core_setup'); +$installer->startSetup(); +$installer->addAttribute("customer", "zendesk_id", array( + "type" => "varchar", + "backend" => "", + "label" => "zendesk_id", + "input" => "text", + "source" => "", + "visible" => true, + "required" => false, + "default" => "", + "frontend" => "", + "unique" => false, + "note" => "" + +)); + +$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "zendesk_id"); +$used_in_forms=array(); + +$used_in_forms[]="adminhtml_customer"; +$used_in_forms[]="checkout_register"; +$used_in_forms[]="customer_account_create"; +$used_in_forms[]="customer_account_edit"; +$used_in_forms[]="adminhtml_checkout"; +$attribute->setData("used_in_forms", $used_in_forms) + ->setData("is_used_for_customer_segment", true) + ->setData("is_system", 0) + ->setData("is_user_defined", 1) + ->setData("is_visible", 1) + ->setData("sort_order", 100); +$attribute->save(); +$installer->endSetup(); From 4180b6bd9d880312392712e1d2d32bb5ab775306 Mon Sep 17 00:00:00 2001 From: Oscar Wagento Date: Thu, 7 Jun 2018 16:46:12 -0400 Subject: [PATCH 3/4] [M] Change of label attribute for customer --- .../Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php index b7ffafe8..991b7395 100644 --- a/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php +++ b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php @@ -23,7 +23,7 @@ $installer->addAttribute("customer", "zendesk_id", array( "type" => "varchar", "backend" => "", - "label" => "zendesk_id", + "label" => "Zendesk Id", "input" => "text", "source" => "", "visible" => true, From 259f2dd9629a392ab0fe0d4ff32b31aeede52fcc Mon Sep 17 00:00:00 2001 From: Oscar Wagento Date: Mon, 11 Jun 2018 17:10:04 -0400 Subject: [PATCH 4/4] [M] Code review and fixing spaces --- .../community/Zendesk/Zendesk/Helper/Sync.php | 1 + .../Zendesk/Zendesk/Model/Customer.php | 2 +- .../data-upgrade-2.0.6-2.1.13.php | 18 ------------------ 3 files changed, 2 insertions(+), 19 deletions(-) diff --git a/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php index 9e4ad5c7..0de0e14a 100644 --- a/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php +++ b/src/app/code/community/Zendesk/Zendesk/Helper/Sync.php @@ -86,6 +86,7 @@ public function getCustomerData($customer){ } return $user; } + private function syncData($info) { Mage::getModel('zendesk/api_users')->create($info); diff --git a/src/app/code/community/Zendesk/Zendesk/Model/Customer.php b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php index b7b502c8..c60705b6 100644 --- a/src/app/code/community/Zendesk/Zendesk/Model/Customer.php +++ b/src/app/code/community/Zendesk/Zendesk/Model/Customer.php @@ -29,4 +29,4 @@ public function syncronize(){ } } -} \ No newline at end of file +} diff --git a/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php index 991b7395..c151cfd5 100644 --- a/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php +++ b/src/app/code/community/Zendesk/Zendesk/data/zendesk_setup/data-upgrade-2.0.6-2.1.13.php @@ -1,22 +1,4 @@ startSetup(); -$installer->addAttribute('customer', 'zendesk_id', array( - 'group' => 'General', - 'label' => 'Zendesk Id', - 'input' => 'text', - 'type' => 'text', - 'required' => 0, - 'visible_on_front'=> 1, - 'filterable' => 0, - 'searchable' => 0, - 'comparable' => 0, - 'user_defined' => 1, - 'is_configurable' => 0, - 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL, - 'note' => '', -)); -$installer->endSetup();*/ $installer = new Mage_Eav_Model_Entity_Setup('core_setup'); $installer->startSetup();