DigitalPianism_Abandonedcarts - Version 1.0.7

Version Notes

Thanks to Septoctobre for all the bug reports and pull requests

- Fix a bug where the delay would not be taken into consideration when the cron ran: https://github.com/digitalpianism/abandonedcarts/issues/17
- Fix a bug where the area would not be properly loaded: https://github.com/digitalpianism/abandonedcarts/issues/8 and https://github.com/digitalpianism/abandonedcarts/issues/7
- Fix a bug where the count of total would be wrong because of the quantity : https://github.com/digitalpianism/abandonedcarts/issues/13
- Implement prices columns with currencies : https://github.com/digitalpianism/abandonedcarts/issues/13
- Fix a bug where the sale abandoned carts report would display nothing when flat catalog is enabled : https://github.com/digitalpianism/abandonedcarts/issues/15
- Fix a bug where an error would be triggered when filtering the grid by one date (from OR to) : https://github.com/digitalpianism/abandonedcarts/issues/9
- Fix a bug where the count in the grid would be wrong: https://github.com/digitalpianism/abandonedcarts/issues/11

Download this release

Release Info

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


Code changes from version 1.0.5 to 1.0.7

app/code/community/DigitalPianism/Abandonedcarts/Block/Adminhtml/Abandonedcarts/Grid.php CHANGED
@@ -55,7 +55,7 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Abandonedcarts_Grid extends
55
  array(
56
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
57
  'product_names' => 'GROUP_CONCAT(catalog_flat.name)',
58
- 'product_prices' => 'SUM(catalog_flat.price)'
59
  )
60
  );
61
  } else {
@@ -63,7 +63,7 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Abandonedcarts_Grid extends
63
  array(
64
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
65
  'product_names' => 'GROUP_CONCAT(catalog_name.value)',
66
- 'product_prices' => 'SUM(catalog_price.value)'
67
  )
68
  );
69
  }
@@ -75,6 +75,8 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Abandonedcarts_Grid extends
75
 
76
  protected function _prepareColumns()
77
  {
 
 
78
  $this->addColumn('customer_email', array(
79
  'header' => Mage::helper('abandonedcarts')->__('Customer Email'),
80
  'index' => 'customer_email',
@@ -110,6 +112,8 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Abandonedcarts_Grid extends
110
  $this->addColumn('product_prices', array(
111
  'header' => Mage::helper('abandonedcarts')->__('Cart Total'),
112
  'index' => 'product_prices',
 
 
113
  'filter' => false
114
  ));
115
 
@@ -204,7 +208,21 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Abandonedcarts_Grid extends
204
  {
205
  $field = $column->getFilterIndex() ? $column->getFilterIndex() : $column->getIndex();
206
  $value = $column->getFilter()->getValue();
207
- $collection->getSelect()->where("$field > '" . $value['from']->toString('Y-MM-dd HH:mm:ss') . "' AND $field < '" . $value['to']->toString('Y-MM-dd HH:mm:ss') . "'");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  }
209
 
210
  }
55
  array(
56
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
57
  'product_names' => 'GROUP_CONCAT(catalog_flat.name)',
58
+ 'product_prices' => 'SUM(catalog_flat.price * quote_items.qty)'
59
  )
60
  );
61
  } else {
63
  array(
64
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
65
  'product_names' => 'GROUP_CONCAT(catalog_name.value)',
66
+ 'product_prices' => 'SUM(catalog_price.value * quote_items.qty)'
67
  )
68
  );
69
  }
75
 
76
  protected function _prepareColumns()
