![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/app/code/Cnc/Sales/Cron/ |
<?php /** * Copyright (c) 2020 Kaliop Digital Commerce (https://digitalcommerce.kaliop.com) All Rights Reserved. * https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * Cnc * Radosław Stępień <[email protected]> <[email protected]> */ namespace Cnc\Sales\Cron; use Cnc\Sales\Model\Config; use Magento\Framework\Api\FilterBuilder; use Magento\Framework\Api\SearchCriteriaBuilder; use Magento\Framework\App\Area; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\State; use Magento\Framework\Escaper; use Magento\Framework\Mail\Template\TransportBuilder; use Magento\Framework\Translate\Inline\StateInterface; use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Store\Model\ScopeInterface; use Magento\Store\Model\Store; class RunPaymentReminders { /** @var StateInterface $inlineTranslation */ protected $inlineTranslation; /** @var Escaper $escaper */ protected $escaper; /** @var TransportBuilder $transportBuilder */ protected $transportBuilder; /** @var State $state */ protected $state; /** @var OrderRepositoryInterface $orderRepositoryInterface */ protected $orderRepositoryInterface; /** @var SearchCriteriaBuilder $searchCriteriaBuilder */ protected $searchCriteriaBuilder; /** @var FilterBuilder $filterBuilder */ protected $filterBuilder; /** @var ScopeConfigInterface */ protected $scopeConfigInterface; /** * RemindOfflinePayments constructor. * @param StateInterface $inlineTranslation * @param Escaper $escaper * @param TransportBuilder $transportBuilder * @param State $state * @param OrderRepositoryInterface $orderRepositoryInterface * @param SearchCriteriaBuilder $searchCriteriaBuilder * @param FilterBuilder $filterBuilder * @param ScopeConfigInterface $scopeConfigInterface */ public function __construct( StateInterface $inlineTranslation, Escaper $escaper, TransportBuilder $transportBuilder, State $state, OrderRepositoryInterface $orderRepositoryInterface, SearchCriteriaBuilder $searchCriteriaBuilder, FilterBuilder $filterBuilder, ScopeConfigInterface $scopeConfigInterface ) { $this->inlineTranslation = $inlineTranslation; $this->escaper = $escaper; $this->transportBuilder = $transportBuilder; $this->state = $state; $this->orderRepositoryInterface = $orderRepositoryInterface; $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->filterBuilder = $filterBuilder; $this->scopeConfigInterface = $scopeConfigInterface; } /** * Send emails with reminder about overdue payments for offline payment method */ public function run() { try { $cncEmail = $this->scopeConfigInterface->getValue( 'trans_email/ident_general/email', ScopeInterface::SCOPE_STORE ); $this->inlineTranslation->suspend(); $sender = [ 'name' => $this->escaper->escapeHtml('Payment reminder'), 'email' => $this->escaper->escapeHtml($cncEmail), ]; $offlineFrom = date('c', strtotime('-30 days')); $onReceiptInvoiceFrom = date('c', strtotime('-5 days')); //Offline payment orders preparation $offlinePaymentFilter = $this->filterBuilder->setField('extension_attribute_payment_method.method') ->setConditionType('eq') ->setValue('offline_payment') ->create(); $offlineMinTimeFilter = $this->filterBuilder->setField('created_at') ->setConditionType('lteq') ->setValue($offlineFrom) ->create(); $statusFilter = $this->filterBuilder->setField('status') ->setConditionType('nin') ->setValue([ Config::ORDER_STATUS_COMPLETE_CODE, Config::ORDER_STATUS_CANCELED_CODE, Config::ORDER_STATUS_CLOSED_CODE, Config::ORDER_STATUS_EXPEDIE_PAYE_CODE ]) ->create(); $searchCriteria = $this->searchCriteriaBuilder ->addFilters([$offlinePaymentFilter]) ->addFilters([$offlineMinTimeFilter]) ->addFilters([$statusFilter]) ->create(); $offlinePaymentOrderList = $this->orderRepositoryInterface->getList($searchCriteria); $offlineOrdersToRemind = $offlinePaymentOrderList->getItems(); //On receipt invoice payment orders preparation $onReceiptInvoicePaymentFilter = $this->filterBuilder->setField('extension_attribute_payment_method.method') ->setConditionType('eq') ->setValue('payment_on_receipt_invoice') ->create(); $onReceiptInvoiceMinTimeFilter = $this->filterBuilder->setField('created_at') ->setConditionType('lteq') ->setValue($onReceiptInvoiceFrom) ->create(); $searchCriteria = $this->searchCriteriaBuilder ->addFilters([$onReceiptInvoicePaymentFilter]) ->addFilters([$onReceiptInvoiceMinTimeFilter]) ->addFilters([$statusFilter]) ->create(); $onReceiptInvoicePaymentOrderList = $this->orderRepositoryInterface->getList($searchCriteria); $onReceiptInvoicePaymentOrdersToRemind = $onReceiptInvoicePaymentOrderList->getItems(); //Merging all orders to remind and send reminders $ordersToRemind = array_merge($offlineOrdersToRemind, $onReceiptInvoicePaymentOrdersToRemind); if (count($ordersToRemind)) { foreach ($ordersToRemind as $order) { $transport = $this->transportBuilder ->setTemplateIdentifier('remind_email_template_template') ->setTemplateOptions( [ 'area' => Area::AREA_FRONTEND, 'store' => Store::DEFAULT_STORE_ID, ] ) ->setTemplateVars([ 'orderId' => $order->getIncrementId(), 'customerName' => $order->getCustomerFirstname() . ' ' . $order->getCustomerLastname(), 'price' => $order->getGrandTotal(), ]) ->setFrom($sender) ->addTo($order->getCustomerEmail()) ->getTransport(); $transport->sendMessage(); } var_export("All messages with reminders was sent to the clients \r\n"); } else { var_export("There are no orders with overdue pending payments \r\n"); } $this->inlineTranslation->resume(); } catch (\Exception $e) { var_export($e->getMessage()); } } }