<?php
namespace App\Jobs\Order;
use App\Http\Controllers\OrderController;
use App\Models\Mediator;
use App\Presets\OrderPreset;
use App\Services\Bitrix24\Bitrix24Service;
use App\Services\MoiSklad\MoiSkladService;
use Exception;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class CreateOrderJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 3;
/** @var OrderPreset */
private $orderPreset;
/** @var int */
private $serviceNumber;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(OrderPreset $orderPreset, int $serviceNumber)
{
$this->onQueue('creating_and_updating');
$this->orderPreset = $orderPreset;
$this->serviceNumber = $serviceNumber;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$orderExistenceCheck = (new OrderController())->exists($this->orderPreset);
if ($orderExistenceCheck['status'] === false) {
return;
}
if ( ! empty($orderExistenceCheck['data'])) {
return ;
}
if ($this->serviceNumber === Mediator::BITRIX_24) {
$createOrderInMoiSkladRequest = (new MoiSkladService())->createOrder($this->orderPreset);
if ($createOrderInMoiSkladRequest['status'] === false) {
return;
}
$orderPreset = $createOrderInMoiSkladRequest['data'];
} elseif ($this->serviceNumber === Mediator::MOI_SKLAD) {
try {
$createOrderInBitrix24Request = (new Bitrix24Service())->createOrder($this->orderPreset);
} catch (Exception $e) {
Log::error('CreateOrderJob@handle | ', [
'err_msg' => $e->getMessage(),
'err_code' => $e->getCode(),
'err_file' => $e->getFile(),
'err_line' => $e->getLine(),
'err_trace' => $e->getTrace()
]);
return;
}
if ($createOrderInBitrix24Request['status'] === false) {
return;
}
$orderPreset = $createOrderInBitrix24Request['data'];
} else {
Log::error('CreateOrderJob@handle | Such Service ' . "[$this->serviceNumber]" . ' is not existed!');
return;
}
(new OrderController())->create($orderPreset);
}
}