mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-22 22:13:59 +00:00
172 lines
6.7 KiB
PHP
172 lines
6.7 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
|
|
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
|
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
|
use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus;
|
|
use App\Classes\ValueObjects\Constants\PerfexCRMTaskStatus;
|
|
use App\Classes\Jobs\UpdatePerfexCRMInvoice;
|
|
use App\Classes\Jobs\UpdatePerfexCRM;
|
|
use App\Classes\Jobs\UpdatePerfexCRMPrelude;
|
|
use App\Models\Transaction;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class TransactionToPerfexCRMProcessorV2
|
|
{
|
|
public function execute(Transaction $model, int $status)
|
|
{
|
|
try {
|
|
if($model->owner instanceof \App\Models\Booking) {
|
|
$bookingInfo = $this->extractBookingInfo($model);
|
|
$projectName = 'Exchange | ' . $bookingInfo['serviceTypeName'] . ' | ' . $bookingInfo['bookingMarking'];
|
|
$tasks = $this->defineTasks($model, $status);
|
|
|
|
if(count($tasks) > 0) {
|
|
$updatePerfexCRMObject = new UpdatePerfexCRMObject(
|
|
$bookingInfo['companyName'],
|
|
$bookingInfo['companyReference'],
|
|
$bookingInfo['contactName'],
|
|
$bookingInfo['contactEmail'],
|
|
$bookingInfo['bookingMarking'],
|
|
$projectName,
|
|
PerfexCRMProjectStatus::IN_PROGRESS,
|
|
[],
|
|
$tasks
|
|
);
|
|
$this->dispatchUpdateJob($model, $status, $updatePerfexCRMObject);
|
|
}
|
|
}
|
|
} catch (\Exception $exception) {
|
|
Log::error('TransactionToPerfexCRMProcessor debug:');
|
|
Log::error($exception);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private function extractBookingInfo(Transaction $model): array
|
|
{
|
|
$bookingInfo = [];
|
|
$bookingInfo['companyReference'] = $model->owner->company->reference;
|
|
$bookingInfo['companyName'] = $model->owner->company->name;
|
|
$bookingInfo['contactEmail'] = $model->owner->company->employees()->first()->email;
|
|
$bookingInfo['contactName'] = $model->owner->company->employees()->first()->name;
|
|
$bookingInfo['bookingMarking'] = $model->owner->marking;
|
|
$bookingInfo['serviceTypeName'] = $model->owner->company->services()->where('id', $model->owner->service_id)->first()->name;
|
|
|
|
return $bookingInfo;
|
|
}
|
|
|
|
private function defineTasks(Transaction $model, int $status): array
|
|
{
|
|
$tasks = [];
|
|
Log::info(json_encode([$status, $model->type]));
|
|
|
|
if($status === ApprovalStatus::PENDING_VERIFICATION && (int) $model->type === TransactionType::PAYMENT) {
|
|
$tasks = $this->definePaymentTasks($model);
|
|
} elseif($status === ApprovalStatus::PENDING_VERIFICATION && $model->type === TransactionType::PURCHASE_ORDER) {
|
|
if($model->owner->service_id === 1 || $model->owner->service_id === 3) {
|
|
$tasks = [PerfexCRMTasks::TASK_PURCHASE_ORDER_1];
|
|
}
|
|
} elseif($status === ApprovalStatus::APPROVED && $model->type === TransactionType::PAYMENT) {
|
|
$task = PerfexCRMTasks::TASK_1_DAY_TRANSFER_2;
|
|
$task['status'] = PerfexCRMTaskStatus::COMPLETED;
|
|
$tasks = [$task];
|
|
}
|
|
|
|
return $tasks;
|
|
}
|
|
|
|
private function definePaymentTasks(Transaction $model): array
|
|
{
|
|
$tasks = [
|
|
// PerfexCRMTasks::TASK_1
|
|
];
|
|
|
|
if ($model->owner->service_id === 1) {
|
|
$tasks = array_merge($tasks, $this->oneDayTransferTasks());
|
|
} elseif ($model->owner->service_id === 3) {
|
|
$tasks = array_merge($tasks, $this->threeDayTransferTasks());
|
|
} elseif ($model->owner->service_id === 4) {
|
|
$tasks = array_merge($tasks, $this->payment1688Tasks());
|
|
}
|
|
|
|
if ($model->owner->service_id === 1 || $model->owner->service_id === 3) {
|
|
$purchaseOrder = $model->booking->transactions()->where('type', TransactionType::PURCHASE_ORDER)->complete()->first();
|
|
if(is_null($purchaseOrder)){
|
|
$tasks = array_merge($tasks, $this->purchaseOrderTasks());
|
|
}
|
|
}
|
|
|
|
return $tasks;
|
|
}
|
|
|
|
private function oneDayTransferTasks(): array
|
|
{
|
|
return [
|
|
// PerfexCRMTasks::TASK_1_DAY_TRANSFER_1,
|
|
PerfexCRMTasks::TASK_1_DAY_TRANSFER_2,
|
|
// PerfexCRMTasks::TASK_1_DAY_TRANSFER_3,
|
|
// PerfexCRMTasks::TASK_1_DAY_TRANSFER_3_1,
|
|
// PerfexCRMTasks::TASK_1_DAY_TRANSFER_4,
|
|
PerfexCRMTasks::TASK_1_DAY_TRANSFER_5,
|
|
PerfexCRMTasks::TASK_1_DAY_TRANSFER_6
|
|
];
|
|
}
|
|
|
|
private function threeDayTransferTasks(): array
|
|
{
|
|
return [
|
|
// PerfexCRMTasks::TASK_3_DAY_TRANSFER_1,
|
|
PerfexCRMTasks::TASK_3_DAY_TRANSFER_2,
|
|
// PerfexCRMTasks::TASK_3_DAY_TRANSFER_3,
|
|
// PerfexCRMTasks::TASK_3_DAY_TRANSFER_3_1,
|
|
// PerfexCRMTasks::TASK_3_DAY_TRANSFER_4,
|
|
PerfexCRMTasks::TASK_3_DAY_TRANSFER_5,
|
|
PerfexCRMTasks::TASK_3_DAY_TRANSFER_6
|
|
];
|
|
}
|
|
|
|
private function payment1688Tasks(): array
|
|
{
|
|
return [
|
|
// PerfexCRMTasks::TASK_1688_PAYMENT_1,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_2,
|
|
// PerfexCRMTasks::TASK_1688_PAYMENT_3,
|
|
// PerfexCRMTasks::TASK_1688_PAYMENT_3_1,
|
|
// PerfexCRMTasks::TASK_1688_PAYMENT_4,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_5,
|
|
// PerfexCRMTasks::TASK_1688_PAYMENT_6,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_7,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_8,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_9,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_10,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_11,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_12,
|
|
PerfexCRMTasks::TASK_1688_PAYMENT_13
|
|
];
|
|
}
|
|
|
|
private function purchaseOrderTasks(): array
|
|
{
|
|
$potask1 = PerfexCRMTasks::TASK_PURCHASE_ORDER_1;
|
|
$potask1['status'] = PerfexCRMTaskStatus::NOT_STARTED;
|
|
|
|
return [
|
|
$potask1,
|
|
// PerfexCRMTasks::TASK_PURCHASE_ORDER_2
|
|
];
|
|
}
|
|
|
|
private function dispatchUpdateJob(Transaction $model, int $status, UpdatePerfexCRMObject $updatePerfexCRMObject)
|
|
{
|
|
if($status === ApprovalStatus::APPROVED){
|
|
UpdatePerfexCRMPrelude::dispatch($model, $updatePerfexCRMObject, true);
|
|
} elseif($status === ApprovalStatus::PENDING_VERIFICATION){
|
|
UpdatePerfexCRMPrelude::dispatch($model, $updatePerfexCRMObject);
|
|
}
|
|
}
|
|
}
|