remove accounting tasks from auto generated tasks temporarily until ready

This commit is contained in:
Omair Saleh
2023-06-11 15:42:49 +08:00
parent ffe16baebc
commit 9ccd51af08
2 changed files with 177 additions and 10 deletions
@@ -0,0 +1,167 @@
<?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 = [];
if($status == ApprovalStatus::APPROVED && $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, PerfexCRMTasks::TASK_PURCHASE_ORDER_2];
}
}
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, UpdatePerfexCRM::class, UpdatePerfexCRMInvoice::class);
} elseif($status == ApprovalStatus::PENDING_VERIFICATION){
UpdatePerfexCRM::dispatch($updatePerfexCRMObject, null, null);
}
}
}
@@ -43,9 +43,9 @@ class PerfexCRMTasks
○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.<br>',
'milestone' => '',
'reference' => 'TASK_1_DAY_TRANSFER_2',
'on_task_completion' => 'TASK_1_DAY_TRANSFER_3,TASK_1_DAY_TRANSFER_5',
'on_task_completion' => 'TASK_1_DAY_TRANSFER_5',
'department' => 'Accounts',
'status' => '',
'status' => PerfexCRMTaskStatus::IN_PROGRESS,
'priority' => PerfexCRMTaskPriority::HIGH,
'duedate' => 0
];
@@ -160,9 +160,9 @@ class PerfexCRMTasks
○ Link to order page: {link_transfer}<br>',
'milestone' => '',
'reference' => 'TASK_3_DAY_TRANSFER_2',
'on_task_completion' => 'TASK_3_DAY_TRANSFER_3,TASK_3_DAY_TRANSFER_5',
'on_task_completion' => 'TASK_3_DAY_TRANSFER_5',
'department' => 'Accounts',
'status' => '',
'status' => PerfexCRMTaskStatus::IN_PROGRESS,
'priority' => PerfexCRMTaskPriority::HIGH,
'duedate' => 0
];
@@ -286,9 +286,9 @@ class PerfexCRMTasks
○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.<br>',
'milestone' => '',
'reference' => 'TASK_1688_PAYMENT_2',
'on_task_completion' => 'TASK_1688_PAYMENT_3,TASK_1688_PAYMENT_5',
'on_task_completion' => 'TASK_1688_PAYMENT_5',
'department' => 'Accounts',
'status' => '',
'status' => PerfexCRMTaskStatus::IN_PROGRESS,
'priority' => PerfexCRMTaskPriority::HIGH,
'duedate' => 0
];
@@ -353,7 +353,7 @@ class PerfexCRMTasks
○ Outcomes: The order is placed with a supplier and the customer\'s order is confirmed.<br>',
'milestone' => '',
'reference' => 'TASK_1688_PAYMENT_5',
'on_task_completion' => 'TASK_1688_PAYMENT_6',
'on_task_completion' => 'TASK_1688_PAYMENT_7',
'department' => 'Operations',
'status' => '',
'priority' => PerfexCRMTaskPriority::HIGH,
@@ -454,14 +454,14 @@ class PerfexCRMTasks
○ link: {link_transfer}<br>',
'milestone' => '',
'reference' => 'TASK_1688_PAYMENT_12',
'on_task_completion' => 'TASK_1688_PAYMENT_13',
'on_task_completion' => '',
'department' => 'Operations',
'status' => '',
'priority' => PerfexCRMTaskPriority::LOW,
'duedate' => 1
];
public const TASK_1688_PAYMENT_13 = [
'name' => 'Complete Order bookeeping',
'name' => 'Complete Order bookkeeping',
'description' => '○ Purpose: To complete the bookkeeping for the booking.<br>
○ Initial Status: Not Started<br>
○ Deadline: Same day<br>
@@ -493,7 +493,7 @@ class PerfexCRMTasks
○ Outcomes: Bank transaction is mapped successfully, allowing the next steps in the process to be initiated.<br>',
'milestone' => '',
'reference' => 'TASK_PURCHASE_ORDER_1',
'on_task_completion' => 'TASK_PURCHASE_ORDER_2',
'on_task_completion' => '',
'department' => 'Operations',
'status' => PerfexCRMTaskStatus::IN_PROGRESS,
'priority' => PerfexCRMTaskPriority::LOW,