diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php index 39c6de77..a074bb0f 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessorV2.php @@ -63,17 +63,85 @@ class TransactionToPerfexCRMProcessorV2 private function defineTasks(Transaction $model, int $status): array { $tasks = []; + $ownerServiceId = $model->owner->owner->service_id; - 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]; + if ($status === ApprovalStatus::PENDING_VERIFICATION) { + $tasks = $this->handlePendingVerificationStatus($model, $ownerServiceId); + } elseif ($status === ApprovalStatus::APPROVED) { + $tasks = $this->handleApprovedStatus($model, $ownerServiceId); + } + + return $tasks; + } + + private function handlePendingVerificationStatus(Transaction $model, int $serviceId): array + { + $tasks = []; + switch($model->type) { + case TransactionType::PAYMENT: + $tasks = $this->definePaymentTasks($model); + break; + case TransactionType::PURCHASE_ORDER: + if ($serviceId === 1 || $serviceId === 3) { + $tasks = [PerfexCRMTasks::TASK_PURCHASE_ORDER_1]; + } + break; + case TransactionType::BILL: + $tasks = $this->handleBillPendingStatus($serviceId); + break; + } + + return $tasks; + } + + private function handleApprovedStatus(Transaction $model, int $serviceId): array + { + $tasks = []; + switch($model->type) { + case TransactionType::PAYMENT: + $tasks = $this->handlePaymentApprovedStatus($serviceId); + break; + case TransactionType::BILL: + if ($serviceId === 4) { + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_9, PerfexCRMTasks::TASK_1688_PAYMENT_10); + } + break; + } + + return $tasks; + } + + private function handlePaymentApprovedStatus(int $serviceId): array + { + $tasks = []; + switch ($serviceId) { + case 1: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1_DAY_TRANSFER_2, PerfexCRMTasks::TASK_1_DAY_TRANSFER_5); + break; + case 3: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_3_DAY_TRANSFER_2, PerfexCRMTasks::TASK_3_DAY_TRANSFER_5); + break; + case 4: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_2, PerfexCRMTasks::TASK_1688_PAYMENT_5); + break; + } + + return $tasks; + } + + private function handleBillPendingStatus(int $serviceId): array + { + $tasks = []; + switch ($serviceId) { + case 1: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1_DAY_TRANSFER_5, PerfexCRMTasks::TASK_1_DAY_TRANSFER_6); + break; + case 3: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_3_DAY_TRANSFER_5, PerfexCRMTasks::TASK_3_DAY_TRANSFER_6); + break; + case 4: + $tasks = $this->completeTask(PerfexCRMTasks::TASK_1688_PAYMENT_5, PerfexCRMTasks::TASK_1688_PAYMENT_7); + break; } return $tasks; @@ -165,4 +233,11 @@ class TransactionToPerfexCRMProcessorV2 $withInvoice = ($model->type === TransactionType::PAYMENT && $model->owner === Booking::class && $status === ApprovalStatus::APPROVED); UpdatePerfexCRMPrelude::dispatch($model, $updatePerfexCRMObject, $withInvoice); } + + private function completeTask($startTask, $endTask) { + $startTask['status'] = PerfexCRMTaskStatus::COMPLETED; + $endTask['status'] = PerfexCRMTaskStatus::IN_PROGRESS; + + return [$startTask, $endTask]; + } }