DigitalPianism_Abandonedcarts - Version 0.1.12

Version Notes

- Bug Fixes

Download this release

Release Info

Developer Digital Pianism
Extension DigitalPianism_Abandonedcarts
Version 0.1.12
Comparing to
See all releases


Code changes from version 0.1.11 to 0.1.12

app/code/community/DigitalPianism/Abandonedcarts/Helper/Data.php CHANGED
@@ -21,7 +21,7 @@ class DigitalPianism_Abandonedcarts_Helper_Data extends Mage_Core_Helper_Abstrac
21
  */
22
  public function isEnabled()
23
  {
24
- return Mage::getStoreConfig('abandonedcartsconfig/options/enable');
25
  }
26
 
27
  /**
@@ -29,7 +29,7 @@ class DigitalPianism_Abandonedcarts_Helper_Data extends Mage_Core_Helper_Abstrac
29
  */
30
  public function isSaleEnabled()
31
  {
32
- return Mage::getStoreConfig('abandonedcartsconfig/options/enable_sale');
33
  }
34
 
35
  /**
@@ -37,7 +37,7 @@ class DigitalPianism_Abandonedcarts_Helper_Data extends Mage_Core_Helper_Abstrac
37
  */
38
  public function getDryRun()
39
  {
40
- return Mage::getStoreConfig('abandonedcartsconfig/options/dryrun');
41
  }
42
 
43
  /**
21
  */
22
  public function isEnabled()
23
  {
24
+ return Mage::getStoreConfigFlag('abandonedcartsconfig/options/enable');
25
  }
26
 
27
  /**
29
  */
30
  public function isSaleEnabled()
31
  {
32
+ return Mage::getStoreConfigFlag('abandonedcartsconfig/options/enable_sale');
33
  }
34
 
35
  /**
37
  */
38
  public function getDryRun()
39
  {
40
+ return Mage::getStoreConfigFlag('abandonedcartsconfig/options/dryrun');
41
  }
42
 
43
  /**
app/code/community/DigitalPianism/Abandonedcarts/Model/Observer.php CHANGED
@@ -232,7 +232,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
232
  // Save only if dryrun is false or if the test email is set and found
233
  if (!$dryrun || (isset($testemail) && $email == $testemail))
234
  {
235
- $quote->save();
236
  }
237
  }
238
  }
@@ -305,7 +305,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
305
  // Save only if dryrun is false or if the test email is set and found
306
  if (!$dryrun || (isset($testemail) && $email == $testemail))
307
  {
308
- $quote->save();
309
  }
310
  }
311
  }
@@ -357,6 +357,13 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
357
  ->reset(Zend_Db_Select::COLUMNS)
358
  ->columns(array('e.entity_id AS product_id',
359
  'e.sku',
 
 
 
 
 
 
 
360
  'catalog_flat.name as product_name',
361
  'catalog_flat.price as product_price',
362
  'catalog_flat.special_price as product_special_price',
@@ -383,6 +390,43 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
383
  array('catalog_flat' => Mage::getSingleton("core/resource")->getTableName('catalog_product_flat_'.$storeId)),
384
  'catalog_flat.entity_id = e.entity_id',
385
  null)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
386
  ->joinInner(
387
  array('catalog_enabled' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_int')),
388
  'catalog_enabled.entity_id = e.entity_id AND catalog_enabled.attribute_id = '.$statusId.' AND catalog_enabled.value = 1',
@@ -474,6 +518,10 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
474
  ->reset(Zend_Db_Select::COLUMNS)
475
  ->columns(array('e.entity_id AS product_id',
476
  'e.sku',
 
 
 
 
477
  'catalog_flat.name as product_name',
478
  'catalog_flat.price as product_price',
479
  'quote_table.entity_id as cart_id',
@@ -496,6 +544,22 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
496
  array('catalog_flat' => Mage::getSingleton("core/resource")->getTableName('catalog_product_flat_'.$storeId)),
497
  'catalog_flat.entity_id = e.entity_id',
498
  null)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  ->joinInner(
500
  array('catalog_enabled' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_int')),
501
  'catalog_enabled.entity_id = e.entity_id AND catalog_enabled.attribute_id = '.$statusId.' AND catalog_enabled.value = 1',
232
  // Save only if dryrun is false or if the test email is set and found
233
  if (!$dryrun || (isset($testemail) && $email == $testemail))
234
  {
235
+ $quote->getResource()->saveAttribute($quote,array('abandoned_sale_notified'));
236
  }
237
  }
238
  }
305
  // Save only if dryrun is false or if the test email is set and found
306
  if (!$dryrun || (isset($testemail) && $email == $testemail))
307
  {
308
+ $quote->getResource()->saveAttribute($quote,array('abandoned_notified'));
309
  }
310
  }
311
  }
357
  ->reset(Zend_Db_Select::COLUMNS)
358
  ->columns(array('e.entity_id AS product_id',
359
  'e.sku',
360
+ /* Code if catalog flat is disabled
361
+ 'catalog_name.value as product_name',
362
+ 'catalog_price.value as product_price',
363
+ 'catalog_special_price.value as product_special_price',
364
+ 'catalog_special_from.value as product_special_from_date',
365
+ 'catalog_special_to.value as product_special_to_date',
366
+ */
367
  'catalog_flat.name as product_name',
