From 91a309af8aa3246b7be77b042b3837f1754345aa Mon Sep 17 00:00:00 2001 From: landofcoder Date: Tue, 23 Nov 2021 10:56:52 +0700 Subject: [PATCH 1/5] test --- Controller/Cart/Loadquote.php | 11 ++++++----- Queue/Processor/AbandonedCartProcessor.php | 11 +++++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Controller/Cart/Loadquote.php b/Controller/Cart/Loadquote.php index b379dfc..1b41b0f 100644 --- a/Controller/Cart/Loadquote.php +++ b/Controller/Cart/Loadquote.php @@ -98,7 +98,7 @@ public function __construct( Publisher $publisher, Contact $mauticContact ) { - + $this->pageFactory = $pageFactory; $this->_quote = $quote; $this->_customerSession = $customerSession; @@ -123,8 +123,9 @@ public function execute() $quote->getResource()->load($quote, $params['id']); $magentoStoreId = $quote->getStoreId(); $configSecretKey = $this->_helper->getConfig(\Lof\Mautic\Helper\Data::MODULE_ABANDONEDCART_TOKEN); + $tokenNew = $configSecretKey ? md5($configSecretKey.$params['id']) : ""; - if (!isset($params['token']) || $params['token'] != $configSecretKey) { + if (!isset($params['token']) || ($tokenNew && $params['token'] != $tokenNew)) { // @error $this->_message->addErrorMessage(__("You can't access this cart")); $url = $this->_urlHelper->getUrl( @@ -158,7 +159,7 @@ public function execute() if ($emailAddress = $quote->getCustomerEmail()) { $this->processUpdateContactTag($emailAddress, $quote->getStoreId()); } - + if (!$quote->getCustomerId()) { $this->_checkoutSession->setQuoteId($quote->getId()); $this->_redirect($url); @@ -185,7 +186,7 @@ public function execute() /** * process update contact tags - * + * * @param string $email * @param int|string|null $storeId * @return bool @@ -208,4 +209,4 @@ protected function processUpdateContactTag($email, $storeId = null) } return true; } -} \ No newline at end of file +} diff --git a/Queue/Processor/AbandonedCartProcessor.php b/Queue/Processor/AbandonedCartProcessor.php index d478753..55c60e1 100644 --- a/Queue/Processor/AbandonedCartProcessor.php +++ b/Queue/Processor/AbandonedCartProcessor.php @@ -77,13 +77,13 @@ public function process() $this->_processAbandoned($storeId); } } - + return; } /** * Process abandoned cart - * + * * @param int $storeId * @return void */ @@ -99,6 +99,9 @@ protected function _processAbandoned($storeId) $this->customergroups = []; } $diff = $this->helperData->getConfig(Data::MODULE_DIFF_DATE, $storeId); + if (!$diff) { //Disable feature when diff date number is empty + return; + } $expr = sprintf('DATE_SUB(now(), %s)', $this->_getIntervalUnitSql($diff, 'DAY')); $from = new \Zend_Db_Expr($expr); @@ -119,7 +122,7 @@ protected function _processAbandoned($storeId) try { foreach ($collection as $quote) { - $tokenNew = $token;//.md5(rand(0, 9999999)); + $tokenNew = md5($token.$quote->getEntityId()); $url = $this->_storeManager->getStore($storeId)->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK) . 'mautic/cart/loadquote?id=' . $quote->getEntityId() . '&token=' . $tokenNew; $customData = [ @@ -142,7 +145,7 @@ protected function _processAbandoned($storeId) } catch (\Exception $e) { //log exception at here } - + return; } From f9fd5e555a47a6304135a76b2415cdbe540f8eba Mon Sep 17 00:00:00 2001 From: landofcoder Date: Tue, 23 Nov 2021 11:14:12 +0700 Subject: [PATCH 2/5] updated readme --- Queue/Processor/AbandonedCartProcessor.php | 3 +++ README.md | 5 +++++ assets/12_abandoned_cart.png | Bin 0 -> 62231 bytes 3 files changed, 8 insertions(+) create mode 100644 assets/12_abandoned_cart.png diff --git a/Queue/Processor/AbandonedCartProcessor.php b/Queue/Processor/AbandonedCartProcessor.php index 55c60e1..5651861 100644 --- a/Queue/Processor/AbandonedCartProcessor.php +++ b/Queue/Processor/AbandonedCartProcessor.php @@ -90,6 +90,9 @@ public function process() protected function _processAbandoned($storeId) { $this->firstdate = $this->helperData->getConfig(Data::MODULE_FIRST_DATE, $storeId); + if (!$this->firstdate) { + $this->firstdate = $this->_getSuggestedZeroDate(); + } $this->customergroups = $this->helperData->getConfig(Data::MODULE_ABANDONED_CUSTOMER_GROUP, $storeId); $token = $this->helperData->getConfig(Data::MODULE_ABANDONEDCART_TOKEN, $storeId); diff --git a/README.md b/README.md index 810e7c9..9d2f05a 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,7 @@ Require setup and config RabbitMQ for Magento 2 [RabbitMQ Configrable Guide](https://blog.landofcoder.com/how-to-set-up-and-configure-rabbitmq-with-magento-2/) + The module support there consummers: ``` @@ -121,6 +122,10 @@ mautic_review_save mautic_subscriber_save ``` +- Abandoned Cart Tags: +![Abandoned Cart Tags Settings](./assets/12_abandoned_cart.png) +the feature will run on each 5 minutes (cron job) find abandoned cart on reports which have last updated date <= Diff date number, and match customer groups (option), and updated date greater than first date (option). If found abandoned cart, it will add mautic contact with tag: AbandonedCart + ## Compatible Modules - [Magento 2 GDPR Compatible](https://github.com/landofcoder/module-magento2-mautic-gdpr) diff --git a/assets/12_abandoned_cart.png b/assets/12_abandoned_cart.png new file mode 100644 index 0000000000000000000000000000000000000000..4118aa50466a5440c439f978e2ffeaf99146c77d GIT binary patch literal 62231 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�o?6e%_zO3= z=mK*c!RKt`iI;8g^eHXJUj~G-#NJhA1BK(2j9l`#`QX2is>Eo}wSy z{oWbxRCO^{wRCu`pTm?moK{R0t#(YfsZFDSXrEzZMCSFNr=$LdDQUK1GRbz=Wq|a> z%^3_1aLs)_W*hHvW~v#7 zS(KqEhnHOX^0Z1n1FpO=Af#ejTfVGVE$hitNoU|kRidtVpsY#h6&yBN*k`SjS2^di zmp&}V;@aRyw4D9BhG$;eiJWG|n2kUKaFjG^G`JO){R9Za))n3X0_G=9d3MA4Vw0(3 zkoX90{FOID3dxY+hP++#(s6vsN6D(3QS13e<&aA1?Tj+3Fr#H+I{l6?d-tQK@4Q>( z+5!*_77&%8v4EGW^K(aDfcN*~ie=ukcbhI?#cq|SZK_Nfto70X#`BxAn{R;C zFkpK9OOSS8$eLJjv5F@HNeRG$^Kg1*p9=$ysr2_&aIAnN0qxte=w07fLFm&AYa9&$ z1eL8iDZgH_ukzQI(rNVJd*DzRUKX#h!#59wRjFCQxHk<(o0FN3(I0`JV#<2iWS=?1 zxLl(^>nis9uNxQ5WdDfF#OVYo{p8^W!m`uG8j0U#QXdZAL=KS~<;PxJxS~{0$dG8+ zy}Tn7dHAivxBUF6InR|)To(3-eV5MCzXN}bBX3RpYyzGT>~Q6QR(@;muS#>aV(&B8 zaK4KJZa(i*52rusjsL(G3{&(1e||UO@rR-Ux&*ZQNaZb^7qed0xOi zeb#*GlQV4l2aDR>)XM`fNtMZ|JDRA#eSI)^P+LZV)1LD*Bcmk4yohqF>n-6jYcC97 z;7WYG48$((tIYt`cu)q6D~ETT&K+a+%mHq2AZa-9n#w>0WUfPL5$wZaa{~12t?g5v zKdZS1#B5%j84-_XEIJPHzcBvskEs8+z^~)KZ0F;%|CI~;|E2%;TA=2LuOZ~Tu)5VP SAnZMHLPx^@Tz2nq=>Gu5xDzb^ literal 0 HcmV?d00001 From a1508f1670625de37c4f3d3b7a639f18c20dae01 Mon Sep 17 00:00:00 2001 From: landofcoder Date: Thu, 25 Nov 2021 15:19:38 +0700 Subject: [PATCH 3/5] updated readme --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d2f05a..7e04247 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,17 @@ - Support trigger events after save to sync data to Mautic - Support Console commands for Sync processing: Export customers, Export Orders, Export Reviews, Export Subscribers - Asynchronous Data Export: Support queue and cron job for calling Mautic APIs -- Includes abandon card tags (Comming Soon) +- Includes abandon card tags - Review reminder tags (Comming Soon) +## TO DO +- Review reminder tags (Comming Soon) +- Contact Segment (Comming soon) + + Add contact to a segment. Support common segment by reports: Best Customers, Big Spenders, Lost Cheap Customers, Lost Customers, Low Spenders, Loyal Customers, Mid Spenders, New Customers, One Time Purchase Customers, Two Time Purchase Customers, Three Time Purchase Customers. + + Remove contact from a segment +- Campaign Contact (Comming soon) +- Company Contact (Comming soon) + ## Installation \* = in production please use the `--keep-generated` option From ecc01f711420f5b66db50a962e6953e4ad1214b1 Mon Sep 17 00:00:00 2001 From: Panda Thuan Date: Thu, 25 Nov 2021 16:10:12 +0700 Subject: [PATCH 4/5] added segments processor --- .../Segments/BestCustomersProcessor.php | 77 +++++++++++++++++++ .../Segments/BigSpendersProcessor.php | 77 +++++++++++++++++++ .../Segments/LostCheapCustomersProcessor.php | 77 +++++++++++++++++++ .../Segments/LostCustomersProcessor.php | 77 +++++++++++++++++++ .../Segments/LowSpendersProcessor.php | 77 +++++++++++++++++++ .../Segments/LoyalCustomersProcessor.php | 77 +++++++++++++++++++ .../Segments/MidSpendersProcessor.php | 77 +++++++++++++++++++ .../Segments/NewCustomersProcessor.php | 77 +++++++++++++++++++ .../OneTimePurchaseCustomersProcessor.php | 77 +++++++++++++++++++ .../ThreeTimePurchaseCustomersProcessor.php | 77 +++++++++++++++++++ .../TwoTimePurchaseCustomersProcessor.php | 77 +++++++++++++++++++ 11 files changed, 847 insertions(+) create mode 100644 Queue/Processor/Segments/BestCustomersProcessor.php create mode 100644 Queue/Processor/Segments/BigSpendersProcessor.php create mode 100644 Queue/Processor/Segments/LostCheapCustomersProcessor.php create mode 100644 Queue/Processor/Segments/LostCustomersProcessor.php create mode 100644 Queue/Processor/Segments/LowSpendersProcessor.php create mode 100644 Queue/Processor/Segments/LoyalCustomersProcessor.php create mode 100644 Queue/Processor/Segments/MidSpendersProcessor.php create mode 100644 Queue/Processor/Segments/NewCustomersProcessor.php create mode 100644 Queue/Processor/Segments/OneTimePurchaseCustomersProcessor.php create mode 100644 Queue/Processor/Segments/ThreeTimePurchaseCustomersProcessor.php create mode 100644 Queue/Processor/Segments/TwoTimePurchaseCustomersProcessor.php diff --git a/Queue/Processor/Segments/BestCustomersProcessor.php b/Queue/Processor/Segments/BestCustomersProcessor.php new file mode 100644 index 0000000..b44167e --- /dev/null +++ b/Queue/Processor/Segments/BestCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/BigSpendersProcessor.php b/Queue/Processor/Segments/BigSpendersProcessor.php new file mode 100644 index 0000000..087ebb8 --- /dev/null +++ b/Queue/Processor/Segments/BigSpendersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/LostCheapCustomersProcessor.php b/Queue/Processor/Segments/LostCheapCustomersProcessor.php new file mode 100644 index 0000000..c363870 --- /dev/null +++ b/Queue/Processor/Segments/LostCheapCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/LostCustomersProcessor.php b/Queue/Processor/Segments/LostCustomersProcessor.php new file mode 100644 index 0000000..e477574 --- /dev/null +++ b/Queue/Processor/Segments/LostCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/LowSpendersProcessor.php b/Queue/Processor/Segments/LowSpendersProcessor.php new file mode 100644 index 0000000..d1b63c0 --- /dev/null +++ b/Queue/Processor/Segments/LowSpendersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/LoyalCustomersProcessor.php b/Queue/Processor/Segments/LoyalCustomersProcessor.php new file mode 100644 index 0000000..d9fa041 --- /dev/null +++ b/Queue/Processor/Segments/LoyalCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/MidSpendersProcessor.php b/Queue/Processor/Segments/MidSpendersProcessor.php new file mode 100644 index 0000000..6a1403f --- /dev/null +++ b/Queue/Processor/Segments/MidSpendersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/NewCustomersProcessor.php b/Queue/Processor/Segments/NewCustomersProcessor.php new file mode 100644 index 0000000..f97db3e --- /dev/null +++ b/Queue/Processor/Segments/NewCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/OneTimePurchaseCustomersProcessor.php b/Queue/Processor/Segments/OneTimePurchaseCustomersProcessor.php new file mode 100644 index 0000000..126362e --- /dev/null +++ b/Queue/Processor/Segments/OneTimePurchaseCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/ThreeTimePurchaseCustomersProcessor.php b/Queue/Processor/Segments/ThreeTimePurchaseCustomersProcessor.php new file mode 100644 index 0000000..ada2ef2 --- /dev/null +++ b/Queue/Processor/Segments/ThreeTimePurchaseCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} diff --git a/Queue/Processor/Segments/TwoTimePurchaseCustomersProcessor.php b/Queue/Processor/Segments/TwoTimePurchaseCustomersProcessor.php new file mode 100644 index 0000000..aa4332d --- /dev/null +++ b/Queue/Processor/Segments/TwoTimePurchaseCustomersProcessor.php @@ -0,0 +1,77 @@ +collectionFactory = $collectionFactory; + $this->publisher = $publisher; + $this->_storeManager = $storeManager; + } + + /** + * @return void + */ + public function process() + { + //Write code at here + } +} From 42871d6d4bd97aee4c90e918b858f697dff522f0 Mon Sep 17 00:00:00 2001 From: Panda Thuan Date: Thu, 25 Nov 2021 16:38:29 +0700 Subject: [PATCH 5/5] added queue for segment add and remove contacts --- Queue/MessageQueues/SegmentAdd/Publisher.php | 13 +++++++++++++ Queue/MessageQueues/SegmentRemove/Publisher.php | 13 +++++++++++++ etc/communication.xml | 2 ++ etc/queue_consumer.xml | 4 ++++ etc/queue_publisher.xml | 8 ++++++++ etc/queue_topology.xml | 8 ++++++++ 6 files changed, 48 insertions(+) create mode 100644 Queue/MessageQueues/SegmentAdd/Publisher.php create mode 100644 Queue/MessageQueues/SegmentRemove/Publisher.php diff --git a/Queue/MessageQueues/SegmentAdd/Publisher.php b/Queue/MessageQueues/SegmentAdd/Publisher.php new file mode 100644 index 0000000..22f8caf --- /dev/null +++ b/Queue/MessageQueues/SegmentAdd/Publisher.php @@ -0,0 +1,13 @@ + + + diff --git a/etc/queue_consumer.xml b/etc/queue_consumer.xml index 4b330d5..26a75ff 100644 --- a/etc/queue_consumer.xml +++ b/etc/queue_consumer.xml @@ -13,4 +13,8 @@ + + + + diff --git a/etc/queue_publisher.xml b/etc/queue_publisher.xml index eb2ffbb..2faca49 100644 --- a/etc/queue_publisher.xml +++ b/etc/queue_publisher.xml @@ -19,4 +19,12 @@ + + + + + + + + diff --git a/etc/queue_topology.xml b/etc/queue_topology.xml index d05f75f..3ab8b40 100644 --- a/etc/queue_topology.xml +++ b/etc/queue_topology.xml @@ -26,4 +26,12 @@ + + + + + + + +