Skip to content

Commit 72c3b08

Browse files
committed
[A] Adding process schedulized of syncronization
1 parent 0bdc4f8 commit 72c3b08

File tree

3 files changed

+152
-0
lines changed

3 files changed

+152
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: o5k4r1n
5+
* Date: 29-05-18
6+
* Time: 10:44 AM
7+
*/
8+
class Zendesk_Zendesk_Helper_Sync extends Mage_Core_Helper_Abstract {
9+
10+
public function getCustomerData($customer){
11+
if(!Mage::getStoreConfig('zendesk/general/customer_sync'))
12+
return;
13+
14+
$user = null;
15+
//$customer = $event->getCustomer();
16+
$email = $customer->getEmail();
17+
$orig_email = $customer->getOrigData();
18+
$orig_email = $orig_email['email'];
19+
echo "correo: ".$email;
20+
//Get Customer Group
21+
$group_id = $customer->getGroupId();
22+
$group = Mage::getModel('customer/group')->load($group_id);
23+
24+
//Get Customer Last Login Date
25+
$log_customer = Mage::getModel('log/customer')->loadByCustomer($customer);
26+
if ($log_customer->getLoginAt())
27+
$logged_in = date("Y-m-d\TH:i:s\Z",strtotime($log_customer->getLoginAt()));
28+
else
29+
$logged_in = "";
30+
31+
//Get Customer Sales Statistics
32+
$order_totals = Mage::getResourceModel('sales/order_collection');
33+
$lifetime_sale = 0;
34+
$average_sale = 0;
35+
36+
if (is_object($order_totals)) {
37+
$order_totals
38+
->addFieldToFilter('customer_id', $customer->getId())
39+
->addFieldToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE);
40+
41+
$order_totals->getSelect()
42+
->reset(Zend_Db_Select::COLUMNS)
43+
->columns(new Zend_Db_Expr("SUM(grand_total) as total"))
44+
->columns(new Zend_Db_Expr("AVG(grand_total) as avg_total"))
45+
->group('customer_id');
46+
47+
if (count($order_totals) > 0) {
48+
$sum = (float) $order_totals->getFirstItem()->getTotal();
49+
$avg = (float) $order_totals->getFirstItem()->getAvgTotal();
50+
51+
$lifetime_sale = Mage::helper('core')->currency($sum, true, false);
52+
$average_sale = Mage::helper('core')->currency($avg, true, false);
53+
}
54+
}
55+
56+
$info['user'] = array(
57+
"name" => $customer->getFirstname() . " " . $customer->getLastname(),
58+
"email" => $email,
59+
"user_fields" => array(
60+
"group" => $group->getCode(),
61+
"name" => $customer->getFirstname() . " " . $customer->getLastname(),
62+
"id" => $customer->getId(),
63+
"logged_in" => $logged_in,
64+
"average_sale" => $average_sale,
65+
"lifetime_sale" => $lifetime_sale
66+
)
67+
);
68+
69+
if($orig_email && $orig_email !== $email) {
70+
$user = Mage::getModel('zendesk/api_users')->find($orig_email);
71+
72+
if(isset($user['id'])) {
73+
$data['identity'] = array(
74+
'type' => 'email',
75+
'value' => $email,
76+
'verified' => true
77+
);
78+
$identity = Mage::getModel('zendesk/api_users')->addIdentity($user['id'],$data);
79+
if(isset($identity['id'])) {
80+
Mage::getModel('zendesk/api_users')->setPrimaryIdentity($user['id'], $identity['id']);
81+
}
82+
}
83+
}
84+
if(!$user) {
85+
$user = Mage::getModel('zendesk/api_users')->find($email);
86+
}
87+
88+
if(isset($user['id'])) {
89+
$this->syncData($info);
90+
} else {
91+
$info['user']['verified'] = true;
92+
$user = Mage::getModel('zendesk/api_users')->create($info);
93+
}
94+
return $user;
95+
}
96+
public function syncData($info)
97+
{
98+
Mage::getModel('zendesk/api_users')->create($info);
99+
}
100+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: o5k4r1n
5+
* Date: 25-05-18
6+
* Time: 05:10 PM
7+
*/
8+
9+
class Zendesk_Zendesk_Model_Customer extends Mage_Core_Model_Abstract{
10+
11+
public function syncronize(){
12+
Mage::log('Cron Working', null, 'cron.log', true);
13+
$customers = Mage::getModel('customer/customer')
14+
->getCollection()->setPageSize(90)->setCurPage(1);
15+
$customers->addAttributeToSelect(array('firstname', 'lastname', 'email'))
16+
->addAttributeToFilter('zendesk_id', array('or'=> array(
17+
0 => array('is' => new Zend_Db_Expr('null')))
18+
), 'left');
19+
foreach($customers as $customer){
20+
Mage::log('Synchronization started', null, 'zendesk.log');
21+
try {
22+
Mage::log('Synchronizing customer with id '.$customer->getId(), null, 'zendesk.log');
23+
$customer_data = Mage::helper('zendesk/sync')->getCustomerData($customer);
24+
$zendesk_id = $customer_data['id'];
25+
$customer->setZendeskId($zendesk_id);
26+
$customer->save();
27+
//Zend_Debug::dump($customer_data);
28+
}
29+
catch (Exception $ex) {
30+
Mage::log('Synchronization failed: '.$ex->getMessage(), null, 'zendesk.log');
31+
32+
return;
33+
}
34+
Mage::log('Synchronization completed successfully', null, 'zendesk.log');
35+
36+
37+
}
38+
}
39+
}

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)