Source of file EcommerceTaskProcessOrderQueue.php
Size: 2,833 Bytes - Last Modified: 2021-12-23T10:39:35+00:00
/var/www/docs.ssmods.com/process/src/src/Tasks/EcommerceTaskProcessOrderQueue.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | <?php namespace Sunnysideup\Ecommerce\Tasks; use SilverStripe\Control\Email\Email; use SilverStripe\Control\Email\Mailer; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\BuildTask; use SilverStripe\ORM\DataList; use Sunnysideup\Ecommerce\Email\EcommerceDummyMailer; use Sunnysideup\Ecommerce\Model\Process\OrderProcessQueue; /** * @description: * * @authors: Nicolaas [at] Sunny Side Up .co.nz * @package: ecommerce * @sub-package: tasks */ class EcommerceTaskProcessOrderQueue extends BuildTask { protected $sendEmails = true; protected $limit = 1; protected $title = 'Process The Order Queue'; protected $description = 'Go through order queue and try to finalise all the orders in it.'; private static $segment = 'EcommerceTaskProcessOrderQueue'; public function run($request) { //as this may run every minute, we have to limit it to fifty seconds. set_time_limit(50); $now = microtime(true); //IMPORTANT! if (! $this->sendEmails) { Config::modify()->update(Email::class, 'send_all_emails_to', 'no-one@localhost'); Injector::inst()->registerService(new EcommerceDummyMailer(), Mailer::class); } $id = (int) $request->getVar('id') - 0; $queueObjectSingleton = Injector::inst()->get(OrderProcessQueue::class); $ordersinQueue = $queueObjectSingleton->OrdersToBeProcessed($id); if (! $ordersinQueue->exists()) { echo 'No orders in queue'; return; } echo '<h3>There are ' . $ordersinQueue->count() . ' in the queue, processing ' . $this->limit . ' now</h3>'; if ($id) { echo '<h3>FORCING Order with ID: ' . $id . '</h3>'; $ordersinQueue = $ordersinQueue->filter(['ID' => $id]); } $this->tryToFinaliseOrders($ordersinQueue); echo '<hr />'; echo '<hr />'; echo 'PROCESSED IN: ' . round(((microtime(true) - $now) / 1), 5) . ' seconds'; } /** * @param DataList $orders orders to be processsed */ protected function tryToFinaliseOrders(DataList $orders) { //limit orders $orders = $orders->limit($this->limit); //we sort randomly so it is less likely we get stuck with the same ones $orders = $orders->sort('RAND()'); $queueObjectSingleton = Injector::inst()->get(OrderProcessQueue::class); foreach ($orders as $order) { echo '<hr />Processing order: ' . $order->ID; $outcome = $queueObjectSingleton->process($order); if (true === $outcome) { echo '<br />... Order moved successfully.<hr />'; } else { echo '<br />... ' . $outcome . '<hr />'; } } } } |