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 +3 -3
- app/code/community/DigitalPianism/Abandonedcarts/Model/Observer.php +66 -2
- app/code/community/DigitalPianism/Abandonedcarts/Model/Sales/Resource/Quote.php +36 -0
- app/code/community/DigitalPianism/Abandonedcarts/etc/config.xml +23 -12
- app/locale/en_US/{DigitalPianism_AbandonedCarts.csv → DigitalPianism_Abandonedcarts.csv} +0 -0
- app/locale/en_US/template/email/digitalpianism/{sales_abandonedcarts.html → abandonedcarts/sales_abandonedcarts.html} +0 -0
- app/locale/en_US/template/email/digitalpianism/{sales_abandonedcarts_sale.html → abandonedcarts/sales_abandonedcarts_sale.html} +0 -0
- package.xml +96 -8
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::
|
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::
|
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::
|
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->
|
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->
|
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.
|
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 |
-
<
|
73 |
<label>Abandoned Cart Template</label>
|
74 |
-
<file>digitalpianism/sales_abandonedcarts.html</file>
|
75 |
<type>html</type>
|
76 |
-
</
|
77 |
-
<
|
78 |
<label>Abandoned Cart Sale Template</label>
|
79 |
-
<file>digitalpianism/sales_abandonedcarts_sale.html</file>
|
80 |
<type>html</type>
|
81 |
-
</
|
82 |
</email>
|
83 |
</template>
|
84 |
|
@@ -120,11 +126,16 @@
|
|
120 |
</crontab>
|
121 |
|
122 |
<default>
|
123 |
-
<
|
124 |
-
<
|
125 |
-
<
|
126 |
-
|
127 |
-
|
|
|
|
|
|
|
|
|
|
|
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.
|
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>
|
10 |
-
<description
|
11 |

|
12 |
-
|
13 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
<authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
|
15 |
-
<date>
|
16 |
-
<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="
|
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><h2>Overview</h2>
|
11 |

|
12 |
+
This module includes two functionalities:
|
13 |
+
<ul>
|
14 |
+
<li>The first one is an automatic email notification for customers who abandoned their carts after a customizable number of days</li>
|
15 |
+
<li>The second one is an automatic email notification when products which are in an abandoned cart go on sale</li>
|
16 |
+
</ul>
|
17 |
+

|
18 |
+
<p>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.</p>
|
19 |
+

|
20 |
+
<p>Here is an example of the first functionality's email:</p>
|
21 |
+

|
22 |
+
<p>
|
23 |
+
Dear John,<br>
|
24 |
+
You have abandoned a Apple iPad 8GB and 2 more products in your cart.<br>
|
25 |
+

|
26 |
+
Follow this link and log in to finalize your purchase: http://www.mystore.com/
|
27 |
+
</p>
|
28 |
+
<p>Here is an example of the second functionality's email:</p>
|
29 |
+
<p>
|
30 |
+
Dear John,<br>
|
31 |
+
You have abandoned a Apple iPad 8GB in your cart.<br>
|
32 |
+

|
33 |
+
It was 200€ and now is 150€.<br>
|
34 |
+

|
35 |
+
Purchase the 2 other sale products in your cart and save 85€ on your order.<br>
|
36 |
+

|
37 |
+
Follow this link and log in to finalize your purchase with the new special price: http://www.mystore.com/
|
38 |
+
</p>
|
39 |
+

|
40 |
+
<h2>Configuration</h2>
|
41 |
+

|
42 |
+
<p>For this module to work properly, you need to enable Flat Catalog Product under System &gt; Configuration &gt; Catalog &gt; Catalog.</p>
|
43 |
+

|
44 |
+
<h3>Emails Design</h3>
|
45 |
+

|
46 |
+
<ol>
|
47 |
+
<li>In the backend, access System &gt; Transactional Emails</li>
|
48 |
+
<li>Click on the "Add New Template" button</li>
|
49 |
+
<li>Under the "Load Default Template" section, choose "Abandoned Cart Template" for Template and "English (United States)" for Locale</li>
|
50 |
+
<li>Click the "Load Template" button and design your "Abandoned Cart" email to match with your store emails.</li>
|
51 |
+
<li>Repeat step 1 - 4 choosing "Abandoned Cart Sale Template" in step 3 to design the "Abandoned Cart Sale" email.</li>
|
52 |
+
</ol>
|
53 |
+

|
54 |
+
<h3>Module Configuration</h3>
|
55 |
+

|
56 |
+
Access the module configuration under System &gt; Configuration &gt; Digital Pianism &gt; Abandoned Carts Emails.
|
57 |
+

|
58 |
+
<ul>
|
59 |
+
<li>Enable Abandoned Carts Notification: setting this option to Yes will enabled the email notification for customers who abandoned their carts.</li>
|
60 |
+
<li>Sender Name: here you can provide the sender name of the notification email</li>
|
61 |
+
<li>Sender Email: here you can provide the sender email of the notification email</li>
|
62 |
+
<li>Email Template for Unaltered Abandoned Carts: here you have to choose the email template you created previously for the "Abandoned Carts" email.</li>
|
63 |
+
<li>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.</li>
|
64 |
+
<li>Enable Sale Abandoned Carts Notification: setting this option to Yes will enabled the email notification for customers who have abandoned carts with sale products.</li>
|
65 |
+
<li>Email Template for Abandoned Carts Sale: here you have to choose the email template you created previously for the "Abandoned Carts Sale" email.</li>
|
66 |
+
<li>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.</li>
|
67 |
+
<li>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</li>
|
68 |
+
<li>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</li>
|
69 |
+
</ul>
|
70 |
+

|
71 |
+
<p>N.B.: for log files to be created and updated, you must enable the logs under System &gt; Configuration &gt; Advanced &gt; Developer &gt; Log Settings &gt; Enable = Yes</p>
|
72 |
+

|
73 |
+
<p>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.</p>
|
74 |
+

|
75 |
+
Save the configuration.
|
76 |
+

|
77 |
+
<p>The emails are sent everyday at midnight via a cron job.</p>
|
78 |
+

|
79 |
+
<h3>Email Variables</h3>
|
80 |
+

|
81 |
+
<p>The following variables are being used in the email templates that come with the extension.</p>
|
82 |
+
<p>For the abandoned carts email:</p>
|
83 |
+
<ul>
|
84 |
+
<li>{{var firstname}} : first name of the customer</li>
|
85 |
+
<li>{{var productname}}: name of the first product in the abandoned cart</li>
|
86 |
+
<li>{{var extraproductcount}}: number of extra products in the abandoned cart</li>
|
87 |
+
</ul>
|
88 |
+
<p>For the abandoned carts for sale products email:</p>
|
89 |
+
<ul>
|
90 |
+
<li>{{var firstname}} : first name of the customer</li>
|
91 |
+
<li>{{var productname}}: name of the first product in the abandoned cart</li>
|
92 |
+
<li>{{var cartprice}}: original price of the first product on sale in the abandoned cart.</li>
|
93 |
+
<li>{{var specialprice}}: sale price of the first product on sale in the abandoned cart.</li>
|
94 |
+
<li>{{var discount}}: possible discount if the whole abandoned cart is purchased.</li>
|
95 |
+
</ul>
|
96 |
+

|
97 |
+
<h3>Manually Send The Notifications</h3>
|
98 |
+

|
99 |
+
<p>To manually trigger the notification system, please access System &gt; Configuration &gt; Digital Pianism &gt; Abandoned carts email and click on the "Send" button</p>
|
100 |
+
<p>Please note that this functionality will send abandoned carts notification regardless the delay you provided, all possible abandoned carts emails will be sent.</p></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>
|