77
  {
78
+ $currencyCode = $this->_getStore()->getCurrentCurrencyCode();
79
+
80
  $this->addColumn('customer_email', array(
81
  'header' => Mage::helper('abandonedcarts')->__('Customer Email'),
82
  'index' => 'customer_email',
112
  $this->addColumn('product_prices', array(
113
  'header' => Mage::helper('abandonedcarts')->__('Cart Total'),
114
  'index' => 'product_prices',
115
+ 'type' => 'price',
116
+ 'currency_code' => $currencyCode,
117
  'filter' => false
118
  ));
119
 
208
  {
209
  $field = $column->getFilterIndex() ? $column->getFilterIndex() : $column->getIndex();
210
  $value = $column->getFilter()->getValue();
211
+
212
+ $where = false;
213
+
214
+ if (is_array($value) && array_key_exists('from', $value)) {
215
+ $where = sprintf("%s > '%s'", $field, $value['from']->toString('Y-MM-dd HH:mm:ss'));
216
+ if (array_key_exists('to', $value)) {
217
+ $where .= sprintf(" AND %s < '%s'", $field, $value['to']->toString('Y-MM-dd HH:mm:ss'));
218
+ }
219
+ } elseif (is_array($value) && array_key_exists('to', $value)) {
220
+ $where = sprintf("%s < '%s'", $field, $value['to']->toString('Y-MM-dd HH:mm:ss'));
221
+ }
222
+
223
+ if ($where) {
224
+ $collection->getSelect()->where($where);
225
+ }
226
  }
227
 
228
  }
app/code/community/DigitalPianism/Abandonedcarts/Block/Adminhtml/Saleabandonedcarts/Grid.php CHANGED
@@ -53,19 +53,19 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Saleabandonedcarts_Grid exte
53
  array(
54
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
55
  'product_names' => 'GROUP_CONCAT(catalog_flat.name)',
56
- 'product_prices' => 'SUM(quote_items.price)',
57
- 'product_special_prices' => 'SUM(IFNULL(catalog_flat.special_price,quote_items.price))',
58
  )
59
  );
60
 
61
- $collection->getSelect()->having("SUM(quote_items.price) < SUM(IFNULL(catalog_flat.special_price,quote_items.price))");
62
  } else {
63
  $collection->getSelect()->columns(
64
  array(
65
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
66
  'product_names' => 'GROUP_CONCAT(catalog_name.value)',
67
- 'product_prices' => 'SUM(quote_items.price)',
68
- 'product_special_prices' => 'SUM(IFNULL(catalog_sprice.value,quote_items.price))',
69
  )
70
  );
71
 
@@ -78,6 +78,8 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Saleabandonedcarts_Grid exte
78
 
79
  protected function _prepareColumns()
80
  {
 
 
81
  $this->addColumn('customer_email', array(
82
  'header' => Mage::helper('abandonedcarts')->__('Customer Email'),
83
  'index' => 'customer_email',
@@ -113,12 +115,16 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Saleabandonedcarts_Grid exte
113
  $this->addColumn('product_prices', array(
114
  'header' => Mage::helper('abandonedcarts')->__('Cart Regular Total'),
115
  'index' => 'product_prices',
 
 
116
  'filter' => false
117
  ));
118
 
119
  $this->addColumn('product_special_prices', array(
120
  'header' => Mage::helper('abandonedcarts')->__('Cart Sale Total'),
121
  'index' => 'product_special_prices',
 
 
122
  'filter' => false
123
  ));
124
 
@@ -213,6 +219,20 @@ class DigitalPianism_Abandonedcarts_Block_Adminhtml_Saleabandonedcarts_Grid exte
213
  {
214
  $field = $column->getFilterIndex() ? $column->getFilterIndex() : $column->getIndex();
215
  $value = $column->getFilter()->getValue();
216
- $collection->getSelect()->where("$field > '" . $value['from']->toString('Y-MM-dd HH:mm:ss') . "' AND $field < '" . $value['to']->toString('Y-MM-dd HH:mm:ss') . "'");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  }
218
  }
53
  array(
54
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
55
  'product_names' => 'GROUP_CONCAT(catalog_flat.name)',
56
+ 'product_prices' => 'SUM(catalog_flat.price * quote_items.qty)',
57
+ 'product_special_prices' => 'SUM(IFNULL(catalog_flat.special_price,quote_items.price) * quote_items.qty)',
58
  )
59
  );
60
 
61
+ $collection->getSelect()->having("SUM(quote_items.price) > SUM(IFNULL(catalog_flat.special_price,quote_items.price))");
62
  } else {
63
  $collection->getSelect()->columns(
64
  array(
65
  'product_ids' => 'GROUP_CONCAT(e.entity_id)',
66
  'product_names' => 'GROUP_CONCAT(catalog_name.value)',
67
+ 'product_prices' => 'SUM(catalog_price.value * quote_items.qty)',
68
+ 'product_special_prices' => 'SUM(IFNULL(catalog_sprice.value,quote_items.price) * quote_items.qty)',
69
  )
70
  );
71
 
78
 
79
  protected function _prepareColumns()
80
  {
81
+ $currencyCode = $this->_getStore()->getCurrentCurrencyCode();
82
+
83
  $this->addColumn('customer_email', array(
84
  'header' => Mage::helper('abandonedcarts')->__('Customer Email'),
85
  'index' => 'customer_email',
115
  $this->addColumn('product_prices', array(
116
  'header' => Mage::helper('abandonedcarts')->__('Cart Regular Total'),
117
  'index' => 'product_prices',
118
+ 'type' => 'price',
119
+ 'currency_code' => $currencyCode,
120
  'filter' => false
121
  ));
122
 
123
  $this->addColumn('product_special_prices', array(
124
  'header' => Mage::helper('abandonedcarts')->__('Cart Sale Total'),
125
  'index' => 'product_special_prices',
126
+ 'type' => 'price',
127
+ 'currency_code' => $currencyCode,
128
  'filter' => false
129
  ));
130
 
219
  {
220
  $field = $column->getFilterIndex() ? $column->getFilterIndex() : $column->getIndex();
221
  $value = $column->getFilter()->getValue();
222
+
223
+ $where = false;
224
+
225
+ if (is_array($value) && array_key_exists('from', $value)) {
226
+ $where = sprintf("%s > '%s'", $field, $value['from']->toString('Y-MM-dd HH:mm:ss'));
227
+ if (array_key_exists('to', $value)) {
228
+ $where .= sprintf(" AND %s < '%s'", $field, $value['to']->toString('Y-MM-dd HH:mm:ss'));
229
+ }
230
+ } elseif (is_array($value) && array_key_exists('to', $value)) {
231
+ $where = sprintf("%s < '%s'", $field, $value['to']->toString('Y-MM-dd HH:mm:ss'));
232
+ }
233
+
234
+ if ($where) {
235
+ $collection->getSelect()->where($where);
236
+ }
237
  }
238
  }
app/code/community/DigitalPianism/Abandonedcarts/Model/Collection.php CHANGED
@@ -15,7 +15,7 @@ class DigitalPianism_Abandonedcarts_Model_Collection {
15
  public function getCollection($delay, $storeId, $websiteId, $emails = array())
16
  {
17
  // Get the product collection
18
- $collection = Mage::getResourceModel('catalog/product_collection')->setStore($storeId);
19
 
20
  // Get the attribute id for the status attribute
21
  $eavAttribute = Mage::getModel('eav/entity_attribute');
@@ -135,7 +135,7 @@ class DigitalPianism_Abandonedcarts_Model_Collection {
135
  public function getSalesCollection($storeId, $websiteId, $emails = array())
136
  {
137
  // Get the product collection
138
- $collection = Mage::getResourceModel('catalog/product_collection')->setStore($storeId);
139
 
140
  // Get the attribute id for the status attribute
141
  $eavAttribute = Mage::getModel('eav/entity_attribute');
15
  public function getCollection($delay, $storeId, $websiteId, $emails = array())
16
  {
17
  // Get the product collection
18
+ $collection = Mage::getResourceModel('abandonedcarts/catalog_product_collection')->setStore($storeId);
19
 
20
  // Get the attribute id for the status attribute
21
  $eavAttribute = Mage::getModel('eav/entity_attribute');
135
  public function getSalesCollection($storeId, $websiteId, $emails = array())
136
  {
137
  // Get the product collection
138
+ $collection = Mage::getResourceModel('abandonedcarts/catalog_product_collection')->setStore($storeId);
139
 
140
  // Get the attribute id for the status attribute
141
  $eavAttribute = Mage::getModel('eav/entity_attribute');
app/code/community/DigitalPianism/Abandonedcarts/Model/Notifier.php CHANGED
@@ -38,6 +38,11 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
38
  */
39
  protected $_currentStoreId;
40
 
 
 
 
 
 
41
  /**
42
  * @var
43
  */
@@ -273,6 +278,12 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
273
 
274
  // Store Id
275
  Mage::app()->setCurrentStore($recipient['store_id']);
 
 
 
 
 
 
276
  // Get the transactional email template
277
  $templateId = Mage::getStoreConfig('abandonedcartsconfig/email/email_template_sale');
278
  // Get the sender
@@ -360,6 +371,13 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
360
 
361
  // Store ID
362
  Mage::app()->setCurrentStore($recipient['store_id']);
 
 
 
 
 
 
 
363
  // Get the transactional email template
364
  $templateId = Mage::getStoreConfig('abandonedcartsconfig/email/email_template');
365
  // Get the sender
@@ -435,7 +453,7 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
435
  * @param boolean
436
  * @param string
437
  */
438
- public function sendAbandonedCartsSaleEmail($dryrun = false, $testemail = null, $emails = array())
439
  {
440
  if (Mage::helper('abandonedcarts')->getDryRun()) {
441
  $dryrun = true;
@@ -449,6 +467,8 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
449
  $this->_customerGroups = $this->_customerGroups ? $this->_customerGroups : Mage::helper('abandonedcarts')->getCustomerGroupsLimitation();
450
  // Original store id
451
  $this->_originalStoreId = Mage::app()->getStore()->getId();
 
 
452
  try
453
  {
454
  if (Mage::helper('abandonedcarts')->isSaleEnabled()) {
@@ -489,12 +509,14 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
489
  }
490
  $this->_sendSaleEmails($dryrun, $testemail);
491
  }
 
492
  Mage::app()->setCurrentStore($this->_originalStoreId);
493
 
494
  return count($this->_getSaleRecipients());
495
  }
496
  catch (Exception $e)
497
  {
 
498
  Mage::app()->setCurrentStore($this->_originalStoreId);
499
  Mage::helper('abandonedcarts')->log(sprintf("%s->Error: %s", __METHOD__, $e->getMessage()));
500
  return 0;
@@ -508,7 +530,7 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
508
  * @param string $testemail
509
  * @internal param if $boolean dryrun is set to true, it won't send emails and won't alter quotes
510
  */
511
- public function sendAbandonedCartsEmail($nodate = false, $dryrun = false, $testemail = null, $emails = array())
512
  {
513
  if (Mage::helper('abandonedcarts')->getDryRun()) {
514
  $dryrun = true;
@@ -522,6 +544,8 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
522
  $this->_customerGroups = $this->_customerGroups ? $this->_customerGroups : Mage::helper('abandonedcarts')->getCustomerGroupsLimitation();
523
  // Original store id
524
  $this->_originalStoreId = Mage::app()->getStore()->getId();
 
 
525
  try
526
  {
527
  if (Mage::helper('abandonedcarts')->isEnabled()) {
@@ -575,12 +599,14 @@ class DigitalPianism_Abandonedcarts_Model_Notifier extends Mage_Core_Model_Abstr
575
  // Send the emails
576
  $this->_sendEmails($dryrun, $testemail);
577
  }
 
578
  Mage::app()->setCurrentStore($this->_originalStoreId);
579
 
580
  return count($this->_getRecipients());
581
  }
582
  catch (Exception $e)
583
  {
 
584
  Mage::app()->setCurrentStore($this->_originalStoreId);
585
  Mage::helper('abandonedcarts')->log(sprintf("%s->Error: %s", __METHOD__, $e->getMessage()));
586
  return 0;
38
  */
39
  protected $_currentStoreId;
40
 
41
+ /**
42
+ * @var
43
+ */
44
+ protected $_originalArea;
45
+
46
  /**
47
  * @var
48
  */
278
 
279
  // Store Id
280
  Mage::app()->setCurrentStore($recipient['store_id']);
281
+ // Area
282
+ if ($recipient['store_id'] === 0) {
283
+ Mage::getDesign()->setArea('adminhtml');
284
+ } else {
285
+ Mage::getDesign()->setArea('frontend');
286
+ }
287
  // Get the transactional email template
288
  $templateId = Mage::getStoreConfig('abandonedcartsconfig/email/email_template_sale');
289
  // Get the sender
371
 
372
  // Store ID
373
  Mage::app()->setCurrentStore($recipient['store_id']);
374
+ // Area
375
+ if ($recipient['store_id'] === 0) {
376
+ Mage::getDesign()->setArea('adminhtml');
377
+ } else {
378
+ Mage::getDesign()->setArea('frontend');
379
+ }
380
+
381
  // Get the transactional email template
382
  $templateId = Mage::getStoreConfig('abandonedcartsconfig/email/email_template');
383
  // Get the sender
453
  * @param boolean
454
  * @param string
455
  */
456
+ public function sendAbandonedCartsSaleEmail(Mage_Cron_Model_Schedule $schedule = null, $dryrun = false, $testemail = null, $emails = array())
457
  {
458
  if (Mage::helper('abandonedcarts')->getDryRun()) {
459
  $dryrun = true;
467
  $this->_customerGroups = $this->_customerGroups ? $this->_customerGroups : Mage::helper('abandonedcarts')->getCustomerGroupsLimitation();
468
  // Original store id
469
  $this->_originalStoreId = Mage::app()->getStore()->getId();
470
+ // Original area
471
+ $this->_originalArea = Mage::getDesign()->getArea();
472
  try
473
  {
474
  if (Mage::helper('abandonedcarts')->isSaleEnabled()) {
509
  }
510
  $this->_sendSaleEmails($dryrun, $testemail);
511
  }
512
+ Mage::getDesign()->setArea($this->_originalArea);
513
  Mage::app()->setCurrentStore($this->_originalStoreId);
514
 
515
  return count($this->_getSaleRecipients());
516
  }
517
  catch (Exception $e)
518
  {
519
+ Mage::getDesign()->setArea($this->_originalArea);
520
  Mage::app()->setCurrentStore($this->_originalStoreId);
521
  Mage::helper('abandonedcarts')->log(sprintf("%s->Error: %s", __METHOD__, $e->getMessage()));
522
  return 0;
530
  * @param string $testemail
531
  * @internal param if $boolean dryrun is set to true, it won't send emails and won't alter quotes
532
  */
533
+ public function sendAbandonedCartsEmail(Mage_Cron_Model_Schedule $schedule = null, $nodate = false, $dryrun = false, $testemail = null, $emails = array())
534
  {
535
  if (Mage::helper('abandonedcarts')->getDryRun()) {
536
  $dryrun = true;
544
  $this->_customerGroups = $this->_customerGroups ? $this->_customerGroups : Mage::helper('abandonedcarts')->getCustomerGroupsLimitation();
545
  // Original store id
546
  $this->_originalStoreId = Mage::app()->getStore()->getId();
547
+ // Original area
548
+ $this->_originalArea = Mage::getDesign()->getArea();
549
  try
550
  {
551
  if (Mage::helper('abandonedcarts')->isEnabled()) {
599
  // Send the emails
600
  $this->_sendEmails($dryrun, $testemail);
601
  }
602
+ Mage::getDesign()->setArea($this->_originalArea);
603
  Mage::app()->setCurrentStore($this->_originalStoreId);
604
 
605
  return count($this->_getRecipients());
606
  }
607
  catch (Exception $e)
608
  {
609
+ Mage::getDesign()->setArea($this->_originalArea);
610
  Mage::app()->setCurrentStore($this->_originalStoreId);
611
  Mage::helper('abandonedcarts')->log(sprintf("%s->Error: %s", __METHOD__, $e->getMessage()));
612
  return 0;
app/code/community/DigitalPianism/Abandonedcarts/Model/Resource/Catalog/Product/Collection.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class DigitalPianism_Abandonedcarts_Model_Resource_Catalog_Product_Collection
5
+ */
6
+ class DigitalPianism_Abandonedcarts_Model_Resource_Catalog_Product_Collection
7
+ extends Mage_Catalog_Model_Resource_Product_Collection {
8
+
9
+ /**
10
+ * @param null $select
11
+ * @param bool $resetLeftJoins
12
+ * @return Varien_Db_Select
13
+ * @throws Zend_Db_Select_Exception
14
+ */
15
+ protected function _getSelectCountSql($select = null, $resetLeftJoins = true)
16
+ {
17
+ $this->_renderFilters();
18
+ $countSelect = (is_null($select)) ?
19
+ $this->_getClearSelect() :
20
+ $this->_buildClearSelect($select);
21
+
22
+ // Fix the count when group by
23
+ if(count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) {
24
+ $countSelect->reset(Zend_Db_Select::GROUP);
25
+ $countSelect->distinct(true);
26
+ $group = $this->getSelect()->getPart(Zend_Db_Select::GROUP);
27
+ $countSelect->columns("COUNT(DISTINCT ".implode(", ", $group).")");
28
+ } else {
29
+ $countSelect->columns('COUNT(*)');
30
+ }
31
+
32
+ if ($resetLeftJoins) {
33
+ $countSelect->resetJoinLeft();
34
+ }
35
+ return $countSelect;
36
+ }
37
+ }
app/code/community/DigitalPianism/Abandonedcarts/controllers/Adminhtml/AbandonedcartsController.php CHANGED
@@ -96,7 +96,7 @@ class DigitalPianism_Abandonedcarts_Adminhtml_AbandonedcartsController extends M
96
  Mage::getSingleton('adminhtml/session')->addError(Mage::helper('abandonedcarts')->__('Please select email(s)'));
97
  } else {
98
  try {
99
- Mage::getModel('abandonedcarts/notifier')->sendAbandonedCartsSaleEmail(false, false, $emails);
100
  Mage::getSingleton('adminhtml/session')->addSuccess(
101
  Mage::helper('abandonedcarts')->__(
102
  '%sTotal of %d customer(s) were successfully notified', (Mage::helper('abandonedcarts')->getDryRun() ? "!DRY RUN! " : ""), count($emails)
@@ -119,7 +119,7 @@ class DigitalPianism_Abandonedcarts_Adminhtml_AbandonedcartsController extends M
119
  Mage::getSingleton('adminhtml/session')->addError(Mage::helper('abandonedcarts')->__('Please select email(s)'));
120
  } else {
121
  try {
122
- Mage::getModel('abandonedcarts/notifier')->sendAbandonedCartsEmail(false, false, null, $emails);
123
  Mage::getSingleton('adminhtml/session')->addSuccess(
124
  Mage::helper('abandonedcarts')->__(
125
  '%sTotal of %d customer(s) were successfully notified', (Mage::helper('abandonedcarts')->getDryRun() ? "!DRY RUN! " : ""), count($emails)
96
  Mage::getSingleton('adminhtml/session')->addError(Mage::helper('abandonedcarts')->__('Please select email(s)'));
97
  } else {
98
  try {
99
+ Mage::getModel('abandonedcarts/notifier')->sendAbandonedCartsSaleEmail(null, false, false, $emails);
100
  Mage::getSingleton('adminhtml/session')->addSuccess(
101
  Mage::helper('abandonedcarts')->__(
102
  '%sTotal of %d customer(s) were successfully notified', (Mage::helper('abandonedcarts')->getDryRun() ? "!DRY RUN! " : ""), count($emails)
119
  Mage::getSingleton('adminhtml/session')->addError(Mage::helper('abandonedcarts')->__('Please select email(s)'));
120
  } else {
121
  try {
122
+ Mage::getModel('abandonedcarts/notifier')->sendAbandonedCartsEmail(null, false, false, null, $emails);
123
  Mage::getSingleton('adminhtml/session')->addSuccess(
124
  Mage::helper('abandonedcarts')->__(
125
  '%sTotal of %d customer(s) were successfully notified', (Mage::helper('abandonedcarts')->getDryRun() ? "!DRY RUN! " : ""), count($emails)
app/code/community/DigitalPianism/Abandonedcarts/etc/config.xml CHANGED
@@ -4,7 +4,7 @@
4
 
5
  <modules>
6
  <DigitalPianism_Abandonedcarts>
7
- <version>1.0.5</version>
8
  </DigitalPianism_Abandonedcarts>
9
  </modules>
10
 
4
 
5
  <modules>
6
  <DigitalPianism_Abandonedcarts>
7
+ <version>1.0.7</version>
8
  </DigitalPianism_Abandonedcarts>
9
  </modules>
10
 
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>DigitalPianism_Abandonedcarts</name>
4
- <version>1.0.5</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
@@ -95,11 +95,19 @@ Save the configuration.&#xD;
95
  &#xD;
96
  &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;
97
  &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>
98
- <notes>- Fix a bug where the small image would not be picked</notes>
 
 
 
 
 
 
 
 
99
  <authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
100
- <date>2016-11-09</date>
101
- <time>14:39:25</time>
102
- <contents><target name="magecommunity"><dir name="DigitalPianism"><dir name="Abandonedcarts"><dir name="Block"><dir name="Adminhtml"><dir name="Abandonedcarts"><file name="Grid.php" hash="7e68586db67733350fae2cb2231edc8f"/></dir><file name="Abandonedcarts.php" hash="5ed2323b6a2ffd66d0738f8635c660e3"/><dir name="Logs"><file name="Grid.php" hash="05c4ca332a6ad168e28e9a9128252231"/></dir><file name="Logs.php" hash="1173ec175c365fa5c01cbc72a98c0284"/><dir name="Saleabandonedcarts"><file name="Grid.php" hash="808a965b09d2958f6340c8e51c2fe68c"/></dir><file name="Saleabandonedcarts.php" hash="b1195b3697ccc733c61a03cb7d9032b1"/></dir></dir><dir name="Helper"><file name="Data.php" hash="f7d07930e3276bb06e6209293f287dc3"/></dir><dir name="Model"><dir name="Adminhtml"><file name="Observer.php" hash="d54b2bc70a87fca4f0c3bbb519b84c81"/></dir><file name="Collection.php" hash="3e19497dd2cd2170293136f8cff891dc"/><dir name="Link"><file name="Cleaner.php" hash="aced9e659252056b0f4747a78c6154c8"/></dir><file name="Link.php" hash="6f19c7976980e558d98589021d4d294f"/><file name="Log.php" hash="c9ce940c6a14cfa85c401183559661e4"/><file name="Notifier.php" hash="15d7fe69accad715e01c1cb982c6f900"/><dir name="Resource"><dir name="Link"><file name="Collection.php" hash="39ea2cfb265412d82b9fda822af6d324"/></dir><file name="Link.php" hash="49d00b249de30aefc978f4515f6dbdd7"/><dir name="Log"><file name="Collection.php" hash="54abd79af31a1a853bc08eeed75dc7d0"/></dir><file name="Log.php" hash="00edba4d934093236ac78b42f066ba73"/></dir><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="32a56a5033b64320879da37f8b2a88e8"/></dir><file name="IndexController.php" hash="5c06db338a20d3de9b19c3f606edbc9a"/></dir><dir name="data"><dir name="abandonedcarts_setup"><file name="data-upgrade-0.3.6-1.0.0.php" hash="a60f9bccf9e42a458f808bc697320bb0"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="ce393eb00049f28ff92401be828cd613"/><file name="config.xml" hash="6ab879d7ad667ae9c798b4474611c625"/><file name="system.xml" hash="e6a53269f6223eb246c2495600eb307d"/></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"/><file name="upgrade-0.3.6-1.0.0.php" hash="1ac772ef331c8a2278e2c8df77aeb799"/></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"><file name="list.phtml" hash="6af16de73f1b0a3c580e65a95642722f"/></dir></dir></dir><dir name="layout"><dir name="digitalpianism"><file name="abandonedcarts.xml" hash="2f4ec5178aed1c84213605b5212d676e"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="digitalpianism"><dir name="abandonedcarts"><dir name="email"><file name="items.phtml" hash="e1d1990b47b16309e3ea6c09043e15e2"/><file name="sale_items.phtml" hash="47e2298fdedd253a9d9c5e3d1c1c17b7"/></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="a35bd61e1f172b37ac4ed317e1ad44e9"/><file name="sales_abandonedcarts_sale.html" hash="4f437deca852efeacfec0fb3ba929971"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="bd3ed00291684eac5149305ed829a824"/></dir><dir name="fr_FR"><dir name="template"><dir name="email"><dir name="digitalpianism"><dir name="abandonedcarts"><file name="sales_abandonedcarts.html" hash="3ec93757d563ed926090a394577f1dbd"/><file name="sales_abandonedcarts_sale.html" hash="3586968516c8e8374cfa913a3eea7995"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="2a9c63b4d83cb922b3060a4735dabe38"/></dir></target></contents>
103
  <compatible/>
104
  <dependencies><required><php><min>4.1.0</min><max>6.0.0</max></php></required></dependencies>
105
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>DigitalPianism_Abandonedcarts</name>
4
+ <version>1.0.7</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
7
  <channel>community</channel>
95
  &#xD;
96
  &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;
97
  &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>
98
+ <notes>Thanks to Septoctobre for all the bug reports and pull requests&#xD;
99
+ &#xD;
100
+ - Fix a bug where the delay would not be taken into consideration when the cron ran: https://github.com/digitalpianism/abandonedcarts/issues/17&#xD;
101
+ - Fix a bug where the area would not be properly loaded: https://github.com/digitalpianism/abandonedcarts/issues/8 and https://github.com/digitalpianism/abandonedcarts/issues/7&#xD;
102
+ - Fix a bug where the count of total would be wrong because of the quantity : https://github.com/digitalpianism/abandonedcarts/issues/13&#xD;
103
+ - Implement prices columns with currencies : https://github.com/digitalpianism/abandonedcarts/issues/13&#xD;
104
+ - Fix a bug where the sale abandoned carts report would display nothing when flat catalog is enabled : https://github.com/digitalpianism/abandonedcarts/issues/15&#xD;
105
+ - Fix a bug where an error would be triggered when filtering the grid by one date (from OR to) : https://github.com/digitalpianism/abandonedcarts/issues/9&#xD;
106
+ - Fix a bug where the count in the grid would be wrong: https://github.com/digitalpianism/abandonedcarts/issues/11</notes>
107
  <authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
108
+ <date>2016-11-15</date>
109
+ <time>16:40:41</time>
110
+ <contents><target name="magecommunity"><dir name="DigitalPianism"><dir name="Abandonedcarts"><dir name="Block"><dir name="Adminhtml"><dir name="Abandonedcarts"><file name="Grid.php" hash="4cf347fffef45d52df3ae347c12a8ef9"/></dir><file name="Abandonedcarts.php" hash="5ed2323b6a2ffd66d0738f8635c660e3"/><dir name="Logs"><file name="Grid.php" hash="05c4ca332a6ad168e28e9a9128252231"/></dir><file name="Logs.php" hash="1173ec175c365fa5c01cbc72a98c0284"/><dir name="Saleabandonedcarts"><file name="Grid.php" hash="c8b9f1e3133ace386b6789a05c1009b7"/></dir><file name="Saleabandonedcarts.php" hash="b1195b3697ccc733c61a03cb7d9032b1"/></dir></dir><dir name="Helper"><file name="Data.php" hash="f7d07930e3276bb06e6209293f287dc3"/></dir><dir name="Model"><dir name="Adminhtml"><file name="Observer.php" hash="d54b2bc70a87fca4f0c3bbb519b84c81"/></dir><file name="Collection.php" hash="0068f4b5fc85c96b9df915f2a3689418"/><dir name="Link"><file name="Cleaner.php" hash="aced9e659252056b0f4747a78c6154c8"/></dir><file name="Link.php" hash="6f19c7976980e558d98589021d4d294f"/><file name="Log.php" hash="c9ce940c6a14cfa85c401183559661e4"/><file name="Notifier.php" hash="5c3f67887037a8d35913c779288d336b"/><dir name="Resource"><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="a92d4c7cbf1dd7b5ce09384f9addd500"/></dir></dir><dir name="Link"><file name="Collection.php" hash="39ea2cfb265412d82b9fda822af6d324"/></dir><file name="Link.php" hash="49d00b249de30aefc978f4515f6dbdd7"/><dir name="Log"><file name="Collection.php" hash="54abd79af31a1a853bc08eeed75dc7d0"/></dir><file name="Log.php" hash="00edba4d934093236ac78b42f066ba73"/></dir><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="5a15bcda2250a1faf5040ed88927c8ff"/></dir><file name="IndexController.php" hash="5c06db338a20d3de9b19c3f606edbc9a"/></dir><dir name="data"><dir name="abandonedcarts_setup"><file name="data-upgrade-0.3.6-1.0.0.php" hash="a60f9bccf9e42a458f808bc697320bb0"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="ce393eb00049f28ff92401be828cd613"/><file name="config.xml" hash="23f2d48fe85d2e73e39b5a36918e5903"/><file name="system.xml" hash="e6a53269f6223eb246c2495600eb307d"/></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"/><file name="upgrade-0.3.6-1.0.0.php" hash="1ac772ef331c8a2278e2c8df77aeb799"/></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"><file name="list.phtml" hash="6af16de73f1b0a3c580e65a95642722f"/></dir></dir></dir><dir name="layout"><dir name="digitalpianism"><file name="abandonedcarts.xml" hash="2f4ec5178aed1c84213605b5212d676e"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="digitalpianism"><dir name="abandonedcarts"><dir name="email"><file name="items.phtml" hash="e1d1990b47b16309e3ea6c09043e15e2"/><file name="sale_items.phtml" hash="47e2298fdedd253a9d9c5e3d1c1c17b7"/></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="a35bd61e1f172b37ac4ed317e1ad44e9"/><file name="sales_abandonedcarts_sale.html" hash="4f437deca852efeacfec0fb3ba929971"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="bd3ed00291684eac5149305ed829a824"/></dir><dir name="fr_FR"><dir name="template"><dir name="email"><dir name="digitalpianism"><dir name="abandonedcarts"><file name="sales_abandonedcarts.html" hash="3ec93757d563ed926090a394577f1dbd"/><file name="sales_abandonedcarts_sale.html" hash="3586968516c8e8374cfa913a3eea7995"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="2a9c63b4d83cb922b3060a4735dabe38"/></dir></target></contents>
111
  <compatible/>
112
  <dependencies><required><php><min>4.1.0</min><max>6.0.0</max></php></required></dependencies>
113
  </package>