Skip to content

Commit

Permalink
Merge pull request vindi#55 from cedran/master
Browse files Browse the repository at this point in the history
fix
  • Loading branch information
cedran authored Jun 14, 2024
2 parents 36bdf3c + 8a66a26 commit 8f9d188
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 2 deletions.
45 changes: 45 additions & 0 deletions Cron/CleanOrderQueue.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
namespace Vindi\Payment\Cron;

use Vindi\Payment\Model\ResourceModel\OrderCreationQueue;
use Psr\Log\LoggerInterface;

class CleanOrderQueue
{
/**
* @var OrderCreationQueue
*/
protected $orderCreationQueue;

/**
* @var LoggerInterface
*/
protected $logger;

/**
* Constructor
*
* @param OrderCreationQueue $orderCreationQueue
* @param LoggerInterface $logger
*/
public function __construct(
OrderCreationQueue $orderCreationQueue,
LoggerInterface $logger
) {
$this->orderCreationQueue = $orderCreationQueue;
$this->logger = $logger;
}

/**
* Execute the CRON job
*/
public function execute()
{
try {
$this->orderCreationQueue->deleteOldNonPendingRecords();
$this->logger->info('CleanOrderQueue Cron Job executed successfully.');
} catch (\Exception $e) {
$this->logger->error('Error during CleanOrderQueue Cron Job: ' . $e->getMessage());
}
}
}
23 changes: 22 additions & 1 deletion Cron/ProcessOrderPaidQueue.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ protected function createInvoiceFromBill($billData)

$bill = $billData['bill'];
$subscriptionId = $bill['subscription']['id'];
$order = $this->getOrderFromBillId($subscriptionId);
$order = $this->getOrderFromBillIdAndSubscriptionId($bill['id'], $subscriptionId);

if (!$order) {
$this->logger->info(__('Order not found for subscription ID %1', $subscriptionId));
Expand Down Expand Up @@ -258,4 +258,25 @@ protected function getOrderFromBillId($billId)
return null;
}
}

/**
* @param $billId
* @param $subscriptionId
* @return false|mixed|null
*/
protected function getOrderFromBillIdAndSubscriptionId($billId, $subscriptionId)
{
try {
$searchCriteria = $this->searchCriteriaBuilder
->addFilter('vindi_bill_id', $billId)
->addFilter('vindi_subscription_id', $subscriptionId)
->create();

$orderList = $this->orderRepository->getList($searchCriteria)->getItems();
return reset($orderList);
} catch (\Exception $e) {
$this->logger->error(__('Error fetching order for bill ID %1: %2', $billId, $e->getMessage()));
return null;
}
}
}
22 changes: 21 additions & 1 deletion Model/ResourceModel/OrderCreationQueue.php
Original file line number Diff line number Diff line change
@@ -1,16 +1,36 @@
<?php

namespace Vindi\Payment\Model\ResourceModel;

use Magento\Framework\Model\ResourceModel\Db\AbstractDb;

/**
* OrderCreationQueue Resource Model
*/
class OrderCreationQueue extends AbstractDb
{
/**
* Initialize resource model
*
* @return void
*/
protected function _construct()
{
$this->_init('vindi_order_creation_queue', 'queue_id');
}

/**
* Delete records older than 30 days and with status not equal to 'pending'
*/
public function deleteOldNonPendingRecords()
{
$connection = $this->getConnection();
$tableName = $this->getMainTable();

$where = [
'status != ?' => 'pending',
'created_at < ?' => new \Zend_Db_Expr('NOW() - INTERVAL 30 DAY')
];

$connection->delete($tableName, $where);
}
}
3 changes: 3 additions & 0 deletions etc/crontab.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,8 @@
<job name="vindi_payment_process_order_paid_queue" instance="Vindi\Payment\Cron\ProcessOrderPaidQueue" method="execute">
<schedule>*/1 * * * *</schedule>
</job>
<job name="vindi_payment_clean_order_queue" instance="Vindi\Payment\Cron\CleanOrderQueue" method="execute">
<schedule>0 2 * * *</schedule>
</job>
</group>
</config>

0 comments on commit 8f9d188

Please sign in to comment.