Skip to content

Commit 3345513

Browse files
authored
Merge pull request #140 from Oscar-Wagento/WAGZEN-55-Oscar
[A] Adding process schedulized of syncronization
2 parents 0bdc4f8 + 259f2dd commit 3345513

File tree

4 files changed

+174
-0
lines changed

4 files changed

+174
-0
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
3+
class Zendesk_Zendesk_Helper_Sync extends Mage_Core_Helper_Abstract {
4+
5+
public function getCustomerData($customer){
6+
if(!Mage::getStoreConfig('zendesk/general/customer_sync'))
7+
return;
8+
9+
$user = null;
10+
$email = $customer->getEmail();
11+
$origEmail = $customer->getOrigData();
12+
$origEmail = $origEmail['email'];
13+
//Get Customer Group
14+
$groupId = $customer->getGroupId();
15+
$group = Mage::getModel('customer/group')->load($groupId);
16+
17+
//Get Customer Last Login Date
18+
$logCustomer = Mage::getModel('log/customer')->loadByCustomer($customer);
19+
if ($logCustomer->getLoginAt())
20+
$loggedIn = date("Y-m-d\TH:i:s\Z",strtotime($logCustomer->getLoginAt()));
21+
else
22+
$loggedIn = "";
23+
24+
//Get Customer Sales Statistics
25+
$orderTotals = Mage::getResourceModel('sales/order_collection');
26+
$lifetimeSale = 0;
27+
$averageSale = 0;
28+
29+
if (is_object($orderTotals)) {
30+
$orderTotals
31+
->addFieldToFilter('customer_id', $customer->getId())
32+
->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE);
33+
34+
$orderTotals->getSelect()
35+
->reset(Zend_Db_Select::COLUMNS)
36+
->columns(new Zend_Db_Expr("SUM(grand_total) as total"))
37+
->columns(new Zend_Db_Expr("AVG(grand_total) as avg_total"))
38+
->group('customer_id');
39+
40+
if (count($orderTotals) > 0) {
41+
$sum = (float) $orderTotals->getFirstItem()->getTotal();
42+
$avg = (float) $orderTotals->getFirstItem()->getAvgTotal();
43+
44+
$lifetimeSale = Mage::helper('core')->currency($sum, true, false);
45+
$averageSale = Mage::helper('core')->currency($avg, true, false);
46+
}
47+
}
48+
49+
$info['user'] = array(
50+
"name" => $customer->getFirstname() . " " . $customer->getLastname(),
51+
"email" => $email,
52+
"user_fields" => array(
53+
"group" => $group->getCode(),
54+
"name" => $customer->getFirstname() . " " . $customer->getLastname(),
55+
"id" => $customer->getId(),
56+
"logged_in" => $loggedIn,
57+
"average_sale" => $averageSale,
58+
"lifetime_sale" => $lifetimeSale
59+
)
60+
);
61+
62+
if($origEmail && $origEmail !== $email) {
63+
$user = Mage::getModel('zendesk/api_users')->find($origEmail);
64+
65+
if(isset($user['id'])) {
66+
$data['identity'] = array(
67+
'type' => 'email',
68+
'value' => $email,
69+
'verified' => true
70+
);
71+
$identity = Mage::getModel('zendesk/api_users')->addIdentity($user['id'],$data);
72+
if(isset($identity['id'])) {
73+
Mage::getModel('zendesk/api_users')->setPrimaryIdentity($user['id'], $identity['id']);
74+
}
75+
}
76+
}
77+
if(!$user) {
78+
$user = Mage::getModel('zendesk/api_users')->find($email);
79+
}
80+
81+
if(isset($user['id'])) {
82+
$this->syncData($info);
83+
} else {
84+
$info['user']['verified'] = true;
85+
$user = Mage::getModel('zendesk/api_users')->create($info);
86+
}
87+
return $user;
88+
}
89+
90+
private function syncData($info)
91+
{
92+
Mage::getModel('zendesk/api_users')->create($info);
93+
}
94+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
class Zendesk_Zendesk_Model_Customer extends Mage_Core_Model_Abstract{
4+
5+
public function syncronize(){
6+
Mage::log('Cron Working', null, 'cron.log', true);
7+
$customers = Mage::getModel('customer/customer')
8+
->getCollection()->setPageSize(90)->setCurPage(1);
9+
$customers->addAttributeToSelect(array('firstname', 'lastname', 'email'))
10+
->addAttributeToFilter('zendesk_id', array('or'=> array(
11+
0 => array('is' => new Zend_Db_Expr('null')))
12+
), 'left');
13+
foreach($customers as $customer){
14+
Mage::log('Synchronization started', null, 'zendesk.log');
15+
try {
16+
Mage::log('Synchronizing customer with id '.$customer->getId(), null, 'zendesk.log');
17+
$customerData = Mage::helper('zendesk/sync')->getCustomerData($customer);
18+
$zendeskId = $customerData['id'];
19+
$customer->setZendeskId($zendeskId);
20+
$customer->save();
21+
}
22+
catch (Exception $ex) {
23+
Mage::log('Synchronization failed: '.$ex->getMessage(), null, 'zendesk.log');
24+
25+
return;
26+
}
27+
Mage::log('Synchronization completed successfully', null, 'zendesk.log');
28+
29+
30+
}
31+
}
32+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
4+
$installer->startSetup();
5+
$installer->addAttribute("customer", "zendesk_id", array(
6+
"type" => "varchar",
7+
"backend" => "",
8+
"label" => "Zendesk Id",
9+
"input" => "text",
10+
"source" => "",
11+
"visible" => true,
12+
"required" => false,
13+
"default" => "",
14+
"frontend" => "",
15+
"unique" => false,
16+
"note" => ""
17+
18+
));
19+
20+
$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "zendesk_id");
21+
$used_in_forms=array();
22+
23+
$used_in_forms[]="adminhtml_customer";
24+
$used_in_forms[]="checkout_register";
25+
$used_in_forms[]="customer_account_create";
26+
$used_in_forms[]="customer_account_edit";
27+
$used_in_forms[]="adminhtml_checkout";
28+
$attribute->setData("used_in_forms", $used_in_forms)
29+
->setData("is_used_for_customer_segment", true)
30+
->setData("is_system", 0)
31+
->setData("is_user_defined", 1)
32+
->setData("is_visible", 1)
33+
->setData("sort_order", 100);
34+
$attribute->save();
35+
$installer->endSetup();

src/app/code/community/Zendesk/Zendesk/etc/config.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,19 @@
108108
</customer_login>
109109
</events>
110110
</frontend>
111+
<crontab>
112+
<jobs>
113+
<zendesk_customer_sync>
114+
<schedule>
115+
<cron_expr>*/13 * * * * </cron_expr>
116+
</schedule>
117+
118+
<run>
119+
<model>zendesk/customer::syncronize</model>
120+
</run>
121+
</zendesk_customer_sync>
122+
</jobs>
123+
</crontab>
111124
<admin>
112125
<routers>
113126
<adminhtml>

0 commit comments

Comments
 (0)