diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php
new file mode 100644
index 00000000..3e03c860
--- /dev/null
+++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php
@@ -0,0 +1,167 @@
+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);
+ }
+ }
+}
diff --git a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php
index 9e19ccec..4129f2a8 100644
--- a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php
+++ b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php
@@ -43,9 +43,9 @@ class PerfexCRMTasks
○ Outcomes: The payment will be approved in exchange, allowing the next steps in the process to be initiated.
',
'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}
',
'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.
',
'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.
',
'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}
',
'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.
○ Initial Status: Not Started
○ Deadline: Same day
@@ -493,7 +493,7 @@ class PerfexCRMTasks
○ Outcomes: Bank transaction is mapped successfully, allowing the next steps in the process to be initiated.
',
'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,