368
  'catalog_flat.price as product_price',
369
  'catalog_flat.special_price as product_special_price',
390
  array('catalog_flat' => Mage::getSingleton("core/resource")->getTableName('catalog_product_flat_'.$storeId)),
391
  'catalog_flat.entity_id = e.entity_id',
392
  null)
393
+ /* Code if catalog flat is disabled
394
+ // Product Name
395
+ ->joinInner(
396
+ array('catalog_name' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_varchar')),
397
+ 'catalog_name.entity_id = e.entity_id
398
+ AND attribute_id = (SELECT attribute_id FROM eav_attribute LEFT JOIN "eav_entity_type" ON eav_attribute.entity_type_id = eav_entity_type.entity_type_id WHERE eav_attribute.attribute_code = "name" AND eav_entity_type.entity_type_code = "catalog_product")
399
+ AND catalog_name.store_id = '.$storeId,
400
+ null)
401
+ // Product Price
402
+ ->joinInner(
403
+ array('catalog_price' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_decimal')),
404
+ 'catalog_price.entity_id = e.entity_id
405
+ AND attribute_id = (SELECT attribute_id FROM eav_attribute LEFT JOIN "eav_entity_type" ON eav_attribute.entity_type_id = eav_entity_type.entity_type_id WHERE eav_attribute.attribute_code = "price" AND eav_entity_type.entity_type_code = "catalog_product")
406
+ AND catalog_price.store_id = '.$storeId,
407
+ null)
408
+ // Product Special Price
409
+ ->joinInner(
410
+ array('catalog_special_price' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_decimal')),
411
+ 'catalog_special_price.entity_id = e.entity_id
412
+ AND attribute_id = (SELECT attribute_id FROM eav_attribute LEFT JOIN "eav_entity_type" ON eav_attribute.entity_type_id = eav_entity_type.entity_type_id WHERE eav_attribute.attribute_code = "special_price" AND eav_entity_type.entity_type_code = "catalog_product")
413
+ AND catalog_special_price.store_id = '.$storeId,
414
+ null)
415
+ // Product Special Price From
416
+ ->joinInner(
417
+ array('catalog_special_from' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_datetime')),
418
+ 'catalog_special_from.entity_id = e.entity_id
419
+ AND attribute_id = (SELECT attribute_id FROM eav_attribute LEFT JOIN "eav_entity_type" ON eav_attribute.entity_type_id = eav_entity_type.entity_type_id WHERE eav_attribute.attribute_code = "special_from" AND eav_entity_type.entity_type_code = "catalog_product")
420
+ AND catalog_special_from.store_id = '.$storeId,
421
+ null)
422
+ // Product Special Price To
423
+ ->joinInner(
424
+ array('catalog_special_to' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_datetime')),
425
+ 'catalog_special_to.entity_id = e.entity_id
426
+ AND attribute_id = (SELECT attribute_id FROM eav_attribute LEFT JOIN "eav_entity_type" ON eav_attribute.entity_type_id = eav_entity_type.entity_type_id WHERE eav_attribute.attribute_code = "special_to" AND eav_entity_type.entity_type_code = "catalog_product")
427
+ AND catalog_special_to.store_id = '.$storeId,
428
+ null)
429
+ */
430
  ->joinInner(
431
  array('catalog_enabled' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_int')),
432
  'catalog_enabled.entity_id = e.entity_id AND catalog_enabled.attribute_id = '.$statusId.' AND catalog_enabled.value = 1',
518
  ->reset(Zend_Db_Select::COLUMNS)
519
  ->columns(array('e.entity_id AS product_id',
520
  'e.sku',
521
+ /* Code if catalog flat is disabled
522
+ 'catalog_name.value as product_name',
523
+ 'catalog_price.value as product_price',
524
+ */
525
  'catalog_flat.name as product_name',
526
  'catalog_flat.price as product_price',
527
  'quote_table.entity_id as cart_id',
544
  array('catalog_flat' => Mage::getSingleton("core/resource")->getTableName('catalog_product_flat_'.$storeId)),
545
  'catalog_flat.entity_id = e.entity_id',
546
  null)
547
+ /* Code if catalog flat is disabled
548
+ // Product Name
549
+ ->joinInner(
550
+ array('catalog_name' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_varchar')),
551
+ 'catalog_name.entity_id = e.entity_id
552
+ AND attribute_id = (SELECT attribute_id FROM eav_attribute LEFT JOIN "eav_entity_type" ON eav_attribute.entity_type_id = eav_entity_type.entity_type_id WHERE eav_attribute.attribute_code = "name" AND eav_entity_type.entity_type_code = "catalog_product")
553
+ AND catalog_name.store_id = '.$storeId,
554
+ null)
555
+ // Product Price
556
+ ->joinInner(
557
+ array('catalog_price' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_decimal')),
558
+ 'catalog_price.entity_id = e.entity_id
559
+ AND attribute_id = (SELECT attribute_id FROM eav_attribute LEFT JOIN "eav_entity_type" ON eav_attribute.entity_type_id = eav_entity_type.entity_type_id WHERE eav_attribute.attribute_code = "price" AND eav_entity_type.entity_type_code = "catalog_product")
560
+ AND catalog_price.store_id = '.$storeId,
561
+ null)
562
+ */
563
  ->joinInner(
564
  array('catalog_enabled' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_int')),
565
  'catalog_enabled.entity_id = e.entity_id AND catalog_enabled.attribute_id = '.$statusId.' AND catalog_enabled.value = 1',
app/code/community/DigitalPianism/Abandonedcarts/Model/Sales/Resource/Quote.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class DigitalPianism_Abandonedcarts_Model_Sales_Resource_Quote extends Mage_Sales_Model_Resource_Quote
4
+ {
5
+ /**
6
+ * Save attribute to model
7
+ *
8
+ * @param $model - the model
9
+ * @param $attributes - array of attributes to get and save from model
10
+ * @return $this
11
+ * @throws Exception
12
+ */
13
+ public function saveAttribute($model, $attributes)
14
+ {
15
+ try {
16
+ $adapter = $this->_getWriteAdapter();
17
+ $adapter->beginTransaction();
18
+ $condition = $this->_getWriteAdapter()->quoteInto($this->getIdFieldName() . '=?', $model->getId());
19
+ $data = array();
20
+ foreach ($attributes as $attribute) {
21
+ $value = $model->getData($attribute);
22
+ if (isset($value)) {
23
+ $data[$attribute] = $value;
24
+ }
25
+ }
26
+ if (!empty($data)) {
27
+ $this->_getWriteAdapter()->update($this->getMainTable(), $data, $condition);
28
+ }
29
+ $adapter->commit();
30
+ } catch (Exception $e) {
31
+ $adapter->rollBack();
32
+ throw $e;
33
+ }
34
+ return $this;
35
+ }
36
+ }
app/code/community/DigitalPianism/Abandonedcarts/etc/config.xml CHANGED
@@ -4,7 +4,7 @@
4
 
5
  <modules>
6
  <DigitalPianism_Abandonedcarts>
7
- <version>0.1.10</version>
8
  </DigitalPianism_Abandonedcarts>
9
  </modules>
10
 
@@ -65,20 +65,26 @@
65
  <abandonedcarts>
66
  <class>DigitalPianism_Abandonedcarts_Model</class>
67
  </abandonedcarts>
 
 
 
 
 
 
68
  </models>
69
 
70
  <template>
71
  <email>
72
- <sales_abandonedcarts_email_template translate="label" module="abandonedcarts">
73
  <label>Abandoned Cart Template</label>
74
- <file>digitalpianism/sales_abandonedcarts.html</file>
75
  <type>html</type>
76
- </sales_abandonedcarts_email_template>
77
- <sales_abandonedcarts_email_template_sale translate="label" module="abandonedcarts">
78
  <label>Abandoned Cart Sale Template</label>
79
- <file>digitalpianism/sales_abandonedcarts_sale.html</file>
80
  <type>html</type>
81
- </sales_abandonedcarts_email_template_sale>
82
  </email>
83
  </template>
84
 
@@ -120,11 +126,16 @@
120
  </crontab>
121
 
122
  <default>
123
- <sales>
124
- <abandonedcarts>
125
- <notify_delay>20</notify_delay>
126
- </abandonedcarts>
127
- </sales>
 
 
 
 
 
128
  </default>
129
 
130
  </config>
4
 
5
  <modules>
6
  <DigitalPianism_Abandonedcarts>
7
+ <version>0.1.12</version>
8
  </DigitalPianism_Abandonedcarts>
9
  </modules>
10
 
65
  <abandonedcarts>
66
  <class>DigitalPianism_Abandonedcarts_Model</class>
67
  </abandonedcarts>
68
+ <sales_resource>
69
+ <rewrite>
70
+ <!-- Mage_Sales_Model_Resource_Quote -->
71
+ <quote>DigitalPianism_Abandonedcarts_Model_Sales_Resource_Quote</quote>
72
+ </rewrite>
73
+ </sales_resource>
74
  </models>
75
 
76
  <template>
77
  <email>
78
+ <abandonedcartsconfig_options_email_template translate="label" module="abandonedcarts">
79
  <label>Abandoned Cart Template</label>
80
+ <file>digitalpianism/abandonedcarts/sales_abandonedcarts.html</file>
81
  <type>html</type>
82
+ </abandonedcartsconfig_options_email_template>
83
+ <abandonedcartsconfig_options_email_template_sale translate="label" module="abandonedcarts">
84
  <label>Abandoned Cart Sale Template</label>
85
+ <file>digitalpianism/abandonedcarts/sales_abandonedcarts_sale.html</file>
86
  <type>html</type>
87
+ </abandonedcartsconfig_options_email_template_sale>
88
  </email>
89
  </template>
90
 
126
  </crontab>
127
 
128
  <default>
129
+ <abandonedcartsconfig>
130
+ <options>
131
+ <enable>0</enable>
132
+ <enable_sale>0</enable_sale>
133
+ <dryrun>0</dryrun>
134
+ <notify_delay>20</notify_delay>
135
+ <email_template>abandonedcartsconfig_options_email_template</email_template>
136
+ <email_template_sale>abandonedcartsconfig_options_email_template_sale</email_template_sale>
137
+ </options>
138
+ </abandonedcartsconfig>
139
  </default>
140
 
141
  </config>
app/locale/en_US/{DigitalPianism_AbandonedCarts.csv → DigitalPianism_Abandonedcarts.csv} RENAMED
File without changes
app/locale/en_US/template/email/digitalpianism/{sales_abandonedcarts.html → abandonedcarts/sales_abandonedcarts.html} RENAMED
File without changes
app/locale/en_US/template/email/digitalpianism/{sales_abandonedcarts_sale.html → abandonedcarts/sales_abandonedcarts_sale.html} RENAMED
File without changes
package.xml CHANGED
@@ -1,20 +1,108 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>DigitalPianism_Abandonedcarts</name>
4
- <version>0.1.11</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
- <summary>Allows administrators to notice customers with abandoned carts.</summary>
10
- <description>This extension allows store managers to automatically notice customers with abandoned carts after a customizable number of days via email.&#xD;
11
  &#xD;
12
- Another email can also be sent if one of the abandoned products goes on sale.</description>
13
- <notes>- Fix default configuration values.</notes>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  <authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
15
- <date>2014-12-30</date>
16
- <time>10:52:51</time>
17
- <contents><target name="magecommunity"><dir name="DigitalPianism"><dir name="Abandonedcarts"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Button.php" hash="d5a6f33d47d067fc09a7b7fe8eacd287"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="4eda7b865d023206a58a4178f7db81a5"/></dir><dir name="Model"><file name="Observer.php" hash="49baa4ce3a82b6b70c63dcce1c8a5e21"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="AbandonedcartsController.php" hash="ca68e31a5e41f036451a409a7eeaaa16"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="8ddca513c0ed7e034c476f3e026ceda8"/><file name="config.xml" hash="17ea6d587df418c1210db8278ee16b16"/><file name="system.xml" hash="793efac0feb3c123a1c8869b21f302f1"/></dir><dir name="sql"><dir name="abandonedcarts_setup"><file name="install-0.0.1.php" hash="851338e4a710b5d94fead688b065f4b5"/><file name="upgrade-0.0.1-0.0.2.php" hash="0227c009e49b97bcf3f34f84c49f0927"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="DigitalPianism_Abandonedcarts.xml" hash="8a7657855486c68d548db4ba48e083d2"/></dir></target><target name="magelocale"><dir name="en_US"><file name="DigitalPianism_AbandonedCarts.csv" hash="4e17b6cae58dd1cdcd43b1113e2e09f4"/><dir name="template"><dir name="email"><dir name="digitalpianism"><file name="sales_abandonedcarts.html" hash="30565f91c47913465fd184a214c14b23"/><file name="sales_abandonedcarts_sale.html" hash="3cdee557727cb0166741062e5fdcf06f"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="digitalpianism"><dir name="abandonedcarts"><dir name="system"><dir name="config"><file name="button.phtml" hash="8f7e673ea52cd81b616cac01b1022990"/></dir></dir></dir></dir></dir></dir></dir></dir></target></contents>
18
  <compatible/>
19
  <dependencies><required><php><min>4.1.0</min><max>6.0.0</max></php></required></dependencies>
20
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>DigitalPianism_Abandonedcarts</name>
4
+ <version>0.1.12</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
+ <summary>Adds the possibility to notify customers with abandoned carts.</summary>
10
+ <description>&lt;h2&gt;Overview&lt;/h2&gt;&#xD;
11
  &#xD;
12
+ This module includes two functionalities:&#xD;
13
+ &lt;ul&gt;&#xD;
14
+ &lt;li&gt;The first one is an automatic email notification for customers who abandoned their carts after a customizable number of days&lt;/li&gt;&#xD;
15
+ &lt;li&gt;The second one is an automatic email notification when products which are in an abandoned cart go on sale&lt;/li&gt;&#xD;
16
+ &lt;/ul&gt;&#xD;
17
+ &#xD;
18
+ &lt;p&gt;With this extension, you can increase your sales with follow-up emails in order to bring back customers who did not checkout the first time they added products to their bag.&lt;/p&gt;&#xD;
19
+ &#xD;
20
+ &lt;p&gt;Here is an example of the first functionality's email:&lt;/p&gt;&#xD;
21
+ &#xD;
22
+ &lt;p&gt;&#xD;
23
+ Dear John,&lt;br&gt;&#xD;
24
+ You have abandoned a Apple iPad 8GB and 2 more products in your cart.&lt;br&gt;&#xD;
25
+ &#xD;
26
+ Follow this link and log in to finalize your purchase: http://www.mystore.com/&#xD;
27
+ &lt;/p&gt;&#xD;
28
+ &lt;p&gt;Here is an example of the second functionality's email:&lt;/p&gt;&#xD;
29
+ &lt;p&gt;&#xD;
30
+ Dear John,&lt;br&gt;&#xD;
31
+ You have abandoned a Apple iPad 8GB in your cart.&lt;br&gt;&#xD;
32
+ &#xD;
33
+ It was 200&#x20AC; and now is 150&#x20AC;.&lt;br&gt;&#xD;
34
+ &#xD;
35
+ Purchase the 2 other sale products in your cart and save 85&#x20AC; on your order.&lt;br&gt;&#xD;
36
+ &#xD;
37
+ Follow this link and log in to finalize your purchase with the new special price: http://www.mystore.com/&#xD;
38
+ &lt;/p&gt;&#xD;
39
+ &#xD;
40
+ &lt;h2&gt;Configuration&lt;/h2&gt;&#xD;
41
+ &#xD;
42
+ &lt;p&gt;For this module to work properly, you need to enable Flat Catalog Product under System &amp;gt; Configuration &amp;gt; Catalog &amp;gt; Catalog.&lt;/p&gt;&#xD;
43
+ &#xD;
44
+ &lt;h3&gt;Emails Design&lt;/h3&gt;&#xD;
45
+ &#xD;
46
+ &lt;ol&gt;&#xD;
47
+ &lt;li&gt;In the backend, access System &amp;gt; Transactional Emails&lt;/li&gt;&#xD;
48
+ &lt;li&gt;Click on the "Add New Template" button&lt;/li&gt;&#xD;
49
+ &lt;li&gt;Under the "Load Default Template" section, choose "Abandoned Cart Template" for Template and "English (United States)" for Locale&lt;/li&gt;&#xD;
50
+ &lt;li&gt;Click the "Load Template" button and design your "Abandoned Cart" email to match with your store emails.&lt;/li&gt;&#xD;
51
+ &lt;li&gt;Repeat step 1 - 4 choosing "Abandoned Cart Sale Template" in step 3 to design the "Abandoned Cart Sale" email.&lt;/li&gt;&#xD;
52
+ &lt;/ol&gt;&#xD;
53
+ &#xD;
54
+ &lt;h3&gt;Module Configuration&lt;/h3&gt;&#xD;
55
+ &#xD;
56
+ Access the module configuration under System &amp;gt; Configuration &amp;gt; Digital Pianism &amp;gt; Abandoned Carts Emails.&#xD;
57
+ &#xD;
58
+ &lt;ul&gt;&#xD;
59
+ &lt;li&gt;Enable Abandoned Carts Notification: setting this option to Yes will enabled the email notification for customers who abandoned their carts.&lt;/li&gt;&#xD;
60
+ &lt;li&gt;Sender Name: here you can provide the sender name of the notification email&lt;/li&gt;&#xD;
61
+ &lt;li&gt;Sender Email: here you can provide the sender email of the notification email&lt;/li&gt;&#xD;
62
+ &lt;li&gt;Email Template for Unaltered Abandoned Carts: here you have to choose the email template you created previously for the "Abandoned Carts" email.&lt;/li&gt;&#xD;
63
+ &lt;li&gt;Send Abandoned Cart Email After: in days, this is the delay before the email is sent. For example, if you provide 7 in this field, the abandoned cart notification email will be sent 7 days after the customer abandoned its cart.&lt;/li&gt;&#xD;
64
+ &lt;li&gt;Enable Sale Abandoned Carts Notification: setting this option to Yes will enabled the email notification for customers who have abandoned carts with sale products.&lt;/li&gt;&#xD;
65
+ &lt;li&gt;Email Template for Abandoned Carts Sale: here you have to choose the email template you created previously for the "Abandoned Carts Sale" email.&lt;/li&gt;&#xD;
66
+ &lt;li&gt;Dry Run: setting this parameter to yes will log the emails supposed to be sent in the /var/log/digitalpianism_abandonedcarts.log file and will not send the email notifications.&lt;/li&gt;&#xD;
67
+ &lt;li&gt;Test email: only works with dry run, providing a test email can be used with the send button to only send notifications to the customer with this email address. Useful for testing purposes&lt;/li&gt;&#xD;
68
+ &lt;li&gt;Send button: clicking this button will manually send the abandoned carts email notifications regardless the delay you provided. This can be use with dry run set to Yes to test the extension&lt;/li&gt;&#xD;
69
+ &lt;/ul&gt;&#xD;
70
+ &#xD;
71
+ &lt;p&gt;N.B.: for log files to be created and updated, you must enable the logs under System &amp;gt; Configuration &amp;gt; Advanced &amp;gt; Developer &amp;gt; Log Settings &amp;gt; Enable = Yes&lt;/p&gt;&#xD;
72
+ &#xD;
73
+ &lt;p&gt;N.B. 2: Please note that abandoning carts without being logged in will result in no email being sent for this abandoned cart because there is no way we can retrieve not logged in customer's email.&lt;/p&gt;&#xD;
74
+ &#xD;
75
+ Save the configuration.&#xD;
76
+ &#xD;
77
+ &lt;p&gt;The emails are sent everyday at midnight via a cron job.&lt;/p&gt;&#xD;
78
+ &#xD;
79
+ &lt;h3&gt;Email Variables&lt;/h3&gt;&#xD;
80
+ &#xD;
81
+ &lt;p&gt;The following variables are being used in the email templates that come with the extension.&lt;/p&gt;&#xD;
82
+ &lt;p&gt;For the abandoned carts email:&lt;/p&gt;&#xD;
83
+ &lt;ul&gt;&#xD;
84
+ &lt;li&gt;{{var firstname}} : first name of the customer&lt;/li&gt;&#xD;
85
+ &lt;li&gt;{{var productname}}: name of the first product in the abandoned cart&lt;/li&gt;&#xD;
86
+ &lt;li&gt;{{var extraproductcount}}: number of extra products in the abandoned cart&lt;/li&gt;&#xD;
87
+ &lt;/ul&gt;&#xD;
88
+ &lt;p&gt;For the abandoned carts for sale products email:&lt;/p&gt;&#xD;
89
+ &lt;ul&gt;&#xD;
90
+ &lt;li&gt;{{var firstname}} : first name of the customer&lt;/li&gt;&#xD;
91
+ &lt;li&gt;{{var productname}}: name of the first product in the abandoned cart&lt;/li&gt;&#xD;
92
+ &lt;li&gt;{{var cartprice}}: original price of the first product on sale in the abandoned cart.&lt;/li&gt;&#xD;
93
+ &lt;li&gt;{{var specialprice}}: sale price of the first product on sale in the abandoned cart.&lt;/li&gt;&#xD;
94
+ &lt;li&gt;{{var discount}}: possible discount if the whole abandoned cart is purchased.&lt;/li&gt;&#xD;
95
+ &lt;/ul&gt;&#xD;
96
+ &#xD;
97
+ &lt;h3&gt;Manually Send The Notifications&lt;/h3&gt;&#xD;
98
+ &#xD;
99
+ &lt;p&gt;To manually trigger the notification system, please access System &amp;gt; Configuration &amp;gt; Digital Pianism &amp;gt; Abandoned carts email and click on the "Send" button&lt;/p&gt;&#xD;
100
+ &lt;p&gt;Please note that this functionality will send abandoned carts notification regardless the delay you provided, all possible abandoned carts emails will be sent.&lt;/p&gt;</description>
101
+ <notes>- Bug Fixes</notes>
102
  <authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
103
+ <date>2015-07-06</date>
104
+ <time>15:29:01</time>
105
+ <contents><target name="magecommunity"><dir name="DigitalPianism"><dir name="Abandonedcarts"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Button.php" hash="d5a6f33d47d067fc09a7b7fe8eacd287"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="1a32f521774d20636c9861850fd32594"/></dir><dir name="Model"><file name="Observer.php" hash="90b9b844ccb8fd93873b034d7a1ed60a"/><dir name="Sales"><dir name="Resource"><file name="Quote.php" hash="3b2f9f24a74a6ea3b6851d64bd6ae5ba"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="AbandonedcartsController.php" hash="ca68e31a5e41f036451a409a7eeaaa16"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="8ddca513c0ed7e034c476f3e026ceda8"/><file name="config.xml" hash="48765d9eaca0c0dd56b9187c437ab347"/><file name="system.xml" hash="793efac0feb3c123a1c8869b21f302f1"/></dir><dir name="sql"><dir name="abandonedcarts_setup"><file name="install-0.0.1.php" hash="851338e4a710b5d94fead688b065f4b5"/><file name="upgrade-0.0.1-0.0.2.php" hash="0227c009e49b97bcf3f34f84c49f0927"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="DigitalPianism_Abandonedcarts.xml" hash="8a7657855486c68d548db4ba48e083d2"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="digitalpianism"><dir name="abandonedcarts"><dir name="system"><dir name="config"><file name="button.phtml" hash="8f7e673ea52cd81b616cac01b1022990"/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="digitalpianism"><dir name="abandonedcarts"><file name="sales_abandonedcarts.html" hash="30565f91c47913465fd184a214c14b23"/><file name="sales_abandonedcarts_sale.html" hash="3cdee557727cb0166741062e5fdcf06f"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="4e17b6cae58dd1cdcd43b1113e2e09f4"/></dir></target></contents>
106
  <compatible/>
107
  <dependencies><required><php><min>4.1.0</min><max>6.0.0</max></php></required></dependencies>
108
  </package>