Spamworldpro Mini Shell
Spamworldpro


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/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/app/code/Cnc/Sales/Cron/RunPaymentReminders.php
<?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());
        }
    }
}

Spamworldpro Mini