From b08ba3e71627cb60474d41891c7554a0f8e8ca84 Mon Sep 17 00:00:00 2001 From: Dillon Date: Wed, 22 Mar 2023 22:19:31 +0800 Subject: [PATCH 01/99] Exchange - changes code sync --- app/Classes/Jobs/UpdatePerfexCRMInvoice.php | 7 +- .../CreatePerfexCRMInvoiceProcessor.php | 7 +- .../TransactionToPerfexCRMProcessor.php | 83 ++++++++++--------- .../Processors/UpdatePerfexCRMProcessor.php | 58 +++++++++---- .../Services/FetchesPerfexCRMMilestone.php | 11 ++- .../Services/FetchesPerfexCRMTask.php | 21 ++++- .../Services/UpdatesTransactionStatus.php | 15 ++-- 7 files changed, 122 insertions(+), 80 deletions(-) diff --git a/app/Classes/Jobs/UpdatePerfexCRMInvoice.php b/app/Classes/Jobs/UpdatePerfexCRMInvoice.php index 64f6e02d..d9c85637 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMInvoice.php +++ b/app/Classes/Jobs/UpdatePerfexCRMInvoice.php @@ -65,9 +65,10 @@ class UpdatePerfexCRMInvoice implements ShouldQueue $orderReference = $transaction->owner->owner->owner()->first()->reference; $packingListReference = $transaction->owner->owner->reference; $projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference; - $project = (App()->make(FetchesPerfexCRMProject::class))->execute($projectName, $customer->userid); - if(!is_null($project)){ - $projectId = $project->id; + $result = (App()->make(FetchesPerfexCRMProject::class))->execute($projectName, $customer->userid); + if(isset($result->payload)){ + $project = $result->payload[0]; + $projectId = $project['id']; } } diff --git a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php index e3a3a4a5..aac2c802 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php @@ -106,9 +106,10 @@ class CreatePerfexCRMInvoiceProcessor $orderReference = $transaction->owner->owner->reference; $packingListReference = $transaction->owner->reference; $projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference; - $project = $this->fetchesPerfexCRMProject->execute($projectName, $clientId); - if(!is_null($project)){ - $projectId = $project->id; + $result = $this->fetchesPerfexCRMProject->execute($projectName, $clientId); + if(isset($result->payload)){ + $project = $result->payload[0]; + $projectId = $project['id']; } else{ $result = $this->createsPerfexCRMCustomerProject->execute($projectName, PerfexCRMProjectStatus::NOT_STARTED, $clientId); diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php index dc674d0e..4e276a47 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php @@ -51,50 +51,55 @@ class TransactionToPerfexCRMProcessor */ public function execute(Transaction $model, int $status) { - if($model->owner instanceof \App\Models\Transaction && $status == ApprovalStatus::APPROVED) - { - $packingList = $model->owner->owner; - $order = $packingList->owner()->first(); - $companyModule = $order->companyModule()->first(); - $companyName = $companyModule->name; - $companyReference = $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference; - $employee = $companyModule->employees()->first(); - $contactEmail = $employee->email; - $contactName = $employee->name; + try { + if($model->owner instanceof \App\Models\Transaction && $status == ApprovalStatus::APPROVED) + { + $packingList = $model->owner->owner; + $order = $packingList->owner()->first(); + $companyModule = $order->companyModule()->first(); + $companyName = $companyModule->name; + $companyReference = $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference; + $employee = $companyModule->employees()->first(); + $contactEmail = $employee->email; + $contactName = $employee->name; - $orderReference = $order->reference; - $packingListReference = $packingList->reference; - $projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference; + $orderReference = $order->reference; + $packingListReference = $packingList->reference; + $projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference; - $bookingMarking = $packingList->id."-".$packingList->owner->id; - $updatePerfexCRMObject = new UpdatePerfexCRMObject( - $companyName, - $companyReference, - $contactName, - $contactEmail, - $bookingMarking, - $projectName, - PerfexCRMProjectStatus::IN_PROGRESS, - [], - [ - PerfexCRMTasks::TASK_1, - PerfexCRMTasks::TASK_POST_PAYMENT_1, - PerfexCRMTasks::TASK_POST_PAYMENT_2, - PerfexCRMTasks::TASK_POST_PAYMENT_3, - PerfexCRMTasks::TASK_POST_PAYMENT_4, - ] - ); + $bookingMarking = $packingList->id."-".$packingList->owner->id; + $updatePerfexCRMObject = new UpdatePerfexCRMObject( + $companyName, + $companyReference, + $contactName, + $contactEmail, + $bookingMarking, + $projectName, + PerfexCRMProjectStatus::IN_PROGRESS, + [], + [ + PerfexCRMTasks::TASK_1, + PerfexCRMTasks::TASK_POST_PAYMENT_1, + PerfexCRMTasks::TASK_POST_PAYMENT_2, + PerfexCRMTasks::TASK_POST_PAYMENT_3, + PerfexCRMTasks::TASK_POST_PAYMENT_4, + ] + ); - UpdatePerfexCRM::dispatch($updatePerfexCRMObject); + UpdatePerfexCRM::dispatch($updatePerfexCRMObject); - $updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject( - $contactEmail, - $model, - true - ); - UpdatePerfexCRMInvoice::dispatch($updatePerfexCRMInvoiceOject)->delay(6); + $updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject( + $contactEmail, + $model, + true + ); + UpdatePerfexCRMInvoice::dispatch($updatePerfexCRMInvoiceOject)->delay(6); + } + } + catch (\Exception $exception) { + Log::error('TransactionToPerfexCRMProcessor debug:'); + Log::error($exception); } - return true; } } diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 475a2eaf..4e9bc015 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -11,6 +11,7 @@ use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMMilestone; use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMTask; use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomer; use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomerContact; +use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMTask; use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMCustomer; use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMProject; use App\Classes\Modules\PerfexCRM\DataTransferObjects\CustomerContactObject; @@ -51,8 +52,8 @@ class UpdatePerfexCRMProcessor /** @var CreatesPerfexCRMCustomerContact */ private $createsPerfexCRMCustomerContact; - /** @var UpdatesPerfexCRM */ - private $updatePerfexCRM; + /** @var UpdatesPerfexCRMTask */ + private $updatesPerfexCRMTask; /** @var UpdatesPerfexCRMCustomer */ private $updatesPerfexCRMCustomer; @@ -70,6 +71,7 @@ class UpdatePerfexCRMProcessor * @param FetchesPerfexCRMTask $fetchesPerfexCRMTask * @param CreatesPerfexCRMCustomer $createsPerfexCRMCustomer * @param CreatesPerfexCRMCustomerContact $createsPerfexCRMCustomerContact + * @param UpdatesPerfexCRMTask $updatesPerfexCRMTask * @param UpdatesPerfexCRMCustomer $updatesPerfexCRMCustomer * @param UpdatesPerfexCRMProject $updatesPerfexCRMProject */ @@ -82,6 +84,7 @@ class UpdatePerfexCRMProcessor FetchesPerfexCRMTask $fetchesPerfexCRMTask, CreatesPerfexCRMCustomer $createsPerfexCRMCustomer, CreatesPerfexCRMCustomerContact $createsPerfexCRMCustomerContact, + UpdatesPerfexCRMTask $updatesPerfexCRMTask, UpdatesPerfexCRMCustomer $updatesPerfexCRMCustomer, UpdatesPerfexCRMProject $updatesPerfexCRMProject) { @@ -94,6 +97,7 @@ class UpdatePerfexCRMProcessor $this->fetchesPerfexCRMTask = $fetchesPerfexCRMTask; $this->createsPerfexCRMCustomer = $createsPerfexCRMCustomer; $this->createsPerfexCRMCustomerContact = $createsPerfexCRMCustomerContact; + $this->updatesPerfexCRMTask = $updatesPerfexCRMTask; $this->updatesPerfexCRMCustomer = $updatesPerfexCRMCustomer; $this->updatesPerfexCRMProject = $updatesPerfexCRMProject; } @@ -154,19 +158,25 @@ class UpdatePerfexCRMProcessor } // Get existing or create project, project has to exist first before milestone can appear under it - $result = $this->createsPerfexCRMCustomerProject->execute($updatePerfexCRMObject->getProjectName(), $updatePerfexCRMObject->getProjectStatus(), $crmClientId); - if(isset($result->payload)){ //Here means project creation successful - $projectId = $result->payload['project_id']; - } - else{ - $project = $this->fetchesPerfexCRMProject->execute($updatePerfexCRMObject->getProjectName(), $crmClientId); - $projectId = $project->id; + $result = $this->fetchesPerfexCRMProject->execute($updatePerfexCRMObject->getProjectName(), $crmClientId); + + if(isset($result->payload)){ + $project = $result->payload[0]; + $projectId = $project['id']; + //if the project status is anything but PerfexCRMProjectStatus::NOT_STARTED, update the project - if($updatePerfexCRMObject->getProjectStatus() != PerfexCRMProjectStatus::NOT_STARTED) + if($updatePerfexCRMObject->getProjectStatus() != PerfexCRMProjectStatus::NOT_STARTED && $project['status'] == PerfexCRMProjectStatus::NOT_STARTED) { $this->updatesPerfexCRMProject->execute($project, $updatePerfexCRMObject->getProjectStatus()); } - } + } + else{ + $result = $this->createsPerfexCRMCustomerProject->execute($updatePerfexCRMObject->getProjectName(), $updatePerfexCRMObject->getProjectStatus(), $crmClientId); + if(isset($result->payload)){ //Here means project creation successful + $projectId = $result->payload['project_id']; + } + } + $tasks = $updatePerfexCRMObject->getTaskNames(); if(count($tasks) > 0){ @@ -177,14 +187,16 @@ class UpdatePerfexCRMProcessor if($tasks[$count]['milestone'] != "") //Create milestone only if it is defined { // Get existing or create milestone, milestone has to exist first before task can appear under it - $result = $this->createsPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId, $count); + $result = $this->fetchesPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId); if(isset($result->payload)){ - $milestoneId = $result->payload['milestone_id']; + $array = json_decode(json_encode($result->payload[0]), true); + $milestoneId = $array['id']; } else{ - $milestone = $this->fetchesPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId); - $array = json_decode(json_encode($milestone), true); - $milestoneId = $array[0]['id']; + $result = $this->createsPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId, $count); + if(isset($result->payload)){ + $milestoneId = $result->payload['milestone_id']; + } } } @@ -194,9 +206,19 @@ class UpdatePerfexCRMProcessor } // Get existing or create task - $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $tasks[$count]['department'], $taskStatus); - if(is_null($result)){ + $result = $this->fetchesPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, 'project', $projectId); + //cief todo: need to cater in case of task is completed? what situation will an update not require + if(isset($result->payload)){ break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously + //The following are code not needed at Shipping Portal, Exchange need certain task's status to be updated dynamically + // if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED && $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED) + // { + // $task = $result->payload[0]; + // $result = $this->updatesPerfexCRMTask->execute($task['id'], $task['name'], $task['milestone'], $task['rel_id'], $taskStatus); + // } + } + else{ + $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $tasks[$count]['department'], $taskStatus); } } } diff --git a/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMMilestone.php b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMMilestone.php index 8a5ba559..30ae0737 100644 --- a/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMMilestone.php +++ b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMMilestone.php @@ -16,9 +16,14 @@ class FetchesPerfexCRMMilestone */ public function execute(string $milestoneName, string $projectId) { try{ - $response = Http::withHeaders([ - 'authtoken' => config('perfexcrm.api_key'),]) - ->get(config('perfexcrm.base_url').'/api/milestones/bynameandprojectid/'.rawurlencode($milestoneName).'/'.$projectId); + $data = [ + 'name' => $milestoneName, + 'project_id' => $projectId, + ]; + + $response = Http::asForm()->withHeaders([ + 'authtoken' => config('perfexcrm.api_key')]) + ->post(config('perfexcrm.base_url').'/api/milestones/bynameandprojectid', $data); if($response->successful()){ $data = $response->json(); diff --git a/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php index 97707acb..6848705f 100644 --- a/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php +++ b/app/Classes/Modules/PerfexCRM/Services/FetchesPerfexCRMTask.php @@ -11,14 +11,27 @@ class FetchesPerfexCRMTask /** * @param string $taskName * @param string $milestoneId + * @param string $relType + * @param string $relId * @return null|object * @throws MalformedRequestException */ - public function execute(string $taskName, string $milestoneId) { + public function execute(string $taskName, string $milestoneId, string $relType, string $relId) { try{ - $response = Http::withHeaders([ - 'authtoken' => config('perfexcrm.api_key'),]) - ->get(config('perfexcrm.base_url').'/api/tasks/bynameandmilestoneid/'.rawurlencode($taskName).'/'.$milestoneId); + $data = [ + 'name' => $taskName, + 'rel_type' => $relType, + 'rel_id' => $relId, + ]; + + if($milestoneId != '') { + $newItem = ['milestone' => $milestoneId ]; + $data = array_merge($data, $newItem); + } + + $response = Http::asForm()->withHeaders([ + 'authtoken' => config('perfexcrm.api_key')]) + ->post(config('perfexcrm.base_url').'/api/tasks/customsearch', $data); if($response->successful()){ $data = $response->json(); diff --git a/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php index 2928f36f..f5332233 100644 --- a/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php +++ b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php @@ -5,25 +5,19 @@ namespace App\Classes\Modules\Transactions\Services; use App\Classes\General\Eloquent\AbstractUpdateRecord; use App\Models\Transaction; use App\Classes\Modules\PerfexCRM\Processors\TransactionToPerfexCRMProcessor; -use App\Classes\Modules\PerfexCRM\Processors\NewLeadTaskToPerfexCRMProcessor; class UpdatesTransactionStatus extends AbstractUpdateRecord { /** @var TransactionToPerfexCRMProcessor */ private $transactionToPerfexCRMProcessor; - /** @var NewLeadTaskToPerfexCRMProcessor */ - private $newLeadTaskToPerfexCRMProcessor; - /** * UpdatesTransactionStatus constructor. * @param TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor - * @param NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor */ - public function __construct(TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor, NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor) + public function __construct(TransactionToPerfexCRMProcessor $transactionToPerfexCRMProcessor) { $this->transactionToPerfexCRMProcessor = $transactionToPerfexCRMProcessor; - $this->newLeadTaskToPerfexCRMProcessor = $newLeadTaskToPerfexCRMProcessor; } /** @@ -34,11 +28,12 @@ class UpdatesTransactionStatus extends AbstractUpdateRecord */ public function execute(Transaction $model, int $status) { + $model->status = $status; + $result = $this->handler($model); + if(config('perfexcrm.is_enabled') == 'true'){ $this->transactionToPerfexCRMProcessor->execute($model, $status); - // $this->newLeadTaskToPerfexCRMProcessor->execute(); } - $model->status = $status; - return $this->handler($model); + return $result; } } From 119e58c1c976495694b0714a12b65ae17060d1b4 Mon Sep 17 00:00:00 2001 From: Dillon Date: Thu, 23 Mar 2023 04:18:17 +0800 Subject: [PATCH 02/99] Added new task, new task details such as priority and due date + some cleanup --- app/Classes/Jobs/InitializePerfexCRM.php | 33 --- .../CreateTaskPerfexCRMObject.php | 26 ++- .../CreatePerfexCRMTaskProcessor.php | 2 + .../InitializePerfexCRMProcessor.php | 195 ------------------ .../PackingListToPerfexCRMProcessor.php | 1 - .../TransactionToPerfexCRMProcessor.php | 7 +- .../Processors/UpdatePerfexCRMProcessor.php | 4 +- .../Services/CreatesPerfexCRMTask.php | 19 +- .../Constants/PerfexCRMTaskPriority.php | 17 ++ .../ValueObjects/Constants/PerfexCRMTasks.php | 44 +++- docker-setup/nginx/default.conf | 4 + 11 files changed, 100 insertions(+), 252 deletions(-) delete mode 100644 app/Classes/Jobs/InitializePerfexCRM.php delete mode 100644 app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php create mode 100644 app/Classes/ValueObjects/Constants/PerfexCRMTaskPriority.php diff --git a/app/Classes/Jobs/InitializePerfexCRM.php b/app/Classes/Jobs/InitializePerfexCRM.php deleted file mode 100644 index ac77f87e..00000000 --- a/app/Classes/Jobs/InitializePerfexCRM.php +++ /dev/null @@ -1,33 +0,0 @@ -initialPerfexCRMObject = $initialPerfexCRMObject; - } - - public function handle() - { - (App()->make(InitializePerfexCRMProcessor::class))->execute($this->initialPerfexCRMObject); - } -} diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php index 8923ec01..6c6354f1 100644 --- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php +++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/CreateTaskPerfexCRMObject.php @@ -36,7 +36,13 @@ class CreateTaskPerfexCRMObject implements DataTransferObject /** @var string */ private $department; - public function __construct(string $email, string $name, string $description, string $leadId, string $projectId, string $milestoneId, string $reference, string $onTaskCompletion, string $status, string $department) + /** @var string */ + private $priority; + + /** @var string */ + private $duedate; + + public function __construct(string $email, string $name, string $description, string $leadId, string $projectId, string $milestoneId, string $reference, string $onTaskCompletion, string $status, string $department, string $priority, string $duedate) { $this->email = $email; $this->name = $name; @@ -48,6 +54,8 @@ class CreateTaskPerfexCRMObject implements DataTransferObject $this->onTaskCompletion = $onTaskCompletion; $this->status = $status; $this->department = $department; + $this->priority = $priority; + $this->duedate = $duedate; } /** @@ -134,4 +142,20 @@ class CreateTaskPerfexCRMObject implements DataTransferObject { return $this->department; } + + /** + * @return string + */ + public function getPriority(): string + { + return $this->priority; + } + + /** + * @return string + */ + public function getDuedate(): string + { + return $this->duedate; + } } diff --git a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php index f70760f8..c16a4e1b 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMTaskProcessor.php @@ -35,6 +35,8 @@ class CreatePerfexCRMTaskProcessor $createTaskPerfexCRMObject->getOnTaskCompletion(), $createTaskPerfexCRMObject->getDepartment(), $createTaskPerfexCRMObject->getStatus(), + $createTaskPerfexCRMObject->getPriority(), + $createTaskPerfexCRMObject->getDuedate() ); return true; } diff --git a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php deleted file mode 100644 index 82ef0d36..00000000 --- a/app/Classes/Modules/PerfexCRM/Processors/InitializePerfexCRMProcessor.php +++ /dev/null @@ -1,195 +0,0 @@ -convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer; - $this->createsPerfexCRMCustomerProject = $createsPerfexCRMCustomerProject; - $this->createsPerfexCRMMilestone = $createsPerfexCRMMilestone; - $this->createsPerfexCRMTask = $createsPerfexCRMTask; - $this->fetchesPerfexCRMProject = $fetchesPerfexCRMProject; - $this->fetchesPerfexCRMMilestone = $fetchesPerfexCRMMilestone; - $this->fetchesPerfexCRMTask = $fetchesPerfexCRMTask; - $this->createsPerfexCRMCustomer = $createsPerfexCRMCustomer; - $this->createsPerfexCRMCustomerContact = $createsPerfexCRMCustomerContact; - $this->updatesPerfexCRMCustomer = $updatesPerfexCRMCustomer; - } - - /** - * @param InitialPerfexCRMObject $initialPerfexCRMObject - * @return null|object - * @throws \App\Classes\Exceptions\MalformedRequestException - */ - public function execute(InitialPerfexCRMObject $initialPerfexCRMObject) { - - // Customer has to exist first before Project can appear under it - // Check with Perfex CRM, if this user (email) was previously a lead, should automatically now become a customer - $crmCompany = $initialPerfexCRMObject->getCompanyName(); - $result = $this->convertsPerfexCRMLeadToCustomer->execute($initialPerfexCRMObject->getContactEmail()); - if(isset($result->payload)){ - $crmClientId = $result->payload['client_id']; - if (isset($result->payload['company'])) { - $crmCompany = $result->payload['company']; - } - } - else{ - //if reach this point, this means this user is not a official customer nor is a lead in crm - //Create Customer has 2 parts: Create Company (client), Create Contact - $result = $this->createsPerfexCRMCustomer->execute($crmCompany); - if(is_null($result)){ - $crmCompany = $crmCompany." 2"; - $result = $this->createsPerfexCRMCustomer->execute($crmCompany); - } - - $crmClientId = $result->payload['clientId']; - - $customerContactObject = new CustomerContactObject( - $crmClientId, - $initialPerfexCRMObject->getContactName(), - $initialPerfexCRMObject->getContactName(), - $initialPerfexCRMObject->getContactEmail(), - "pU^T@sC#9Q", - "on", - "on" - ); - $result = $this->createsPerfexCRMCustomerContact->execute($customerContactObject); - } - - //Update custom fields to identify company reference from exchange or shipping portal - $value_exists = false; - if (isset($result->payload['customfields'])) { - foreach ($result->payload['customfields'] as $element) { - if ($element['value'] === $initialPerfexCRMObject->getCompanyReference()) { - $value_exists = true; - break; - } - } - } - if(!$value_exists); - { - $result = $this->updatesPerfexCRMCustomer->execute($crmClientId, $crmCompany, $initialPerfexCRMObject->getCompanyReference()); - } - - // Get existing or create project, project has to exist first before milestone can appear under it - $result = $this->createsPerfexCRMCustomerProject->execute($initialPerfexCRMObject->getProjectName(), $initialPerfexCRMObject->getProjectStatus(), $crmClientId); - if(isset($result->payload)){ //Here means project creation successful - $projectId = $result->payload['project_id']; - } - else{ - $projectId = $this->fetchesPerfexCRMProject->execute($initialPerfexCRMObject->getProjectName(), $crmClientId)->id; - } - - $tasks = $initialPerfexCRMObject->getTaskNames(); - if(count($tasks) > 0){ - - //Create tasks with milestone - for($count=0; $count < count($tasks); $count++) { - $milestoneId = 0; //By default milestoneId is 0, having this set at individual task is optional - if($tasks[$count]['milestone'] != "") //Create milestone only if it is defined - { - // Get existing or create milestone, milestone has to exist first before task can appear under it - $result = $this->createsPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId, $count); - if(isset($result->payload)){ - $milestoneId = $result->payload['milestone_id']; - } - else{ - $milestone = $this->fetchesPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId); - $array = json_decode(json_encode($milestone), true); - $milestoneId = $array[0]['id']; - } - } - - $taskStatus = PerfexCRMTaskStatus::NOT_STARTED; - if($tasks[$count]['status'] != ''){ - $taskStatus = $tasks[$count]['status']; - } - - // Get existing or create task - $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'],$tasks[$count]['department'], $taskStatus); - if(is_null($result)){ - break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously - } - } - } - return true; - } - -} diff --git a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php index 0be1cd0d..5445914c 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php @@ -20,7 +20,6 @@ class PackingListToPerfexCRMProcessor { try { if($packingList->owner instanceof \App\Models\Order) { - Log::error(json_encode($packingList)); $order = $packingList->owner; $companyModule = $order->companyModule()->first(); $connection = $companyModule->inviters()->withPivot('invitee_reference')->first(); diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php index 4e276a47..6049fac0 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php @@ -3,7 +3,6 @@ namespace App\Classes\Modules\PerfexCRM\Processors; use App\Classes\Modules\PerfexCRM\Processors\UpdatePerfexCRMProcessor; -use App\Classes\Modules\PerfexCRM\Processors\InitializePerfexCRMProcessor; use App\Classes\Modules\PerfexCRM\Services\Init; use App\Classes\Modules\Companies\Services\FetchesCompany; use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject; @@ -26,19 +25,15 @@ class TransactionToPerfexCRMProcessor /** @var UpdatePerfexCRMProcessor */ private $updatePerfexCRMProcessor; - /** @var InitializePerfexCRMProcessor */ - private $initializePerfexCRMProcessor; /** * TransactionToPerfexCRMProcessor constructor. * @param UpdatePerfexCRMProcessor $updatePerfexCRMProcessor - * @param InitializePerfexCRMProcessor $initializePerfexCRMProcessor * @param FetchesCompany $fetchesCompany */ - public function __construct(UpdatePerfexCRMProcessor $updatePerfexCRMProcessor, InitializePerfexCRMProcessor $initializePerfexCRMProcessor, FetchesCompany $fetchesCompany) + public function __construct(UpdatePerfexCRMProcessor $updatePerfexCRMProcessor, FetchesCompany $fetchesCompany) { $this->updatePerfexCRMProcessor = $updatePerfexCRMProcessor; - $this->initializePerfexCRMProcessor = $initializePerfexCRMProcessor; $this->fetchesCompany = $fetchesCompany; } diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 4e9bc015..0e804ea8 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -214,11 +214,11 @@ class UpdatePerfexCRMProcessor // if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED && $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED) // { // $task = $result->payload[0]; - // $result = $this->updatesPerfexCRMTask->execute($task['id'], $task['name'], $task['milestone'], $task['rel_id'], $taskStatus); + // $result = $this->updatesPerfexCRMTask->execute($task['id'], $task['name'], $task['milestone'], $task['rel_id'], $taskStatus, $task['startdate'], is_null($task['duedate']) ? '': $task['duedate']); // } } else{ - $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $tasks[$count]['department'], $taskStatus); + $result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $tasks[$count]['department'], $taskStatus, $tasks[$count]['priority'], $tasks[$count]['duedate']); } } } diff --git a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php index 8d75989a..f2f461a4 100644 --- a/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php +++ b/app/Classes/Modules/PerfexCRM/Services/CreatesPerfexCRMTask.php @@ -15,13 +15,16 @@ class CreatesPerfexCRMTask * @param string $leadId * @param string $milestoneId * @param string $projectId - * @param string $reference, default: '' - * @param string $on_task_completion, default: '' - * @param string $status, default: 1 + * @param string $reference + * @param string $on_task_completion + * @param string $department + * @param string $status + * @param string $priority + * @param string $duedate * @return null|object * @throws MalformedRequestException */ - public function execute(string $taskName, string $taskDescription, string $leadId, string $milestoneId, string $projectId, string $reference = '', string $on_task_completion = '', string $department = '', string $status = "1") { + public function execute(string $taskName, string $taskDescription, string $leadId, string $milestoneId, string $projectId, string $reference, string $on_task_completion, string $department, string $status, string $priority, string $duedate) { try{ $custom_fields = []; if($department != ""){ @@ -43,7 +46,9 @@ class CreatesPerfexCRMTask 'is_system_created' => 1, 'reference' => $reference, 'on_task_completion' => $on_task_completion, - 'custom_fields' => $custom_fields + 'custom_fields' => $custom_fields, + 'priority' => $priority, + 'duedate' => date('Y-m-d', strtotime('+' . $duedate . ' days')), ]; if($leadId != '') { @@ -58,7 +63,9 @@ class CreatesPerfexCRMTask 'is_system_created' => 1, 'reference' => $reference, 'on_task_completion' => $on_task_completion, - 'custom_fields' => $custom_fields + 'custom_fields' => $custom_fields, + 'priority' => $priority, + 'duedate' => date('Y-m-d', strtotime('+' . $duedate . ' days')), ]; } diff --git a/app/Classes/ValueObjects/Constants/PerfexCRMTaskPriority.php b/app/Classes/ValueObjects/Constants/PerfexCRMTaskPriority.php new file mode 100644 index 00000000..ead37aba --- /dev/null +++ b/app/Classes/ValueObjects/Constants/PerfexCRMTaskPriority.php @@ -0,0 +1,17 @@ + '', 'on_task_completion' => '', 'department' => '', - 'status' => PerfexCRMTaskStatus::COMPLETED + 'status' => PerfexCRMTaskStatus::COMPLETED, + 'priority' => PerfexCRMTaskPriority::DEFAULT, + 'duedate' => 0 ]; public const TASK_POST_PAYMENT_1 = [ @@ -31,7 +33,9 @@ class PerfexCRMTasks 'reference' => 'TASK_POST_PAYMENT_1', 'on_task_completion' => 'TASK_POST_PAYMENT_2', 'department' => 'Accounts', - 'status' => PerfexCRMTaskStatus::IN_PROGRESS + 'status' => PerfexCRMTaskStatus::IN_PROGRESS, + 'priority' => PerfexCRMTaskPriority::HIGH, + 'duedate' => 0 ]; public const TASK_POST_PAYMENT_2 = [ 'name' => 'Approve Payment', @@ -47,7 +51,9 @@ class PerfexCRMTasks 'reference' => 'TASK_POST_PAYMENT_2', 'on_task_completion' => 'TASK_POST_PAYMENT_3', 'department' => 'Accounts', - 'status' => '' + 'status' => '', + 'priority' => PerfexCRMTaskPriority::HIGH, + 'duedate' => 0 ]; public const TASK_POST_PAYMENT_3 = [ 'name' => 'Issue Shipping Autocount Invoince', @@ -63,7 +69,21 @@ class PerfexCRMTasks 'reference' => 'TASK_POST_PAYMENT_3', 'on_task_completion' => 'TASK_POST_PAYMENT_4', 'department' => 'Accounts', - 'status' => '' + 'status' => '', + 'priority' => PerfexCRMTaskPriority::MEDIUM, + 'duedate' => 1 + ]; + public const TASK_POST_PAYMENT_3_1 = [ + 'name' => 'Issue Shipping Autocount OR', + 'description' => '○ Purpose: To issue an invoice for the customer\'s payment in accounting software.
+ ○ Outcomes: An invoice will be issued in accounting software for the customer\'s payment.
', + 'milestone' => '', + 'reference' => 'TASK_POST_PAYMENT_3_1', + 'on_task_completion' => 'TASK_POST_PAYMENT_4', + 'department' => 'Accounts', + 'status' => '', + 'priority' => PerfexCRMTaskPriority::DEFAULT, + 'duedate' => 0 ]; public const TASK_POST_PAYMENT_4 = [ 'name' => 'Knockoff Invoice', @@ -79,7 +99,9 @@ class PerfexCRMTasks 'reference' => 'TASK_POST_PAYMENT_4', 'on_task_completion' => '', 'department' => 'Accounts', - 'status' => '' + 'status' => '', + 'priority' => PerfexCRMTaskPriority::MEDIUM, + 'duedate' => 1 ]; public const TASK_LOADED_CONTAINER_1 = [ @@ -94,7 +116,9 @@ class PerfexCRMTasks 'reference' => 'TASK_LOADED_CONTAINER_1', 'on_task_completion' => 'TASK_LOADED_CONTAINER_2', 'department' => 'Operations', - 'status' => PerfexCRMTaskStatus::IN_PROGRESS + 'status' => PerfexCRMTaskStatus::IN_PROGRESS, + 'priority' => PerfexCRMTaskPriority::HIGH, + 'duedate' => 1 ]; public const TASK_LOADED_CONTAINER_2 = [ @@ -108,7 +132,9 @@ class PerfexCRMTasks 'reference' => 'TASK_LOADED_CONTAINER_2', 'on_task_completion' => '', 'department' => 'Customer Services', - 'status' => '' + 'status' => '', + 'priority' => PerfexCRMTaskPriority::HIGH, + 'duedate' => 1 ]; @@ -126,6 +152,8 @@ class PerfexCRMTasks 'reference' => 'TASK_IDENTIFICATION_1', 'on_task_completion' => '', 'department' => 'Operations', - 'status' => PerfexCRMTaskStatus::IN_PROGRESS + 'status' => PerfexCRMTaskStatus::IN_PROGRESS, + 'priority' => PerfexCRMTaskPriority::DEFAULT, + 'duedate' => 0 ]; } diff --git a/docker-setup/nginx/default.conf b/docker-setup/nginx/default.conf index 0f052b34..d1392c4d 100644 --- a/docker-setup/nginx/default.conf +++ b/docker-setup/nginx/default.conf @@ -23,5 +23,9 @@ server { fastcgi_intercept_errors on; fastcgi_keep_conn on; fastcgi_param PHP_VALUE "auto_prepend_file= \n allow_url_include=Off \n output_buffering=Off \n output_buffering=4096"; + proxy_send_timeout 3600; + proxy_read_timeout 3600; + fastcgi_send_timeout 3600; + fastcgi_read_timeout 3600; } } From f5df1adff827b778ef03606746f7ec01a1a21ae4 Mon Sep 17 00:00:00 2001 From: Dillon Date: Thu, 23 Mar 2023 04:31:35 +0800 Subject: [PATCH 03/99] Fix a problem with new registration uploadin documentg --- .../PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php index d2fdf961..89b66638 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/NewLeadTaskToPerfexCRMProcessor.php @@ -4,6 +4,7 @@ namespace App\Classes\Modules\PerfexCRM\Processors; use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject; use App\Classes\Jobs\CreatePerfexCRMSingleTask; +use App\Classes\ValueObjects\Constants\PerfexCRMTaskPriority; use App\Classes\ValueObjects\Constants\PerfexCRMTasks; use App\Models\Company; @@ -30,7 +31,9 @@ class NewLeadTaskToPerfexCRMProcessor "", "", PerfexCRMTasks::TASK_IDENTIFICATION_1['status'], - PerfexCRMTasks::TASK_IDENTIFICATION_1['department'] + PerfexCRMTasks::TASK_IDENTIFICATION_1['department'], + PerfexCRMTaskPriority::DEFAULT, + "0" ); CreatePerfexCRMSingleTask::dispatch($createTaskPerfexCRMObject); From 9d442c8cc4da56bec058918dae9ac4f03513b6b1 Mon Sep 17 00:00:00 2001 From: Dillon Date: Fri, 24 Mar 2023 03:14:57 +0800 Subject: [PATCH 04/99] CRM Task with dynamic data --- app/Classes/Jobs/UpdatePerfexCRMPrelude.php | 88 +++++++++++++++++++ .../UpdatePerfexCRMObject.php | 15 ++-- .../PackingListToPerfexCRMProcessor.php | 3 +- .../TransactionToPerfexCRMProcessor.php | 3 +- .../Processors/UpdatePerfexCRMProcessor.php | 2 +- .../Services/UpdatesPerfexCRMProject.php | 8 +- .../ValueObjects/Constants/PerfexCRMTasks.php | 22 ++--- 7 files changed, 112 insertions(+), 29 deletions(-) create mode 100644 app/Classes/Jobs/UpdatePerfexCRMPrelude.php diff --git a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php new file mode 100644 index 00000000..22a1c4cd --- /dev/null +++ b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php @@ -0,0 +1,88 @@ +packingList = $packingList; + $this->transaction = $transaction; + $this->updatePerfexCRMObject = $updatePerfexCRMObject; + $this->nextJob = $nextJob; + } + + public function handle() + { + if(is_null($this->packingList)){ + $this->packingList = $this->transaction->owner->owner; + } + $amount = 0.00; + if(!is_null($this->transaction)){ + $amount = $this->transaction->amount; + } + $data = [ + 'amount' => number_format($amount, 2, '.', ''), + 'link_order' => config('app.url').'/order/show/'.$this->packingList->owner->reference, + 'link_autocount_or' => 'https://docs.google.com/spreadsheets/d/1Q3rJBGQ9Bo04HZp5WR9zbLp7pIW2kfDYsabxG7JON-4/edit#gid=2013983170', + 'link_perfex' => 'https://perfex.cief-malaysia.com/admin/projects/view/89', + ]; + + + $result = $this->replacePlaceholders($this->updatePerfexCRMObject->getTasks(), $data); + $this->updatePerfexCRMObject->setTasks($result); + $this->nextJob::dispatch($this->updatePerfexCRMObject); + } + + function replacePlaceholders($template, $data, $prefix = '') + { + foreach ($template as $key => $value) { + foreach ($data as $dataKey => $dataValue) { + if (is_array($dataValue)) { + $template[$key] = $this->replacePlaceholders($template[$key], $dataValue, $dataKey); + } else { + if ($prefix != '') { + $template[$key] = str_replace('{' .$prefix. "." .$dataKey . '}', $dataValue, $template[$key]); + } else { + $template[$key] = str_replace('{' . $dataKey . '}', $dataValue, $template[$key]); + } + } + } + } + + return $template; + } + +} diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php index 42af2b54..d5335b4f 100644 --- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php +++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php @@ -32,10 +32,10 @@ class UpdatePerfexCRMObject implements DataTransferObject private $milestoneNames; /** @var array */ - private $taskNames; + private $tasks; - public function __construct(string $companyName, string $companyReference, string $contactName, string $contactEmail, string $bookingMarking, string $projectName, int $projectStatus, array $milestoneNames, array $taskNames) + public function __construct(string $companyName, string $companyReference, string $contactName, string $contactEmail, string $bookingMarking, string $projectName, int $projectStatus, array $milestoneNames, array $tasks) { $this->companyName = $companyName; @@ -46,7 +46,7 @@ class UpdatePerfexCRMObject implements DataTransferObject $this->projectName = $projectName; $this->projectStatus = $projectStatus; $this->milestoneNames = $milestoneNames; - $this->taskNames = $taskNames; + $this->tasks = $tasks; } /** @@ -116,8 +116,13 @@ class UpdatePerfexCRMObject implements DataTransferObject /** * @return array */ - public function getTaskNames(): array + public function getTasks(): array { - return $this->taskNames; + return $this->tasks; + } + + public function setTasks($tasks) + { + $this->tasks = $tasks; } } diff --git a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php index 5445914c..d0d70d73 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php @@ -5,6 +5,7 @@ namespace App\Classes\Modules\PerfexCRM\Processors; use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject; use App\Classes\ValueObjects\Constants\PerfexCRMTasks; use App\Classes\Jobs\UpdatePerfexCRM; +use App\Classes\Jobs\UpdatePerfexCRMPrelude; use App\Models\PackingList; use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus; use Illuminate\Support\Facades\Log; @@ -47,7 +48,7 @@ class PackingListToPerfexCRMProcessor PerfexCRMTasks::TASK_LOADED_CONTAINER_2, ] ); - UpdatePerfexCRM::dispatch($updatePerfexCRMObject); + UpdatePerfexCRMPrelude::dispatch($packingList, null, $updatePerfexCRMObject, UpdatePerfexCRM::class); } } catch (\Exception $exception){ Log::error(json_encode('PackingListToPerfexCRMProcessor debug:')); diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php index 6049fac0..cf302286 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php @@ -14,6 +14,7 @@ use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\Jobs\UpdatePerfexCRMInvoice; use App\Classes\Jobs\UpdatePerfexCRM; +use App\Classes\Jobs\UpdatePerfexCRMPrelude; use App\Models\Transaction; use Illuminate\Support\Facades\Log; @@ -81,7 +82,7 @@ class TransactionToPerfexCRMProcessor ] ); - UpdatePerfexCRM::dispatch($updatePerfexCRMObject); + UpdatePerfexCRMPrelude::dispatch(null, $model, $updatePerfexCRMObject, UpdatePerfexCRM::class); $updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject( $contactEmail, diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 0e804ea8..6bec0e4f 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -178,7 +178,7 @@ class UpdatePerfexCRMProcessor } - $tasks = $updatePerfexCRMObject->getTaskNames(); + $tasks = $updatePerfexCRMObject->getTasks(); if(count($tasks) > 0){ //Create tasks with milestone diff --git a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMProject.php b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMProject.php index 6c016ff0..604f7db7 100644 --- a/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMProject.php +++ b/app/Classes/Modules/PerfexCRM/Services/UpdatesPerfexCRMProject.php @@ -17,17 +17,17 @@ class UpdatesPerfexCRMProject public function execute($project, int $status) { try{ $data = [ - 'name' => $project->name, - 'clientid' => $project->clientid, + 'name' => $project['name'], + 'clientid' => $project['clientid'], // 'rel_type' => 'customer', 'billing_type' => 1, - 'start_date' => $project->start_date, + 'start_date' => $project['start_date'], 'status' => $status ]; $response = Http::asJson()->withHeaders([ 'authtoken' => config('perfexcrm.api_key')]) - ->put(config('perfexcrm.base_url').'/api/projects/'.$project->id, $data); + ->put(config('perfexcrm.base_url').'/api/projects/'.$project['íd'], $data); if($response->successful()){ $data = $response->json(); diff --git a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php index 620aac75..4a36731f 100644 --- a/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php +++ b/app/Classes/ValueObjects/Constants/PerfexCRMTasks.php @@ -40,13 +40,7 @@ class PerfexCRMTasks public const TASK_POST_PAYMENT_2 = [ 'name' => 'Approve Payment', 'description' => '○ Purpose: To verify and approve the customer\'s payment on IZYIM
- ○ Initial Status: Not Started
- ○ Deadline:Same day
- ○ Responsible department: Accounts
- ○ Next step: Change the status of the Issue Shipping Autocount Invoice operation to "In Progress"
- ○ Additional details: When the payment method is FPX or Wallet this task is performed automatically by the system.
- ○ Dependencies: Map Transaction operation must be completed before this operation can begin.
- ○ Outcomes: The payment will be approved in IZYIM, which will release the customer’s goods for delivery.
', + ○ Amount To be Approve: RM {amount}
', 'milestone' => '', 'reference' => 'TASK_POST_PAYMENT_2', 'on_task_completion' => 'TASK_POST_PAYMENT_3', @@ -76,7 +70,8 @@ class PerfexCRMTasks public const TASK_POST_PAYMENT_3_1 = [ 'name' => 'Issue Shipping Autocount OR', 'description' => '○ Purpose: To issue an invoice for the customer\'s payment in accounting software.
- ○ Outcomes: An invoice will be issued in accounting software for the customer\'s payment.
', + ○ Note: Customer Actually Upload Bank Slip or Not, If not, Invoice Will Not be Exported
+ ○ {link_autocount_or}
', 'milestone' => '', 'reference' => 'TASK_POST_PAYMENT_3_1', 'on_task_completion' => 'TASK_POST_PAYMENT_4', @@ -107,11 +102,7 @@ class PerfexCRMTasks public const TASK_LOADED_CONTAINER_1 = [ 'name' => 'Generate Shipping Invoices', 'description' => '○ Purpose: -
- ○ Initial Status: In Progress
- ○ Deadline: Next day
- ○ Responsible department: Operation
- ○ Assignee: -
- ○ Next step: Approve Shipping Invoice change to in progress.
', + ○ Link to order page: {link_order}
', 'milestone' => '', 'reference' => 'TASK_LOADED_CONTAINER_1', 'on_task_completion' => 'TASK_LOADED_CONTAINER_2', @@ -124,10 +115,7 @@ class PerfexCRMTasks public const TASK_LOADED_CONTAINER_2 = [ 'name' => 'Approve Shipping Invoices', 'description' => '○ Purpose: -
- ○ Initial Status: Not Starteds
- ○ Deadline: Next day
- ○ Responsible department: Customer Services
- ○ Next step: -
', + ○ Link to refer Pay On Behalf or Any extra charge: : {link_perfex}
', 'milestone' => '', 'reference' => 'TASK_LOADED_CONTAINER_2', 'on_task_completion' => '', From a05609081b18c0e4e52e1cf1340c32a823db6f8f Mon Sep 17 00:00:00 2001 From: Dillon Date: Fri, 24 Mar 2023 15:15:05 +0800 Subject: [PATCH 05/99] minor code streamline --- .../Processors/TransactionToPerfexCRMProcessor.php | 10 ++++++++-- .../ApproveShippingInvoiceTransactionProcessor.php | 5 ----- .../Transactions/Services/UpdatesTransactionStatus.php | 3 ++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php index cf302286..e3e8e32e 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/TransactionToPerfexCRMProcessor.php @@ -15,6 +15,7 @@ use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\Jobs\UpdatePerfexCRMInvoice; use App\Classes\Jobs\UpdatePerfexCRM; use App\Classes\Jobs\UpdatePerfexCRMPrelude; +use App\Classes\Jobs\CreatePerfexCRMInvoice; use App\Models\Transaction; use Illuminate\Support\Facades\Log; @@ -47,7 +48,8 @@ class TransactionToPerfexCRMProcessor */ public function execute(Transaction $model, int $status) { - try { + try + { if($model->owner instanceof \App\Models\Transaction && $status == ApprovalStatus::APPROVED) { $packingList = $model->owner->owner; @@ -79,7 +81,7 @@ class TransactionToPerfexCRMProcessor PerfexCRMTasks::TASK_POST_PAYMENT_2, PerfexCRMTasks::TASK_POST_PAYMENT_3, PerfexCRMTasks::TASK_POST_PAYMENT_4, - ] + ] ); UpdatePerfexCRMPrelude::dispatch(null, $model, $updatePerfexCRMObject, UpdatePerfexCRM::class); @@ -91,6 +93,10 @@ class TransactionToPerfexCRMProcessor ); UpdatePerfexCRMInvoice::dispatch($updatePerfexCRMInvoiceOject)->delay(6); } + else if($model->owner instanceof \App\Models\PackingList && $model->status == ApprovalStatus::PENDING_SUBMISSION && $status == ApprovalStatus::APPROVED) + { + CreatePerfexCRMInvoice::dispatch($model); + } } catch (\Exception $exception) { Log::error('TransactionToPerfexCRMProcessor debug:'); diff --git a/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php index 852205cb..b8fb81c6 100644 --- a/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/ApproveShippingInvoiceTransactionProcessor.php @@ -75,11 +75,6 @@ class ApproveShippingInvoiceTransactionProcessor $user->notify(new InvoiceIssuedEmail($user, $packingList)); } - // update perfex crm - if(config('perfexcrm.is_enabled') == 'true'){ - CreatePerfexCRMInvoice::dispatch($invoice_transaction); - } - return; } diff --git a/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php index f5332233..85b85d1f 100644 --- a/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php +++ b/app/Classes/Modules/Transactions/Services/UpdatesTransactionStatus.php @@ -28,11 +28,12 @@ class UpdatesTransactionStatus extends AbstractUpdateRecord */ public function execute(Transaction $model, int $status) { + $transaction = clone($model); $model->status = $status; $result = $this->handler($model); if(config('perfexcrm.is_enabled') == 'true'){ - $this->transactionToPerfexCRMProcessor->execute($model, $status); + $this->transactionToPerfexCRMProcessor->execute($transaction, $status); } return $result; } From 329aa4b4964e7a3ff8a2cfbacf4a87060cf61175 Mon Sep 17 00:00:00 2001 From: Dillon Date: Sat, 25 Mar 2023 02:17:51 +0800 Subject: [PATCH 06/99] Minor cleanup --- .../PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php | 2 +- .../Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php index aac2c802..8cc9c517 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php @@ -69,7 +69,7 @@ class CreatePerfexCRMInvoiceProcessor $date = Carbon::parse($transaction->created_at)->format('Y-m-d'); $dueDate = Carbon::parse($transaction->created_at)->addDays(6)->startOfDay()->format('Y-m-d'); - $currency = 1; //cief TODO: To look into Malaysia and Chinese currency + $currency = 1; $subTotal = 0.00; $total = 0.00; diff --git a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php index 6bec0e4f..f786f358 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/UpdatePerfexCRMProcessor.php @@ -207,7 +207,6 @@ class UpdatePerfexCRMProcessor // Get existing or create task $result = $this->fetchesPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, 'project', $projectId); - //cief todo: need to cater in case of task is completed? what situation will an update not require if(isset($result->payload)){ break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously //The following are code not needed at Shipping Portal, Exchange need certain task's status to be updated dynamically From b25adef1072d4e8cb49b3cbb09de5ad71dae9779 Mon Sep 17 00:00:00 2001 From: Dillon Date: Sat, 25 Mar 2023 14:20:38 +0800 Subject: [PATCH 07/99] Fix another error from production logs --- .../Processors/CreatePerfexCRMInvoiceProcessor.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php index 8cc9c517..0312156d 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/CreatePerfexCRMInvoiceProcessor.php @@ -80,12 +80,14 @@ class CreatePerfexCRMInvoiceProcessor ->where('status', '=', \App\Classes\ValueObjects\Constants\ApprovalStatus::APPROVED) ->where('type', '=', \App\Classes\ValueObjects\Constants\AddressType::BILLING)->first(); - $billingStreet = $billingStreet.$addresses->street_one; - $billingStreet = $billingStreet.$addresses->street_two.','; - $billingStreet = $billingStreet.$addresses->district()->first()->name.','; - $billingStreet = $billingStreet.$addresses->postcode; - $billingStreet = $billingStreet.$addresses->state()->first()->name.','; - $billingStreet = $billingStreet.$addresses->country()->first()->name; + if ($addresses !== null) { + $billingStreet = $billingStreet.$addresses->street_one; + $billingStreet = $billingStreet.$addresses->street_two.','; + $billingStreet = $billingStreet.$addresses->district()->first()->name.','; + $billingStreet = $billingStreet.$addresses->postcode; + $billingStreet = $billingStreet.$addresses->state()->first()->name.','; + $billingStreet = $billingStreet.$addresses->country()->first()->name; + } $allowedPaymentModes = []; $invoiceItems = []; From cd93deac2659796d79c37fae6563437f16f18929 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Tue, 28 Mar 2023 15:35:13 +0800 Subject: [PATCH 08/99] change company type --- .../ValueObjects/Constants/CompanyType.php | 5 ++ app/Http/Resources/CompanyResource.php | 4 ++ .../elements/CustomerProfileComponent.vue | 21 +++++- .../forms/ChangeBusinessTypeFormComponent.vue | 65 +++++++++++++++++++ 4 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue diff --git a/app/Classes/ValueObjects/Constants/CompanyType.php b/app/Classes/ValueObjects/Constants/CompanyType.php index 61918925..7f12da36 100644 --- a/app/Classes/ValueObjects/Constants/CompanyType.php +++ b/app/Classes/ValueObjects/Constants/CompanyType.php @@ -8,4 +8,9 @@ final class CompanyType { public const COMPANY_BUSINESS = 1; + public const COMPANY_TYPE_ID = [ + self::PERSONAL_BUSINESS => "Personal Business", + self::COMPANY_BUSINESS => "Company Business", + + ]; } diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index c896c154..4590f46b 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -4,6 +4,7 @@ namespace App\Http\Resources; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\BusinessType; +use App\Classes\ValueObjects\Constants\CompanyType; use App\Classes\ValueObjects\Constants\DocumentType; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Support\Facades\Crypt; @@ -19,6 +20,8 @@ class CompanyResource extends JsonResource public function toArray($request) { $companyModule = $this->companyModules()->first(); + $companyTypeArray = CompanyType::COMPANY_TYPE_ID; + return [ 'id' => $this->id, 'hash_id' => Crypt::encryptString($this->id), @@ -26,6 +29,7 @@ class CompanyResource extends JsonResource 'debtor' => $this->debtor, 'reference' => $this->reference, 'type' => (int) $this->type, + 'type_name' => ($companyTypeArray[(int) $this->type]), 'business_type' => (int) $this->business_type, 'status' => (int) $this->status, 'segments' => SegmentResource::collection($companyModule->connections()->first()->segments), diff --git a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue index 31cb7d57..0c1e1ec1 100644 --- a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue +++ b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue @@ -16,7 +16,8 @@ -
{{item.name}} +
+ {{item.name}}
@@ -92,10 +93,24 @@
{{item.contact.phone}}
+
-
WeChat ID
-
{{item.contact.wechat_id}}
+
Business Type
+ + + +
+ {{item.type_name}} +
+ +
+
diff --git a/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue new file mode 100644 index 00000000..596114ce --- /dev/null +++ b/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue @@ -0,0 +1,65 @@ + + \ No newline at end of file From b897b007035f5412f8648c844c452999b8f139da Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 28 Mar 2023 15:53:14 +0800 Subject: [PATCH 09/99] change company type --- .../elements/CustomerProfileComponent.vue | 2 +- .../forms/ChangeBusinessTypeFormComponent.vue | 35 ++++++------------- 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue index 0c1e1ec1..ec1f4621 100644 --- a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue +++ b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue @@ -101,7 +101,7 @@ -->
-
Business Type
+
Company Type
diff --git a/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue index 596114ce..f5d70b71 100644 --- a/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue @@ -3,15 +3,15 @@
-

Edit Company Business Type

+

Edit Company Type

-
+
-
Personal
Business
-
-
-
Company
Business
+
Personal
Business
+
+
+
Company
Business
@@ -27,37 +27,24 @@ \ No newline at end of file diff --git a/resources/assets/vue/components/user/elements/UserComponent.vue b/resources/assets/vue/components/user/elements/UserComponent.vue index 601c0097..375a8ba9 100644 --- a/resources/assets/vue/components/user/elements/UserComponent.vue +++ b/resources/assets/vue/components/user/elements/UserComponent.vue @@ -31,6 +31,26 @@
+
+
+
+
Role Type
+
+
+
+
+
+ {{item.type_name }} + + + +
+ +
+
+
+
+
From f90818dbcaab54d15c05510844417d2a30b8e274 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 30 Mar 2023 12:06:33 +0800 Subject: [PATCH 22/99] updates user name and admin type api --- .../ControllersLogic/UpdateUserLogic.php | 14 ++-- .../ControllersLogic/UpdateUserRoleLogic.php | 71 +++++++++++++++++++ .../DataTransferObjects/UserObject.php | 40 +++++++++++ .../Modules/Accounts/Services/UpdatesUser.php | 7 +- .../Accounts/Services/UpdatesUserFullName.php | 24 +++++++ .../Accounts/UpdateUserRoleController.php | 19 +++++ routes/account.php | 2 + 7 files changed, 167 insertions(+), 10 deletions(-) create mode 100644 app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php create mode 100644 app/Classes/Modules/Accounts/DataTransferObjects/UserObject.php create mode 100644 app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php create mode 100644 app/Http/Controllers/Accounts/UpdateUserRoleController.php diff --git a/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php index d3ce528d..912d5e31 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserLogic.php @@ -4,7 +4,7 @@ namespace App\Classes\Modules\Accounts\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; -use App\Classes\Modules\Accounts\Services\UpdatesUser; +use App\Classes\Modules\Accounts\Services\UpdatesUserFullName; use App\Classes\Modules\Accounts\Services\FetchesUser; use App\Classes\Modules\Accounts\Standards\Rules\CanUpdateUser; use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject; @@ -29,8 +29,8 @@ class UpdateUserLogic extends AbstractControllerLogic /** @var CanUpdateUser */ private $canUpdateUser; - /** @var UpdatesUser */ - private $updatesUser; + /** @var UpdatesUserFullName */ + private $updatesUserFullName; /** @var FetchesUser */ private $fetchesUser; @@ -38,13 +38,13 @@ class UpdateUserLogic extends AbstractControllerLogic /** * UpdateAddressLogic constructor. * @param CanUpdateUser $canUpdateUser - * @param UpdatesUser $updatesUser + * @param UpdatesUserFullName $updatesUserFullName * @param FetchesUser $fetchesUSer */ - public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser) + public function __construct(CanUpdateUser $canUpdateUser, UpdatesUserFullName $updatesUserFullName, FetchesUser $fetchesUser) { $this->canUpdateUser = $canUpdateUser; - $this->updatesUser = $updatesUser; + $this->updatesUserFullName = $updatesUserFullName; $this->fetchesUser = $fetchesUser; } @@ -64,7 +64,7 @@ class UpdateUserLogic extends AbstractControllerLogic $query = $this->fetchesUser->execute(['id' => $request->route('id')]); - $query = $this->updatesUser->execute($query, $object); + $query = $this->updatesUserFullName->execute($query, $object); return $this->resourceResponse(new UserResource($query)); diff --git a/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php new file mode 100644 index 00000000..934711e7 --- /dev/null +++ b/app/Classes/Modules/Accounts/ControllersLogic/UpdateUserRoleLogic.php @@ -0,0 +1,71 @@ + 'Updated Admin Role', + 'message' => 'You have successfully updated the Admin Role' + ]; + } + + /** @var CanUpdateUser */ + private $canUpdateUser; + + /** @var UpdatesUser */ + private $updatesUser; + + /** @var FetchesUser */ + private $fetchesUser; + + /** + * UpdateAddressLogic constructor. + * @param CanUpdateUser $canUpdateUser + * @param UpdatesUser $updatesUser + * @param FetchesUser $fetchesUSer + */ + public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser) + { + $this->canUpdateUser = $canUpdateUser; + $this->updatesUser = $updatesUser; + $this->fetchesUser = $fetchesUser; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $query = $this->fetchesUser->execute(['id' => $request->route('id')]); + + $object = new UserObject($query->name, $request->input('type')); + + $this->canUpdateUser->passes($object); + + $query = $this->updatesUser->execute($query, $object); + + return $this->resourceResponse(new UserResource($query)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/DataTransferObjects/UserObject.php b/app/Classes/Modules/Accounts/DataTransferObjects/UserObject.php new file mode 100644 index 00000000..4ebbc22c --- /dev/null +++ b/app/Classes/Modules/Accounts/DataTransferObjects/UserObject.php @@ -0,0 +1,40 @@ +name = $name; + $this->type = $type; + } + + /** + * @return string + */ + public function getName(): string + { + return $this->name; + } + + /** + * @return int + */ + public function getType(): int + { + return $this->type; + } +} diff --git a/app/Classes/Modules/Accounts/Services/UpdatesUser.php b/app/Classes/Modules/Accounts/Services/UpdatesUser.php index dfccbae7..f7c6cfab 100644 --- a/app/Classes/Modules/Accounts/Services/UpdatesUser.php +++ b/app/Classes/Modules/Accounts/Services/UpdatesUser.php @@ -3,7 +3,7 @@ namespace App\Classes\Modules\Accounts\Services; use App\Classes\General\Eloquent\AbstractUpdateRecord; -use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject; +use App\Classes\Modules\Accounts\DataTransferObjects\UserObject; use App\Models\User; class UpdatesUser extends AbstractUpdateRecord @@ -11,13 +11,14 @@ class UpdatesUser extends AbstractUpdateRecord /** * @param User $model - * @param FullNameObject $object + * @param UserObject $object * @return \Illuminate\Database\Eloquent\Model * @throws \App\Classes\Exceptions\MalformedRequestException */ - public function execute(User $model, FullNameObject $object) { + public function execute(User $model, UserObject $object) { $model->name = $object->getName(); + $model->type = $object->getType(); return $this->handler($model); } diff --git a/app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php b/app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php new file mode 100644 index 00000000..9836e695 --- /dev/null +++ b/app/Classes/Modules/Accounts/Services/UpdatesUserFullName.php @@ -0,0 +1,24 @@ +name = $object->getName(); + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Accounts/UpdateUserRoleController.php b/app/Http/Controllers/Accounts/UpdateUserRoleController.php new file mode 100644 index 00000000..aef992c8 --- /dev/null +++ b/app/Http/Controllers/Accounts/UpdateUserRoleController.php @@ -0,0 +1,19 @@ +execute($request); + } +} \ No newline at end of file diff --git a/routes/account.php b/routes/account.php index 7d12785f..20d9cf4f 100644 --- a/routes/account.php +++ b/routes/account.php @@ -41,6 +41,8 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account Route::put('/update/{id}', 'UpdateUserController@update')->name('update'); Route::post('/admin/create', 'CreateAdminUserController@create')->name('admin.create'); Route::delete('/delete/{id}', 'DeleteUserController@delete')->name('delete'); + + Route::put('/update/{id}/role', 'UpdateUserRoleController@update')->name('update.role'); }); }); From e265b069d27938569965f2d9d59ed5587d66e954 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Thu, 30 Mar 2023 12:12:35 +0800 Subject: [PATCH 23/99] change button color to transparent --- .../companies/elements/CustomerProfileComponent.vue | 4 ++-- .../orders/forms/ChangeAdminRoleTypeFormComponent.vue | 2 +- .../assets/vue/components/user/elements/UserComponent.vue | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue index 391ec602..69625c6a 100644 --- a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue +++ b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue @@ -18,7 +18,7 @@
{{item.name}} -
+
@@ -107,7 +107,7 @@
{{item.type_name}} -
+
diff --git a/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue index ef64234e..cc976237 100644 --- a/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue @@ -35,7 +35,7 @@ export default { props: { - token:{ + data:{ type: Object, required: true, } diff --git a/resources/assets/vue/components/user/elements/UserComponent.vue b/resources/assets/vue/components/user/elements/UserComponent.vue index 375a8ba9..ddbf0d82 100644 --- a/resources/assets/vue/components/user/elements/UserComponent.vue +++ b/resources/assets/vue/components/user/elements/UserComponent.vue @@ -44,7 +44,7 @@ -
+
From f9b1289d28d0660bf2b75393dfe10e86e097fe6c Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Thu, 30 Mar 2023 12:28:45 +0800 Subject: [PATCH 24/99] call api --- .../orders/forms/ChangeAdminRoleTypeFormComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue index cc976237..73463d25 100644 --- a/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue @@ -53,7 +53,7 @@ window.location.replace(this.route('customers', response.payload.data.reference)); }, submitForm() { - this.submit(this.route('api.company.update.nameAndDebtor', this.data.id), 'put', this.section, true, true) + this.submit(this.route('api.account.user.updated.role', this.data.id), 'put', this.section, true, true) }, updateRoleType(type){ this.parameters.type=type; From 30ef3a7e41c1e67941a4921059d556573f28af0d Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Thu, 30 Mar 2023 12:35:30 +0800 Subject: [PATCH 25/99] fix call API bug for changeAdminRoleTypeForm --- .../orders/forms/ChangeAdminRoleTypeFormComponent.vue | 5 +---- .../orders/forms/ChangeBusinessTypeFormComponent.vue | 3 --- .../orders/forms/ChangeCustomerNameFormComponent.vue | 3 --- 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue index 73463d25..51c9a796 100644 --- a/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeAdminRoleTypeFormComponent.vue @@ -49,11 +49,8 @@ }, methods: { - successHandler(response) { - window.location.replace(this.route('customers', response.payload.data.reference)); - }, submitForm() { - this.submit(this.route('api.account.user.updated.role', this.data.id), 'put', this.section, true, true) + this.submit(this.route('api.account.user.update.role', this.data.id), 'put', this.section, true, true) }, updateRoleType(type){ this.parameters.type=type; diff --git a/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue index f1cd5b08..3404ce60 100644 --- a/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeBusinessTypeFormComponent.vue @@ -36,9 +36,6 @@ }; }, methods: { - successHandler(response) { - window.location.replace(this.route('customers', response.payload.data.reference)); - }, submitForm() { this.submit(this.route('api.company.update.type', this.data.id), 'put', this.section, true, true) }, diff --git a/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue index 71895bc6..d16d5aed 100644 --- a/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue @@ -60,9 +60,6 @@ } }, methods: { - successHandler(response) { - window.location.replace(this.route('customers', response.payload.data.reference)); - }, submitForm() { this.submit(this.route('api.company.update.nameAndDebtor', this.data.id), 'put', this.section, true, true) } From 1c703489b954372bd0fe9628760af978e395f47e Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 30 Mar 2023 12:47:02 +0800 Subject: [PATCH 26/99] update admin role type --- .../user/elements/ListAdminComponent.vue | 39 +++++++++++++++++++ .../user/elements/UserComponent.vue | 4 +- resources/views/pages/settings.blade.php | 6 +-- 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 resources/assets/vue/components/user/elements/ListAdminComponent.vue diff --git a/resources/assets/vue/components/user/elements/ListAdminComponent.vue b/resources/assets/vue/components/user/elements/ListAdminComponent.vue new file mode 100644 index 00000000..659e8602 --- /dev/null +++ b/resources/assets/vue/components/user/elements/ListAdminComponent.vue @@ -0,0 +1,39 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/user/elements/UserComponent.vue b/resources/assets/vue/components/user/elements/UserComponent.vue index ddbf0d82..1104a51d 100644 --- a/resources/assets/vue/components/user/elements/UserComponent.vue +++ b/resources/assets/vue/components/user/elements/UserComponent.vue @@ -44,7 +44,7 @@ -
+
@@ -54,7 +54,7 @@
- diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index 51c32be6..d4310d03 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -251,11 +251,7 @@
- - - +
From 575491e500f51b23d3e29dadeb8c6262b961affb Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 30 Mar 2023 14:18:22 +0800 Subject: [PATCH 27/99] search admin in settings --- .../General/Eloquent/Filters/EmailLike.php | 20 +++++ .../user/elements/ListAdminComponent.vue | 83 +++++++++++++------ 2 files changed, 79 insertions(+), 24 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/EmailLike.php diff --git a/app/Classes/General/Eloquent/Filters/EmailLike.php b/app/Classes/General/Eloquent/Filters/EmailLike.php new file mode 100644 index 00000000..2151b1c8 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/EmailLike.php @@ -0,0 +1,20 @@ +where('email', 'LIKE', '%'.$value.'%'); + } + +} \ No newline at end of file diff --git a/resources/assets/vue/components/user/elements/ListAdminComponent.vue b/resources/assets/vue/components/user/elements/ListAdminComponent.vue index 659e8602..b85c5f2b 100644 --- a/resources/assets/vue/components/user/elements/ListAdminComponent.vue +++ b/resources/assets/vue/components/user/elements/ListAdminComponent.vue @@ -1,7 +1,34 @@ \ No newline at end of file From bd81560c3d7821b335a31011102b12dc4b6cb747 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 30 Mar 2023 14:21:31 +0800 Subject: [PATCH 28/99] remove console.log --- .../assets/vue/components/user/elements/ListAdminComponent.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/assets/vue/components/user/elements/ListAdminComponent.vue b/resources/assets/vue/components/user/elements/ListAdminComponent.vue index b85c5f2b..6f88bb0b 100644 --- a/resources/assets/vue/components/user/elements/ListAdminComponent.vue +++ b/resources/assets/vue/components/user/elements/ListAdminComponent.vue @@ -60,7 +60,6 @@ methods: { search() { this.options['email_like'] = this.email; - console.log(this.options); this.currentKey+=1; }, reset() { From 2355c74b6583e6496ac06c370b88be744f72c7f1 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 30 Mar 2023 14:22:10 +0800 Subject: [PATCH 29/99] update customer/summary/monthly to 2023 records --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 11bbf1db..077efd4d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -377,7 +377,7 @@ Route::get('/export-customer-order/{marking}', 'Exports\ExportCompanyModuleSumma Route::get('/customer/summary/monthly', function () { // $containers = Container::whereMonth('loading_date', '>=', ((float)Carbon::now()->format('m') - 2))->whereYear('loading_date', (float)Carbon::now()->format('Y'))->get(); - $containers = Container::whereMonth('loading_date', '>=', 9)->whereYear('loading_date', 2022)->get(); + $containers = Container::whereMonth('loading_date', '>=', 9)->whereYear('loading_date', 2023)->get(); $marking = '769SMC'; $connection = CompanyConnection::where('invitee_reference', $marking)->first(); $companyModuleId = $connection->invitee->id; From 23002f61daa432c388fc4d52c5323c46a7313a92 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 30 Mar 2023 15:13:41 +0800 Subject: [PATCH 30/99] update admin role type --- .../assets/vue/components/user/elements/ListAdminComponent.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/assets/vue/components/user/elements/ListAdminComponent.vue b/resources/assets/vue/components/user/elements/ListAdminComponent.vue index 6f88bb0b..c008d976 100644 --- a/resources/assets/vue/components/user/elements/ListAdminComponent.vue +++ b/resources/assets/vue/components/user/elements/ListAdminComponent.vue @@ -49,11 +49,10 @@ data() { return { expanded: false, - isSuperAdmin: this.$store.getters.isSuperAdmin, currentKey: 1, email: '', options: { - 'type_in': this.isSuperAdmin ? [1, 2] : [2], + 'type_in': this.$store.getters.isSuperAdmin ? [1, 2] : [2], } } }, From 82a16a5d9dae54f4fee5794b36aaa59ef280a607 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 30 Mar 2023 17:26:19 +0800 Subject: [PATCH 31/99] update address --- .../DisplayWarehouseAddressComponent.vue | 76 ++++++ .../forms/WarehouseAddressFormComponent.vue | 230 ++++++++++++++++++ .../elements/WarehouseChargesComponent.vue | 35 ++- 3 files changed, 335 insertions(+), 6 deletions(-) create mode 100644 resources/assets/vue/components/addresses/elements/DisplayWarehouseAddressComponent.vue create mode 100644 resources/assets/vue/components/addresses/forms/WarehouseAddressFormComponent.vue diff --git a/resources/assets/vue/components/addresses/elements/DisplayWarehouseAddressComponent.vue b/resources/assets/vue/components/addresses/elements/DisplayWarehouseAddressComponent.vue new file mode 100644 index 00000000..8b440b1e --- /dev/null +++ b/resources/assets/vue/components/addresses/elements/DisplayWarehouseAddressComponent.vue @@ -0,0 +1,76 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/addresses/forms/WarehouseAddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/WarehouseAddressFormComponent.vue new file mode 100644 index 00000000..81800c43 --- /dev/null +++ b/resources/assets/vue/components/addresses/forms/WarehouseAddressFormComponent.vue @@ -0,0 +1,230 @@ + + diff --git a/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue index b82479cc..205493ae 100644 --- a/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue +++ b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue @@ -1,9 +1,9 @@ @@ -79,10 +102,10 @@ props: { data: { type: Object, - required: false - }, - section: { - default: 'warhouseListSection' + required: false, + parameters: { + + } }, }, mixins: [modalFormHandler] From 46f1368a9251866873256793aad18d1d8fd9c3c2 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Fri, 31 Mar 2023 00:29:15 +0800 Subject: [PATCH 32/99] ui and api to update warehouse contact --- .../ControllersLogic/UpdateContactLogic.php | 69 ++++++++++++++ .../Contacts/Services/FetchesContact.php | 32 +++++++ .../Contacts/Services/UpdatesContact.php | 26 ++++++ .../Contacts/UpdateContactController.php | 20 +++++ app/Http/Resources/CompanyModuleResource.php | 1 + .../companies/forms/ContactFormComponent.vue | 89 +++++++++++++++++++ .../elements/WarehouseChargesComponent.vue | 65 ++++++++++++++ routes/api.php | 2 + routes/contact.php | 11 +++ 9 files changed, 315 insertions(+) create mode 100644 app/Classes/Modules/Contacts/ControllersLogic/UpdateContactLogic.php create mode 100644 app/Classes/Modules/Contacts/Services/FetchesContact.php create mode 100644 app/Classes/Modules/Contacts/Services/UpdatesContact.php create mode 100644 app/Http/Controllers/Contacts/UpdateContactController.php create mode 100644 resources/assets/vue/components/companies/forms/ContactFormComponent.vue create mode 100644 routes/contact.php diff --git a/app/Classes/Modules/Contacts/ControllersLogic/UpdateContactLogic.php b/app/Classes/Modules/Contacts/ControllersLogic/UpdateContactLogic.php new file mode 100644 index 00000000..2a78da13 --- /dev/null +++ b/app/Classes/Modules/Contacts/ControllersLogic/UpdateContactLogic.php @@ -0,0 +1,69 @@ + 'Updated Contact', + 'message' => 'You have successfully updated the Contact' + ]; + } + + /** @var UpdatesContact */ + private $updatesContact; + + /** @var FetchesContact */ + private $fetchesContact; + + /** + * UpdateContactLogic constructor. + * @param UpdatesContact $updatesContact + * @param FetchesContact $fetchesContact + */ + public function __construct(UpdatesContact $updatesContact, FetchesContact $fetchesContact) + { + $this->updatesContact = $updatesContact; + $this->fetchesContact = $fetchesContact; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $object = new ContactObject( + $request->input('reference'), + $request->input('phone'), + $request->input('email'), + $request->input('wechat_id') + ); + + // $this->canUpdateContact->passes($object); + + $query = $this->fetchesContact->execute(['id' => $request->route('id')]); + + $query = $this->updatesContact->execute($query, $object); + + return $this->resourceResponse(new ContactResource($query)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Contacts/Services/FetchesContact.php b/app/Classes/Modules/Contacts/Services/FetchesContact.php new file mode 100644 index 00000000..3521a0dd --- /dev/null +++ b/app/Classes/Modules/Contacts/Services/FetchesContact.php @@ -0,0 +1,32 @@ +repository = $repository; + } + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Contacts/Services/UpdatesContact.php b/app/Classes/Modules/Contacts/Services/UpdatesContact.php new file mode 100644 index 00000000..4da2a44a --- /dev/null +++ b/app/Classes/Modules/Contacts/Services/UpdatesContact.php @@ -0,0 +1,26 @@ +reference = $object->getReference(); + $model->phone = $object->getPhone(); + $model->email = $object->getEmail(); + $model->wechat_id = $object->getWechatId(); + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Contacts/UpdateContactController.php b/app/Http/Controllers/Contacts/UpdateContactController.php new file mode 100644 index 00000000..fcda33a2 --- /dev/null +++ b/app/Http/Controllers/Contacts/UpdateContactController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Resources/CompanyModuleResource.php b/app/Http/Resources/CompanyModuleResource.php index 0fdb2c46..87315c71 100644 --- a/app/Http/Resources/CompanyModuleResource.php +++ b/app/Http/Resources/CompanyModuleResource.php @@ -49,6 +49,7 @@ class CompanyModuleResource extends JsonResource 'marking' => $marking, 'warehouseCharges' => array_key_exists($this->id, $segmentConstant) ? $segmentConstant[$this->id] : null, 'connections' => $this->connections, + 'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())), ]; } diff --git a/resources/assets/vue/components/companies/forms/ContactFormComponent.vue b/resources/assets/vue/components/companies/forms/ContactFormComponent.vue new file mode 100644 index 00000000..9ad6650b --- /dev/null +++ b/resources/assets/vue/components/companies/forms/ContactFormComponent.vue @@ -0,0 +1,89 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue index 205493ae..e811346a 100644 --- a/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue +++ b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue @@ -91,6 +91,71 @@
+
+
+
+ +
+
+
+
Reference
+
+
+
+
+ {{ data.contact.reference ? data.contact.reference : "-" }} +
+
+
+
+
+
+
Phone
+
+
+
+
+ {{ data.contact.phone ? data.contact.phone : '-' }} +
+
+
+
+
+
+
Email
+
+
+
+
+ {{ data.contact.email ? data.contact.email : '-' }} +
+
+
+
+
+
+
Wechat ID
+
+
+
+
+ {{ data.contact.wechat_id ? data.contact.wechat_id : '-' }} +
+
+
+
+
Edit Contact
+
+ + + +
+
+
diff --git a/routes/api.php b/routes/api.php index 9073989a..0946a13b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -62,6 +62,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/report.php'; + require __DIR__ . '/contact.php'; + }); require __DIR__ . '/announcement.php'; diff --git a/routes/contact.php b/routes/contact.php new file mode 100644 index 00000000..03549a16 --- /dev/null +++ b/routes/contact.php @@ -0,0 +1,11 @@ + 'contact', 'as' => 'contact.', 'namespace' => 'Contacts'], function () { + + Route::put('/{id}/update', 'UpdateContactController@update')->name('update'); + +}); + From 48445020fb87f798612bf4705d06425fa183d631 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Fri, 31 Mar 2023 00:41:45 +0800 Subject: [PATCH 33/99] adjust warehouse contact ui --- .../settings/elements/WarehouseChargesComponent.vue | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue index e811346a..07e2fa80 100644 --- a/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue +++ b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue @@ -99,7 +99,7 @@
-
+
Reference
@@ -111,7 +111,7 @@
-
+
Phone
@@ -123,7 +123,7 @@
-
+
Email
@@ -135,7 +135,7 @@
-
+
Wechat ID
@@ -147,6 +147,7 @@
+
Edit Contact
From 6c00a57446b4d73896bd84b8c5c82c4a255290cc Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Fri, 31 Mar 2023 15:43:04 +0800 Subject: [PATCH 34/99] smc summary report --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 11bbf1db..b3f44ab7 100644 --- a/routes/web.php +++ b/routes/web.php @@ -377,7 +377,7 @@ Route::get('/export-customer-order/{marking}', 'Exports\ExportCompanyModuleSumma Route::get('/customer/summary/monthly', function () { // $containers = Container::whereMonth('loading_date', '>=', ((float)Carbon::now()->format('m') - 2))->whereYear('loading_date', (float)Carbon::now()->format('Y'))->get(); - $containers = Container::whereMonth('loading_date', '>=', 9)->whereYear('loading_date', 2022)->get(); + $containers = Container::whereMonth('loading_date', '>=', 1)->whereYear('loading_date', 2023)->get(); $marking = '769SMC'; $connection = CompanyConnection::where('invitee_reference', $marking)->first(); $companyModuleId = $connection->invitee->id; From b1b13d7cbf834987efb65ca316b08343014ba804 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Fri, 31 Mar 2023 21:21:26 +0800 Subject: [PATCH 35/99] fix bug billplz failed callback --- .../FixBillplzFailedCallbackPayment.php | 2 +- .../Commands/debugBillplzFailedPayment.php | 77 ------------------- 2 files changed, 1 insertion(+), 78 deletions(-) delete mode 100644 app/Console/Commands/debugBillplzFailedPayment.php diff --git a/app/Console/Commands/FixBillplzFailedCallbackPayment.php b/app/Console/Commands/FixBillplzFailedCallbackPayment.php index 3f2a80ba..04f2ed6b 100644 --- a/app/Console/Commands/FixBillplzFailedCallbackPayment.php +++ b/app/Console/Commands/FixBillplzFailedCallbackPayment.php @@ -112,7 +112,7 @@ class FixBillplzFailedCallbackPayment extends Command $order = $transaction->owner->owner->owner; - if ($invoiceStatus == 'Pending Payment') { + if (in_array($invoiceStatus , ['Pending Payment', 'Payment Completed'])) { // code here // $billPlz = $this->getBillplzBill->execute($billplzXSignatureObject->getBillPlzId()); diff --git a/app/Console/Commands/debugBillplzFailedPayment.php b/app/Console/Commands/debugBillplzFailedPayment.php deleted file mode 100644 index 729ecfee..00000000 --- a/app/Console/Commands/debugBillplzFailedPayment.php +++ /dev/null @@ -1,77 +0,0 @@ -where('payment_method', PaymentMethodType::PAYMENT_GATEWAY)->whereNotIn('status', [ApprovalStatus::COMPLETED, ApprovalStatus::APPROVED])->get(); - - $i = 0; - $totalAmount = 0; - foreach ($transactions as $transaction){ - $response = Http::withBasicAuth(config('billplz.api_key').':', '')->get(config('billplz.base_url').'/api/v3/bills/'.$transaction->payment_reference); - - // dd($response); - - // dd($transaction->owner->owner->owner->reference); - - if($response->successful()){ - $data = $response->json(); - if($data['paid']){ - if (!in_array($transaction->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) { - $this->returnLog('Paid transaction', $transaction); - } - } - // else { - // $totalAmount += $transaction->amount; - // $this->returnLog('Unpaid Transaction', $transaction); - // } - }else{ - $this->returnLog('billplz error', $transaction); - } - } - } - - public function returnLog($text, $transaction) { - $approvalStatusArray = ApprovalStatus::APPROVAL_STATUS_ID; - $this->info($text . ' - id: '. $transaction->id . '. Order Marking: '. $transaction->owner->owner->owner->reference . ' - Date: '.$transaction->created_at->format('d-m-Y').' - Amount: '. $transaction->amount . '. Current Status: ' . $approvalStatusArray[$transaction->status]); - } -} From cb65a1f29b4d5ee387ffc456984aa6074049d5c9 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Fri, 31 Mar 2023 21:24:43 +0800 Subject: [PATCH 36/99] fix bug billplz failed callback --- app/Console/Commands/FixBillplzFailedCallbackPayment.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Console/Commands/FixBillplzFailedCallbackPayment.php b/app/Console/Commands/FixBillplzFailedCallbackPayment.php index 04f2ed6b..0a9ac6ba 100644 --- a/app/Console/Commands/FixBillplzFailedCallbackPayment.php +++ b/app/Console/Commands/FixBillplzFailedCallbackPayment.php @@ -152,9 +152,12 @@ class FixBillplzFailedCallbackPayment extends Command $this->updateDoFromVTPortalProcessor->execute($packingList); $this->updateDoFromYDPortalProcessor->execute($packingList); } + + $this->info('Updated invoice ' . $counter . ' of ' . $totalTransactions . '. Order: '. $order->reference . ' - Date: '.$transaction->owner->created_at->format('d-m-Y').' - Amount: '. $transaction->amount . '. Status: ' . $approvalStatusArray[$transaction->status] . '. Invoice Status: ' . $invoiceStatus); + } else { + $this->info('Failed to update invoice due to unsufficeint payment ' . $counter . ' of ' . $totalTransactions . '. Order: '. $order->reference . ' - Date: '.$transaction->owner->created_at->format('d-m-Y').' - Amount: '. $transaction->amount . '. Status: ' . $approvalStatusArray[$transaction->status] . '. Invoice Status: ' . $invoiceStatus); } - $this->info('Updated invoice ' . $counter . ' of ' . $totalTransactions . '. Order: '. $order->reference . ' - Date: '.$transaction->owner->created_at->format('d-m-Y').' - Amount: '. $transaction->amount . '. Status: ' . $approvalStatusArray[$transaction->status] . '. Invoice Status: ' . $invoiceStatus); } else { if(!$order instanceof Order) { From 3871d8c010fd3eb8e9f27317523bad32de0cb955 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 16:01:20 +0800 Subject: [PATCH 37/99] clean up web routes --- routes/web.php | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/routes/web.php b/routes/web.php index b3f44ab7..71ab5f30 100644 --- a/routes/web.php +++ b/routes/web.php @@ -955,33 +955,3 @@ Route::get('/packing-lists/delete-duplicated', function(Request $request){ } } }); - -Route::get('/billplz/audit', function (Request $request) { - $transactions = Transaction::where('type', TransactionType::PAYMENT)->where('payment_method', PaymentMethodType::PAYMENT_GATEWAY)->whereIn('status', [ApprovalStatus::COMPLETED, ApprovalStatus::APPROVED])->get(); - $i = 0; - $totalAmount = 0; - foreach ($transactions as $transaction){ - $response = Http::withBasicAuth(config('billplz.api_key').':', '')->get(config('billplz.base_url').'/api/v3/bills/'.$transaction->payment_reference); - - if($response->successful()){ - $data = $response->json(); - if($data['paid']){ - - } else { - - $transaction->status = ApprovalStatus::REJECTED; - $transaction->save(); - - $invoice = $transaction->owner; - $invoice->status = ApprovalStatus::APPROVED; - - $totalAmount += $transaction->amount; - echo 'Order: '. $transaction->owner->owner->owner->reference . ' - Date: '.$transaction->owner->created_at->format('d-m-Y').' - Amount: '. $transaction->amount . "

"; - } - }else{ - echo "billplz error
"; - } - } - - echo 'Total: ' . $totalAmount; -}); From c4642c2042bbdc26bb0398c4297cade1dc5ad29f Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 17:06:37 +0800 Subject: [PATCH 38/99] final-duplicated-invoice-debug --- app/Console/Commands/AuditBillplzInvoice.php | 2 +- .../Commands/CheckDeletedInvoiceButPaid.php | 83 +++++++++++++++++++ routes/web.php | 42 ++++++++++ 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 app/Console/Commands/CheckDeletedInvoiceButPaid.php diff --git a/app/Console/Commands/AuditBillplzInvoice.php b/app/Console/Commands/AuditBillplzInvoice.php index 19c974d9..753905be 100644 --- a/app/Console/Commands/AuditBillplzInvoice.php +++ b/app/Console/Commands/AuditBillplzInvoice.php @@ -24,7 +24,7 @@ class AuditBillplzInvoice extends Command * * @var string */ - protected $description = 'Check all unpaid invoice but marked at paid at out system'; + protected $description = 'Check all unpaid invoice but marked paid at our system'; /** * Create a new command instance. diff --git a/app/Console/Commands/CheckDeletedInvoiceButPaid.php b/app/Console/Commands/CheckDeletedInvoiceButPaid.php new file mode 100644 index 00000000..e16edab1 --- /dev/null +++ b/app/Console/Commands/CheckDeletedInvoiceButPaid.php @@ -0,0 +1,83 @@ +info(Carbon::now() . ' : Start Check all deleted invoice but has completed payment.'); + $start = new Carbon(); + + $totalAmount = 0; + + $softDeletedTransactions = Transaction::onlyTrashed()->where('type', TransactionType::SHIPPING_INVOICE)->whereHas('transactions', function (Builder $query) { + $query->where('type', TransactionType::PAYMENT)->where('payment_method', PaymentMethodType::PAYMENT_GATEWAY); + })->get(); + + foreach ($softDeletedTransactions as $invoice) { + $invoice_payments = $invoice->transactions()->payments()->get(); + + foreach($invoice_payments as $invoice_payment) { + + $response = Http::withBasicAuth(config('billplz.api_key').':', '')->get(config('billplz.base_url').'/api/v3/bills/'.$invoice_payment->payment_reference); + + if($response->successful()){ + $data = $response->json(); + if($data['paid']){ + $this->info('Invoice id: ' . $invoice->id. '. Payment id: ' . $invoice_payment->id); + } else { + + } + }else{ + $this->info("billplz error
"); + } + } + } + + $end = new Carbon(); + $elapsedTime = $start->diff($end)->format('%H:%I:%S'); + + $this->info(Carbon::now() . ' : Done Check all deleted invoice but has completed payment. ElapsedTime: ' . $elapsedTime . '. Total: ' . $totalAmount); + } +} diff --git a/routes/web.php b/routes/web.php index 71ab5f30..252f63cf 100644 --- a/routes/web.php +++ b/routes/web.php @@ -955,3 +955,45 @@ Route::get('/packing-lists/delete-duplicated', function(Request $request){ } } }); + +Route::get('/final-duplicated-invoice-debug', function(){ + $duplicatedTransactions = DB::table('transactions') + ->select(DB::raw('owner_type, owner_id, receiver, type, GROUP_CONCAT(id) as transaction_ids, COUNT(*) as count')) + ->groupBy('owner_type', 'owner_id', 'receiver', 'type') + ->having('count', '>', 1) + ->get(); + + $approvalStatusArray = ApprovalStatus::APPROVAL_STATUS_ID; + + + echo ' + + + + + + + + '; + +foreach ($duplicatedTransactions as $transaction) { + $transactionIds = explode(',', $transaction->transaction_ids); + + $duplicatedInvoice = DB::table('transactions')->whereIn('id', $transactionIds)->get(); + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; +} +echo '
Owner TypeOwner IdReveiverTransaction typeCountInvoice Ids
' . $transaction->owner_type . '' . $transaction->owner_id . '' . $transaction->receiver . '' . $transaction->type . '' . count($transactionIds) . ''; + foreach ($duplicatedInvoice as $invoice) { + echo '

ID: ' . $invoice->id . '. Status: ' . $approvalStatusArray[$invoice->status] . '. Amount: ' . $invoice->amount . '. Is_Deleted: ' . ($invoice->deleted_at ? 'true' : 'false') . '

'; + } + echo'
'; +}); + From ce24deea1873d09d36da2f8ddb1a580171b77dcb Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 17:11:07 +0800 Subject: [PATCH 39/99] final-duplicated-invoice-debug --- routes/web.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/routes/web.php b/routes/web.php index 252f63cf..8ff80b0e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -970,6 +970,7 @@ Route::get('/final-duplicated-invoice-debug', function(){ Owner Type Owner Id + Order Reveiver Transaction type Count @@ -981,9 +982,12 @@ foreach ($duplicatedTransactions as $transaction) { $duplicatedInvoice = DB::table('transactions')->whereIn('id', $transactionIds)->get(); + $order_reference = $transaction->owner->owner->owner->reference; + echo ''; echo '' . $transaction->owner_type . ''; echo '' . $transaction->owner_id . ''; + echo '' . $order_reference . ''; echo '' . $transaction->receiver . ''; echo '' . $transaction->type . ''; echo '' . count($transactionIds) . ''; From 7241db77435daf3dcc3185ccf87636f1cc451a77 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 17:27:13 +0800 Subject: [PATCH 40/99] final-duplicated-invoice-debug --- routes/web.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/routes/web.php b/routes/web.php index 8ff80b0e..6b856803 100644 --- a/routes/web.php +++ b/routes/web.php @@ -980,9 +980,9 @@ Route::get('/final-duplicated-invoice-debug', function(){ foreach ($duplicatedTransactions as $transaction) { $transactionIds = explode(',', $transaction->transaction_ids); - $duplicatedInvoice = DB::table('transactions')->whereIn('id', $transactionIds)->get(); - - $order_reference = $transaction->owner->owner->owner->reference; + $duplicatedInvoice = Transaction::whereIn('id', $transactionIds)->get(); + + $order_reference = $duplicatedInvoice->first()->owner->owner->reference ?? null; echo ''; echo '' . $transaction->owner_type . ''; From 299512ec088578375cdd17c2140e4e8a0e7b5958 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 17:29:28 +0800 Subject: [PATCH 41/99] final-duplicated-invoice-debug --- routes/web.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/routes/web.php b/routes/web.php index 6b856803..1e927e6d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -957,8 +957,7 @@ Route::get('/packing-lists/delete-duplicated', function(Request $request){ }); Route::get('/final-duplicated-invoice-debug', function(){ - $duplicatedTransactions = DB::table('transactions') - ->select(DB::raw('owner_type, owner_id, receiver, type, GROUP_CONCAT(id) as transaction_ids, COUNT(*) as count')) + $duplicatedTransactions = Transaction::select(DB::raw('owner_type, owner_id, receiver, type, GROUP_CONCAT(id) as transaction_ids, COUNT(*) as count')) ->groupBy('owner_type', 'owner_id', 'receiver', 'type') ->having('count', '>', 1) ->get(); From 548a50c14a0a0c6d33cef357fd2517f8b9236b1c Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 17:33:51 +0800 Subject: [PATCH 42/99] final-duplicated-invoice-debug --- app/Classes/ValueObjects/Constants/TransactionType.php | 5 +++++ routes/web.php | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Classes/ValueObjects/Constants/TransactionType.php b/app/Classes/ValueObjects/Constants/TransactionType.php index 07277b64..037f47fc 100644 --- a/app/Classes/ValueObjects/Constants/TransactionType.php +++ b/app/Classes/ValueObjects/Constants/TransactionType.php @@ -27,4 +27,9 @@ final class TransactionType { // public const SHIPPING_COST = 9; + public const TRANSACTION_TYPE_ID = [ + self::SHIPPING_INVOICE => "Shipping Invoice", + self::PAYMENT => "Payment", + ]; + } diff --git a/routes/web.php b/routes/web.php index 1e927e6d..07dd2f84 100644 --- a/routes/web.php +++ b/routes/web.php @@ -964,6 +964,7 @@ Route::get('/final-duplicated-invoice-debug', function(){ $approvalStatusArray = ApprovalStatus::APPROVAL_STATUS_ID; + $transactionType = TransactionType::TRANSACTION_TYPE_ID; echo ' @@ -988,7 +989,7 @@ foreach ($duplicatedTransactions as $transaction) { echo ''; echo ''; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; echo ''; From 401db9143757389cfd9dffcc34f997ce54e9ba83 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 18:20:22 +0800 Subject: [PATCH 44/99] final-duplicated-invoice-debug --- ...ssUpdatePaymentStatusButFailedCallback.php | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php diff --git a/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php new file mode 100644 index 00000000..de66327e --- /dev/null +++ b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php @@ -0,0 +1,123 @@ +getBillplzBill = $getBillplzBill; + $this->fetchesTransaction = $fetchesTransaction; + $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; + $this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor; + } + + /** + * Execute the console command. + * + * @return int + */ + public function handle() + { + ini_set('memory_limit', '-1'); + + $this->info(Carbon::now() . ' : Billplz Failled Callback cron started.'); + $this->outputArray = []; + $start = new Carbon(); + + $approvalStatusArray = ApprovalStatus::APPROVAL_STATUS_ID; + + $transactions = Transaction::where('type', TransactionType::PAYMENT) + ->where('payment_method', PaymentMethodType::PAYMENT_GATEWAY) + ->get(); + + foreach ($transactions as $payment) { + $invoice = $payment->owner; + $packingList = $invoice->owner; + $order = $packingList->owner; + + if ($invoice->status == ApprovalStatus::APPROVED) { + + $totalPaidAmount = $invoice->transactions->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount'); + + if(($invoice->amount - $totalPaidAmount) < 0.01) { + $this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED); + + $packingList->status = ApprovalStatus::APPROVED; + $packingList->save(); + + if(app()->environment('production')){ + $this->updateDoFromVTPortalProcessor->execute($packingList); + $this->updateDoFromYDPortalProcessor->execute($packingList); + } + + $this->info('Updated invoice ' . $invoice->ID . '. Order: '. $order->reference); + } else { + $this->info('Failed Update invoice ' . $invoice->ID . '. Order: '. $order->reference); + } + } + } + + $end = new Carbon(); + $elapsedTime = $start->diff($end)->format('%H:%I:%S'); + + $this->info(Carbon::now() . ' : Done Billplz Failled Callback. ElapsedTime: ' . $elapsedTime ); + } +} From 562815f9fe057766c1fd664633b3d4f2897ddda1 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 18:27:04 +0800 Subject: [PATCH 45/99] final-duplicated-invoice-debug --- ...essUpdatePaymentStatusButFailedCallback.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php index de66327e..02a1e232 100644 --- a/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php +++ b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php @@ -89,9 +89,23 @@ class SuccessUpdatePaymentStatusButFailedCallback extends Command ->get(); foreach ($transactions as $payment) { - $invoice = $payment->owner; - $packingList = $invoice->owner; + $invoice = $payment->owner ?? null; + if (!$invoice) { + dump('Payment has no owner. Payment ID: ' . $payment->id); + continue; + } + + $packingList = $invoice->owner ?? null; + if (!$packingList) { + dump('Invoice has no owner. Invoice ID: ' . $invoice->id); + continue; + } + $order = $packingList->owner; + if (!$invoice) { + dump('PackingList has no owner. PackingList ID: ' . $packingList->id); + continue; + } if ($invoice->status == ApprovalStatus::APPROVED) { From 90b2bffd19f55e9d77569357f4d590629b0dec89 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 18:31:02 +0800 Subject: [PATCH 46/99] final-duplicated-invoice-debug --- .../SuccessUpdatePaymentStatusButFailedCallback.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php index 02a1e232..dbbc1373 100644 --- a/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php +++ b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php @@ -91,19 +91,19 @@ class SuccessUpdatePaymentStatusButFailedCallback extends Command foreach ($transactions as $payment) { $invoice = $payment->owner ?? null; if (!$invoice) { - dump('Payment has no owner. Payment ID: ' . $payment->id); + $this->info('Payment has no owner. Payment ID: ' . $payment->id); continue; } $packingList = $invoice->owner ?? null; if (!$packingList) { - dump('Invoice has no owner. Invoice ID: ' . $invoice->id); + $this->info('Invoice has no owner. Invoice ID: ' . $invoice->id); continue; } $order = $packingList->owner; if (!$invoice) { - dump('PackingList has no owner. PackingList ID: ' . $packingList->id); + $this->info('PackingList has no owner. PackingList ID: ' . $packingList->id); continue; } @@ -122,9 +122,9 @@ class SuccessUpdatePaymentStatusButFailedCallback extends Command $this->updateDoFromYDPortalProcessor->execute($packingList); } - $this->info('Updated invoice ' . $invoice->ID . '. Order: '. $order->reference); + dump('Updated invoice ' . $invoice->ID . '. Order: '. $order->reference); } else { - $this->info('Failed Update invoice ' . $invoice->ID . '. Order: '. $order->reference); + $this->info('Failed Update invoice ' . $invoice->ID . ' because payment not enough. Invoice Amount: ' . $invoice->amount . ' . Paid Amount: ' . $totalPaidAmount . ' . Order: '. $order->reference); } } } From e1c69f2de4e2ac7bb2771f6e6c6da66323214b20 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 18:35:15 +0800 Subject: [PATCH 47/99] final-duplicated-invoice-debug --- .../Commands/SuccessUpdatePaymentStatusButFailedCallback.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php index dbbc1373..078cb171 100644 --- a/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php +++ b/app/Console/Commands/SuccessUpdatePaymentStatusButFailedCallback.php @@ -86,6 +86,7 @@ class SuccessUpdatePaymentStatusButFailedCallback extends Command $transactions = Transaction::where('type', TransactionType::PAYMENT) ->where('payment_method', PaymentMethodType::PAYMENT_GATEWAY) + ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) ->get(); foreach ($transactions as $payment) { @@ -122,9 +123,9 @@ class SuccessUpdatePaymentStatusButFailedCallback extends Command $this->updateDoFromYDPortalProcessor->execute($packingList); } - dump('Updated invoice ' . $invoice->ID . '. Order: '. $order->reference); + dump('Updated invoice ' . $invoice->id . '. Order: '. $order->reference); } else { - $this->info('Failed Update invoice ' . $invoice->ID . ' because payment not enough. Invoice Amount: ' . $invoice->amount . ' . Paid Amount: ' . $totalPaidAmount . ' . Order: '. $order->reference); + $this->info('Failed Update invoice ' . $invoice->id . ' because payment not enough. Invoice Amount: ' . $invoice->amount . ' . Paid Amount: ' . $totalPaidAmount . ' . Order: '. $order->reference); } } } From 57eb1e147d9de775d3b68f424aff332407de7955 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 18:48:34 +0800 Subject: [PATCH 48/99] final-duplicated-invoice-debug --- routes/web.php | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/web.php b/routes/web.php index a448d558..4e5e1eb2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -958,6 +958,7 @@ Route::get('/packing-lists/delete-duplicated', function(Request $request){ Route::get('/final-duplicated-invoice-debug', function(){ $duplicatedTransactions = Transaction::select(DB::raw('owner_type, owner_id, receiver, type, GROUP_CONCAT(id) as transaction_ids, COUNT(*) as count')) + ->whereNotIn('status', [ApprovalStatus::REJECTED,ApprovalStatus::SUSPENDED,ApprovalStatus::EXPIRED]) ->groupBy('owner_type', 'owner_id', 'receiver', 'type') ->having('count', '>', 1) ->get(); From 145bf3263a457a6472bccaf16926fe259dedd4f1 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 18:51:37 +0800 Subject: [PATCH 49/99] final-duplicated-invoice-debug --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 4e5e1eb2..7cc73b87 100644 --- a/routes/web.php +++ b/routes/web.php @@ -988,7 +988,7 @@ foreach ($duplicatedTransactions as $transaction) { echo ''; echo ''; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; From c976319521be17a8aae546603f0d610875b67754 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 19:19:48 +0800 Subject: [PATCH 50/99] final-duplicated-invoice-debug --- routes/web.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/routes/web.php b/routes/web.php index 7cc73b87..4f572d74 100644 --- a/routes/web.php +++ b/routes/web.php @@ -969,8 +969,8 @@ Route::get('/final-duplicated-invoice-debug', function(){ echo '
' . $transaction->owner_id . '' . $order_reference . '' . $transaction->receiver . '' . $transaction->type . '' . $transactionType[$transaction->type] . '' . count($transactionIds) . ''; foreach ($duplicatedInvoice as $invoice) { From 0d1a623512a2afb1dcd6002357b8c8d6dd83c3e5 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 17:36:59 +0800 Subject: [PATCH 43/99] final-duplicated-invoice-debug --- app/Console/Commands/CheckDeletedInvoiceButPaid.php | 5 ++++- routes/web.php | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/CheckDeletedInvoiceButPaid.php b/app/Console/Commands/CheckDeletedInvoiceButPaid.php index e16edab1..e89d80a3 100644 --- a/app/Console/Commands/CheckDeletedInvoiceButPaid.php +++ b/app/Console/Commands/CheckDeletedInvoiceButPaid.php @@ -64,8 +64,11 @@ class CheckDeletedInvoiceButPaid extends Command if($response->successful()){ $data = $response->json(); + + $orderReference = $invoice->owner->owner->reference ?? null; + if($data['paid']){ - $this->info('Invoice id: ' . $invoice->id. '. Payment id: ' . $invoice_payment->id); + $this->info('Invoice id: ' . $invoice->id. '. Payment id: ' . $invoice_payment->id . '. Order: ' . $orderReference); } else { } diff --git a/routes/web.php b/routes/web.php index 07dd2f84..a448d558 100644 --- a/routes/web.php +++ b/routes/web.php @@ -993,7 +993,7 @@ foreach ($duplicatedTransactions as $transaction) { echo '' . count($transactionIds) . ''; foreach ($duplicatedInvoice as $invoice) { - echo '

ID: ' . $invoice->id . '. Status: ' . $approvalStatusArray[$invoice->status] . '. Amount: ' . $invoice->amount . '. Is_Deleted: ' . ($invoice->deleted_at ? 'true' : 'false') . '

'; + echo '

ID: ' . $invoice->id . '. Status: ' . $approvalStatusArray[$invoice->status] . '. Amount: ' . $invoice->amount . '

'; } echo'
' . $transaction->owner_type . '' . $transaction->owner_id . '' . $order_reference . '' . ''. $order_reference .'' . '' . $transaction->receiver . '' . $transactionType[$transaction->type] . '' . count($transactionIds) . '
- - + + @@ -985,9 +985,13 @@ foreach ($duplicatedTransactions as $transaction) { $order_reference = $duplicatedInvoice->first()->owner->owner->reference ?? null; + if ($transaction->type = TransactionType::PAYMENT) { + $order_reference = $duplicatedInvoice->first()->owner->owner->owner->reference ?? null; + } + echo ''; - echo ''; - echo ''; + // echo ''; + // echo ''; echo ''; echo ''; echo ''; From 982a7c1d44771568e4ebf78c43a71ddb4ac854b7 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 19:34:30 +0800 Subject: [PATCH 51/99] final-duplicated-invoice-debug --- routes/web.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/routes/web.php b/routes/web.php index 4f572d74..8c3dd360 100644 --- a/routes/web.php +++ b/routes/web.php @@ -971,8 +971,8 @@ Route::get('/final-duplicated-invoice-debug', function(){ + - @@ -985,15 +985,15 @@ foreach ($duplicatedTransactions as $transaction) { $order_reference = $duplicatedInvoice->first()->owner->owner->reference ?? null; - if ($transaction->type = TransactionType::PAYMENT) { + if ($transaction->type == TransactionType::PAYMENT) { $order_reference = $duplicatedInvoice->first()->owner->owner->owner->reference ?? null; } echo ''; // echo ''; // echo ''; - echo ''; echo ''; + echo ''; echo ''; echo ''; echo ' + '; foreach ($duplicatedTransactions as $transaction) { @@ -996,7 +997,7 @@ foreach ($duplicatedTransactions as $transaction) { echo ''; echo ''; echo ''; - echo ''; echo ''; echo ''; - echo '"; echo ''; - echo ""; + echo ""; echo ""; echo ""; echo ""; From 094f995dcfd74696cc90ab5f2311988226a8525b Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Thu, 13 Apr 2023 12:18:22 +0800 Subject: [PATCH 73/99] orde v2 include packages --- .../OrderPackageV2SectionComponent.vue | 343 ++++++++++++++++++ .../OrderProfileV2SectionComponent.vue | 2 + 2 files changed, 345 insertions(+) create mode 100644 resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue diff --git a/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue new file mode 100644 index 00000000..03e55381 --- /dev/null +++ b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue @@ -0,0 +1,343 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue index da776f4a..9615fc13 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue @@ -152,6 +152,8 @@ + + From a3d26bfb63a1cf36f137ce458c539f6feb890f5d Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Thu, 13 Apr 2023 12:20:49 +0800 Subject: [PATCH 74/99] uncomment order package code --- .../orders/sections/OrderPackageV2SectionComponent.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue index 03e55381..2fb3f259 100644 --- a/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue @@ -165,14 +165,14 @@
- +
From c9642bd8f5c3be376730f07898c6fbb67d9e31fe Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 13 Apr 2023 16:01:12 +0800 Subject: [PATCH 75/99] update order v2 page --- .../general/elements/BoxLoadingComponent.vue | 126 ++++++++++++++++++ .../OrderPackageV2SectionComponent.vue | 12 +- 2 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 resources/assets/vue/components/general/elements/BoxLoadingComponent.vue diff --git a/resources/assets/vue/components/general/elements/BoxLoadingComponent.vue b/resources/assets/vue/components/general/elements/BoxLoadingComponent.vue new file mode 100644 index 00000000..110243c6 --- /dev/null +++ b/resources/assets/vue/components/general/elements/BoxLoadingComponent.vue @@ -0,0 +1,126 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue index 2fb3f259..d9078e4f 100644 --- a/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue @@ -1,7 +1,13 @@
Owner TypeOwner Id Order Reveiver Transaction type
' . $transaction->owner_type . '' . $transaction->owner_id . '' . $transaction->owner_type . '' . $transaction->owner_id . '' . ''. $order_reference .'' . '' . $transaction->receiver . '' . $transactionType[$transaction->type] . '
OrderReveiver Transaction type Count Invoice Ids
' . $transaction->owner_type . '' . $transaction->owner_id . '' . ''. $order_reference .'' . '' . $transaction->receiver . '' . ''. $order_reference .'' . '' . $transactionType[$transaction->type] . '' . count($transactionIds) . ''; From c58cdde254ad5d1c9a8fcf998f982626fa0c952e Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 19:35:47 +0800 Subject: [PATCH 52/99] final-duplicated-invoice-debug --- routes/web.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 8c3dd360..50a930ca 100644 --- a/routes/web.php +++ b/routes/web.php @@ -976,6 +976,7 @@ Route::get('/final-duplicated-invoice-debug', function(){ Transaction type Count Invoice IdsInvoices
' . ''. $order_reference .'' . '' . $transactionType[$transaction->type] . '' . count($transactionIds) . ''; + echo ''; foreach ($duplicatedInvoice as $invoice) { echo '

ID: ' . $invoice->id . '. Status: ' . $approvalStatusArray[$invoice->status] . '. Amount: ' . $invoice->amount . '

'; } From 869397056c37fa989b06a522c6bc85bceb459670 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 1 Apr 2023 19:36:43 +0800 Subject: [PATCH 53/99] final-duplicated-invoice-debug --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 50a930ca..e2c98b55 100644 --- a/routes/web.php +++ b/routes/web.php @@ -997,7 +997,7 @@ foreach ($duplicatedTransactions as $transaction) { echo '
' . ''. $order_reference .'' . '' . $transactionType[$transaction->type] . '' . count($transactionIds) . ''; + echo ''; foreach ($duplicatedInvoice as $invoice) { echo '

ID: ' . $invoice->id . '. Status: ' . $approvalStatusArray[$invoice->status] . '. Amount: ' . $invoice->amount . '

'; } From 07998c6850421f4f86fc71cc88b569cd2a7d10a7 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sun, 2 Apr 2023 11:25:50 +0800 Subject: [PATCH 54/99] super admin delete invoice/transaction --- .../DeleteTransactionLogic.php | 52 +++++++++++++++++++ .../DeleteTransactionController.php | 21 ++++++++ .../CustomerPaymentsBillingComponent.vue | 8 +++ .../forms/DeleteInvoiceFormComponent.vue | 31 +++++++++++ routes/transaction.php | 1 + 5 files changed, 113 insertions(+) create mode 100644 app/Classes/Modules/Transactions/ControllersLogic/DeleteTransactionLogic.php create mode 100644 app/Http/Controllers/Transactions/DeleteTransactionController.php create mode 100644 resources/assets/vue/components/paymentsBilling/forms/DeleteInvoiceFormComponent.vue diff --git a/app/Classes/Modules/Transactions/ControllersLogic/DeleteTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/DeleteTransactionLogic.php new file mode 100644 index 00000000..56d24523 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/DeleteTransactionLogic.php @@ -0,0 +1,52 @@ + 'Delete Transaction', + 'message' => 'You have successfully deleted the transaction' + ]; + } + + /** @var FetchesTransaction */ + private $fetchesTransaction; + + /** @var UpdatesTransactionStatus */ + private $updatesTransactionStatus; + + + /** + * SuspendTransactionLogic constructor. + * @param FetchesTransaction $fetchesTransaction + * @param UpdatesTransactionStatus $updatesTransactionStatus + */ + public function __construct(FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus) + { + $this->fetchesTransaction = $fetchesTransaction; + $this->updatesTransactionStatus = $updatesTransactionStatus; + } + + + public function logic(Request $request) : JsonResponse + { + $transaction = $this->fetchesTransaction->execute(['id' => $request->route('id')]); + + $transaction->delete(); + + return $this->response([]); + } +} diff --git a/app/Http/Controllers/Transactions/DeleteTransactionController.php b/app/Http/Controllers/Transactions/DeleteTransactionController.php new file mode 100644 index 00000000..a9dee9ba --- /dev/null +++ b/app/Http/Controllers/Transactions/DeleteTransactionController.php @@ -0,0 +1,21 @@ +execute($request); + } +} diff --git a/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue b/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue index a5ede524..f64b006c 100644 --- a/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/elements/CustomerPaymentsBillingComponent.vue @@ -63,6 +63,14 @@ +
+ + + + + + +
{{ expanded ? 'Cancel' : 'Make Payment' }}
diff --git a/resources/assets/vue/components/paymentsBilling/forms/DeleteInvoiceFormComponent.vue b/resources/assets/vue/components/paymentsBilling/forms/DeleteInvoiceFormComponent.vue new file mode 100644 index 00000000..b8c13ed8 --- /dev/null +++ b/resources/assets/vue/components/paymentsBilling/forms/DeleteInvoiceFormComponent.vue @@ -0,0 +1,31 @@ + + diff --git a/routes/transaction.php b/routes/transaction.php index 3d847135..3ae8e5d2 100644 --- a/routes/transaction.php +++ b/routes/transaction.php @@ -6,6 +6,7 @@ Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' => Route::get('/list', 'ListTransactionsController@list')->name('list'); Route::delete('/suspend/{id}', 'SuspendTransactionController@suspend')->name('suspend'); + Route::delete('/delete/{id}', 'DeleteTransactionController@delete')->name('delete'); Route::put('{id}/status/update/{status}', 'UpdateTransactionStatusController@update')->where('status', 'approve|expire|reject')->name('update'); Route::group(['prefix' => 'payment', 'as' => 'payment.'], function () { From 069c3cea35f9fe6f602d8f89a5e6767471f0339e Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sun, 2 Apr 2023 12:09:44 +0800 Subject: [PATCH 55/99] Showing Billplz payment status --- .../Commands/ShowBillplzPaymentStatus.php | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 app/Console/Commands/ShowBillplzPaymentStatus.php diff --git a/app/Console/Commands/ShowBillplzPaymentStatus.php b/app/Console/Commands/ShowBillplzPaymentStatus.php new file mode 100644 index 00000000..a8fe7ae9 --- /dev/null +++ b/app/Console/Commands/ShowBillplzPaymentStatus.php @@ -0,0 +1,69 @@ +info(Carbon::now() . ' : Show Billplz payment status started.'); + $start = new Carbon(); + + $billplz_id = $this->argument('billplz_id'); + $billplz_id = explode(",", $billplz_id); + + foreach ($billplz_id as $payment) { + $response = Http::withBasicAuth(config('billplz.api_key').':', '')->get(config('billplz.base_url').'/api/v3/bills/'.$payment); + if($response->successful()){ + $data = $response->json(); + dump($data); + }else{ + $this->info("billplz error
"); + } + } + + $end = new Carbon(); + $elapsedTime = $start->diff($end)->format('%H:%I:%S'); + + $this->info(Carbon::now() . ' : Done Showing Billplz payment status. ElapsedTime: ' . $elapsedTime); + } +} From 7e2428957eeff63ded33dc5834b102b138bd2a27 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Wed, 5 Apr 2023 15:18:46 +0800 Subject: [PATCH 56/99] delete packing list --- .../orders/elements/ParcelComponent.vue | 17 +++++- .../forms/ChangeCustomerNameFormComponent.vue | 58 +++++++++---------- .../sections/OrderProfileSectionComponent.vue | 2 +- .../forms/DeleteParcelFormComponent.vue | 31 ++++++++++ 4 files changed, 77 insertions(+), 31 deletions(-) create mode 100644 resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue diff --git a/resources/assets/vue/components/orders/elements/ParcelComponent.vue b/resources/assets/vue/components/orders/elements/ParcelComponent.vue index 248aec73..25e591a6 100644 --- a/resources/assets/vue/components/orders/elements/ParcelComponent.vue +++ b/resources/assets/vue/components/orders/elements/ParcelComponent.vue @@ -1,5 +1,5 @@ \ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 0b48c640..a9a2b816 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -301,7 +301,7 @@
- +
diff --git a/resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue b/resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue new file mode 100644 index 00000000..cede8f9f --- /dev/null +++ b/resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue @@ -0,0 +1,31 @@ + + From 1f6eaa65a5468d1636bcd8f511dc14bf04a23dd1 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Wed, 5 Apr 2023 16:02:10 +0800 Subject: [PATCH 57/99] order v2 --- .../OrderProfileV2SectionComponent.vue | 201 ++++++++++++++++++ .../views/pages/orders/profile_v2.blade.php | 4 + routes/web.php | 4 + 3 files changed, 209 insertions(+) create mode 100644 resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue create mode 100644 resources/views/pages/orders/profile_v2.blade.php diff --git a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue new file mode 100644 index 00000000..8d20856a --- /dev/null +++ b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue @@ -0,0 +1,201 @@ + + \ No newline at end of file diff --git a/resources/views/pages/orders/profile_v2.blade.php b/resources/views/pages/orders/profile_v2.blade.php new file mode 100644 index 00000000..7ffef202 --- /dev/null +++ b/resources/views/pages/orders/profile_v2.blade.php @@ -0,0 +1,4 @@ +@extends('layouts.base_portal') +@section('inner_content') + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index e2c98b55..3335fdc3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -146,6 +146,10 @@ Route::get('/order/show/{order_number}', function ($orderNumber) { return view('pages.orders.profile', ['id' => $orderNumber]); })->name('order.show'); +Route::get('/order/v2/show/{order_number}', function ($orderNumber) { + return view('pages.orders.profile_v2', ['id' => $orderNumber]); +})->name('order.show'); + Route::get('/address', function () { return view('pages.addresses.index'); })->name('address'); From 70fc8285f81d77b90aa8e8aafa9395716428d607 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Wed, 5 Apr 2023 16:21:53 +0800 Subject: [PATCH 58/99] order v2 --- .../ControllersLogic/FetchOrderV2Logic.php | 60 +++++++++++++++++++ .../Orders/FetchOrderV2Controller.php | 20 +++++++ app/Http/Resources/OrderV2Resource.php | 40 +++++++++++++ .../OrderProfileV2SectionComponent.vue | 2 +- routes/order.php | 1 + 5 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 app/Classes/Modules/Orders/ControllersLogic/FetchOrderV2Logic.php create mode 100644 app/Http/Controllers/Orders/FetchOrderV2Controller.php create mode 100644 app/Http/Resources/OrderV2Resource.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderV2Logic.php b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderV2Logic.php new file mode 100644 index 00000000..08d3cc5d --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderV2Logic.php @@ -0,0 +1,60 @@ + 'Retrieved Order', + 'message' => 'You have successfully retrieved an order' + ]; + } + + /** @var CanFetchOrder */ + private $canFetchOrder; + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** + * FetchOrderLogic constructor. + * @param CanFetchOrder $canFetchOrder + * @param FetchesOrder $fetchesOrder + */ + public function __construct(CanFetchOrder $canFetchOrder, FetchesOrder $fetchesOrder) + { + $this->canFetchOrder = $canFetchOrder; + $this->fetchesOrder = $fetchesOrder; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + + $this->canFetchOrder->passes(); + + $query = $this->fetchesOrder->execute(['reference' => $request->route('id'), 'with_packing_lists' => true]); + + return $this->resourceResponse(new OrderV2Resource($query)); + + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/FetchOrderV2Controller.php b/app/Http/Controllers/Orders/FetchOrderV2Controller.php new file mode 100644 index 00000000..45161f7f --- /dev/null +++ b/app/Http/Controllers/Orders/FetchOrderV2Controller.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Resources/OrderV2Resource.php b/app/Http/Resources/OrderV2Resource.php new file mode 100644 index 00000000..7ca77149 --- /dev/null +++ b/app/Http/Resources/OrderV2Resource.php @@ -0,0 +1,40 @@ + $this->id, + 'reference' => $this->reference, + 'reference_contract' => (int) $this->type, + 'type' => (int) $this->type, + 'status' => (int) $this->status, + 'company_module' => new CompanyModuleResource($this->companyModule), + 'warehouse' => new CompanyModuleResource($this->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee), + 'address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()), + 'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()), + 'invoices' => $this->whenLoaded('packingLists', function() { + return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->get()); + }), + 'remarks' => RemarkResource::collection($this->remarks), + 'created_at' => $this->created_at->format('d-m-Y') + ]; + + } +} diff --git a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue index 8d20856a..4f16cf86 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue @@ -189,7 +189,7 @@ methods: { fetchCompany(){ this.isLoading = true; - this.submit(route('api.order.show', this.order_number), 'get', this.section, false, false) + this.submit(route('api.order.v2.show', this.order_number), 'get', this.section, false, false) }, successHandler(response){ this.$store.dispatch('completeList', {'name': this.section, 'data': []}); diff --git a/routes/order.php b/routes/order.php index 79a67bd8..507b489f 100644 --- a/routes/order.php +++ b/routes/order.php @@ -4,6 +4,7 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], function () { Route::get('/show/{id}', 'FetchOrderController@fetch')->name('show'); + Route::get('/v2/show/{id}', 'FetchOrderV2Controller@fetch')->name('v2.show'); Route::get('/list', 'ListOrdersController@list')->name('list'); Route::post('/create', 'CreateOrderController@create')->name('create'); Route::put('/confirm/{id}', 'ConfirmOrderController@confirm')->name('confirm'); From 225abaacb8e74cc07b396eb342e01bf6449a2769 Mon Sep 17 00:00:00 2001 From: "DESKTOP-5I7S92L\\nicho" Date: Wed, 5 Apr 2023 16:38:28 +0800 Subject: [PATCH 59/99] order v2 --- resources/views/pages/support.blade.php | 36 +++++++++++++++++++++++++ routes/web.php | 6 ++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 resources/views/pages/support.blade.php diff --git a/resources/views/pages/support.blade.php b/resources/views/pages/support.blade.php new file mode 100644 index 00000000..ce693c4f --- /dev/null +++ b/resources/views/pages/support.blade.php @@ -0,0 +1,36 @@ +@extends('layouts.base_portal') +@section('inner_content') +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+ +
+
+ Reset +
+
+
+@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 3335fdc3..e76b9bcd 100644 --- a/routes/web.php +++ b/routes/web.php @@ -138,6 +138,10 @@ Route::get('/orders', function () { return view('pages.orders.index'); })->name('orders'); +Route::get('/support', function () { + return view('pages.support'); +})->name('v2.orders'); + Route::get('/orders-table', function () { return view('pages.orders.table'); })->name('ordersTable'); @@ -148,7 +152,7 @@ Route::get('/order/show/{order_number}', function ($orderNumber) { Route::get('/order/v2/show/{order_number}', function ($orderNumber) { return view('pages.orders.profile_v2', ['id' => $orderNumber]); -})->name('order.show'); +})->name('order.v2.show'); Route::get('/address', function () { return view('pages.addresses.index'); From a28f735d8f486b1733bdb224eacff3f48e6bddf3 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 5 Apr 2023 19:12:07 +0800 Subject: [PATCH 60/99] order v2 --- .../sections/SupportSectionComponent.vue | 83 +++++++++++++++++++ resources/views/pages/support.blade.php | 34 +------- routes/web.php | 2 +- 3 files changed, 85 insertions(+), 34 deletions(-) create mode 100644 resources/assets/vue/components/general/sections/SupportSectionComponent.vue diff --git a/resources/assets/vue/components/general/sections/SupportSectionComponent.vue b/resources/assets/vue/components/general/sections/SupportSectionComponent.vue new file mode 100644 index 00000000..ad71165c --- /dev/null +++ b/resources/assets/vue/components/general/sections/SupportSectionComponent.vue @@ -0,0 +1,83 @@ + + + \ No newline at end of file diff --git a/resources/views/pages/support.blade.php b/resources/views/pages/support.blade.php index ce693c4f..29bbce4c 100644 --- a/resources/views/pages/support.blade.php +++ b/resources/views/pages/support.blade.php @@ -1,36 +1,4 @@ @extends('layouts.base_portal') @section('inner_content') -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
-
- -
- -
-
- Reset -
-
-
+ @endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index e76b9bcd..ea0bdab0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -140,7 +140,7 @@ Route::get('/orders', function () { Route::get('/support', function () { return view('pages.support'); -})->name('v2.orders'); +})->name('support'); Route::get('/orders-table', function () { return view('pages.orders.table'); From 26027f5f3f49f7aad4f43b94babc24e02caee6a4 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 5 Apr 2023 19:13:17 +0800 Subject: [PATCH 61/99] order profile v2 --- .../orders/sections/OrderProfileV2SectionComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue index 4f16cf86..da776f4a 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileV2SectionComponent.vue @@ -165,7 +165,7 @@ }, data(){ return { - section: 'orderProfileSection', + section: 'orderProfileV2Section', isLoading: true, order: null, addComment: false, From c5477890d64d8c36a4a6386d72cbe0536ffaf335 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 5 Apr 2023 20:27:22 +0800 Subject: [PATCH 62/99] oder v2 --- resources/views/pages/support.blade.php | 61 ++++++++++++++++++++++++- routes/web.php | 28 +++++++++++- 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/resources/views/pages/support.blade.php b/resources/views/pages/support.blade.php index 29bbce4c..663384dd 100644 --- a/resources/views/pages/support.blade.php +++ b/resources/views/pages/support.blade.php @@ -1,4 +1,63 @@ @extends('layouts.base_portal') @section('inner_content') - +
+
+
+
+
+ @csrf +
+ +
+
+ + +
+
+
+ +
+
+ Reset +
+
+
+
+
+ @if ($orderNoNotFound) +
+
+
+
+
+
+
+
+
+

Order Number Not Found

+
+
+
+
+ There is no results found, Try adjusting your filters to find what you are looking for. +
+
+
+
+
+
+ @endif +
+
@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index ea0bdab0..c6878b2b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -139,7 +139,33 @@ Route::get('/orders', function () { })->name('orders'); Route::get('/support', function () { - return view('pages.support'); + return view('pages.support', [ + 'marking' => null, + 'email' => null, + 'orderNo' => null, + 'orderNoNotFound' => null, + ]); +})->name('support'); + +Route::post('/support', function (Request $request) { + + $orderNoNotFound = false; + $orderNo = $request->input('orderNo'); + + if ($orderNo) { + if (Order::where('reference', $orderNo)->count()) { + return redirect(route('order.v2.show', $orderNo)); + } else { + $orderNoNotFound = true; + } + } + + return view('pages.support', [ + 'marking' => null, + 'email' => null, + 'orderNo' => null, + 'orderNoNotFound' => $orderNoNotFound, + ]); })->name('support'); Route::get('/orders-table', function () { From 7f0de1c1e4a8cd15eb65a61d384ef9f9487ec945 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 5 Apr 2023 23:49:23 +0800 Subject: [PATCH 63/99] support page --- resources/views/pages/support.blade.php | 27 +++++++++++++---- routes/web.php | 40 +++++++++++++++++++------ 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/resources/views/pages/support.blade.php b/resources/views/pages/support.blade.php index 663384dd..3e24430f 100644 --- a/resources/views/pages/support.blade.php +++ b/resources/views/pages/support.blade.php @@ -1,19 +1,19 @@ @extends('layouts.base_portal') @section('inner_content') -
+
@csrf
-
-
+
- +
From 7c50dfbfc3c15fefd498ebb3d3940a98354e8a22 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 6 Apr 2023 17:30:02 +0800 Subject: [PATCH 67/99] update 769SMC summary --- routes/web.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 644f453d..82a27082 100644 --- a/routes/web.php +++ b/routes/web.php @@ -433,7 +433,8 @@ Route::get('/export-customer-order/{marking}', 'Exports\ExportCompanyModuleSumma Route::get('/customer/summary/monthly', function () { // $containers = Container::whereMonth('loading_date', '>=', ((float)Carbon::now()->format('m') - 2))->whereYear('loading_date', (float)Carbon::now()->format('Y'))->get(); - $containers = Container::whereMonth('loading_date', '>=', 1)->whereYear('loading_date', 2023)->get(); + // $containers = Container::whereMonth('loading_date', '>=', 1)->whereYear('loading_date', 2023)->get(); + $containers = Container::whereMonth('loading_date', '>=', 9)->whereYear('loading_date', 2022)->get(); $marking = '769SMC'; $connection = CompanyConnection::where('invitee_reference', $marking)->first(); $companyModuleId = $connection->invitee->id; From 697c02ac8acf8d44590c12496fd4526427fd7db2 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Thu, 6 Apr 2023 19:22:40 +0800 Subject: [PATCH 68/99] delete packing list by package id --- .../DeletePackingListByPackageIdLogic.php | 81 +++++++++++++++++++ ...DeletePackingListByPackageIdController.php | 20 +++++ .../orders/elements/ParcelComponent.vue | 3 +- .../forms/ChangeCustomerNameFormComponent.vue | 58 ++++++------- .../sections/OrderProfileSectionComponent.vue | 2 +- .../forms/DeleteParcelFormComponent.vue | 2 +- routes/packing_list.php | 1 + 7 files changed, 134 insertions(+), 33 deletions(-) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php create mode 100644 app/Http/Controllers/PackingLists/DeletePackingListByPackageIdController.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php new file mode 100644 index 00000000..a221c501 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/DeletePackingListByPackageIdLogic.php @@ -0,0 +1,81 @@ + 'Deleted PackingList', + 'message' => 'You have successfully deleted a PackingList' + ]; + } + + + /** @var CanDeletePackingList */ + private $canDeletePackingList; + + /** @var DeletesPackingList */ + private $deletesPackingList; + + /** @var FetchesPackingList */ + private $fetchesPackingList; + + /** @var FetchesPackage */ + private $fetchesPackage; + + /** + * DeletePackingListByPackageIdLogic constructor. + * @param CanDeletePackingList $canDeletePackingList + * @param DeletesPackingList $deletesPackingList + * @param FetchesPackingList $fetchesPackingList + * @param FetchesPackage $fetchesPackage + */ + public function __construct(CanDeletePackingList $canDeletePackingList, DeletesPackingList $deletesPackingList, FetchesPackingList $fetchesPackingList, FetchesPackage $fetchesPackage) + { + $this->canDeletePackingList = $canDeletePackingList; + $this->deletesPackingList = $deletesPackingList; + $this->fetchesPackingList = $fetchesPackingList; + $this->fetchesPackage = $fetchesPackage; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + $this->canDeletePackingList->passes(); + + $package = $this->fetchesPackage->execute(['id' => $request->route('id')]); + + $packingList = $package->packingList; + + $packingList = PackingList::where('reference', $packingList->reference)->get(); + + $childPackingList = PackingList::where('owner_type', PackingList::class)->whereIn('owner_id', $packingList->pluck('id'))->get(); + + $packingList->each->delete(); + + $childPackingList->each->delete(); + + return $this->response([]); + } + +} diff --git a/app/Http/Controllers/PackingLists/DeletePackingListByPackageIdController.php b/app/Http/Controllers/PackingLists/DeletePackingListByPackageIdController.php new file mode 100644 index 00000000..53008334 --- /dev/null +++ b/app/Http/Controllers/PackingLists/DeletePackingListByPackageIdController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/resources/assets/vue/components/orders/elements/ParcelComponent.vue b/resources/assets/vue/components/orders/elements/ParcelComponent.vue index 25e591a6..cef41560 100644 --- a/resources/assets/vue/components/orders/elements/ParcelComponent.vue +++ b/resources/assets/vue/components/orders/elements/ParcelComponent.vue @@ -43,10 +43,9 @@ - +
-
diff --git a/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue b/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue index 2fe80cc7..d16d5aed 100644 --- a/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/ChangeCustomerNameFormComponent.vue @@ -34,37 +34,37 @@
\ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index a9a2b816..53e5bcc6 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -301,7 +301,7 @@
- +
diff --git a/resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue b/resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue index cede8f9f..bd3b62f5 100644 --- a/resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/forms/DeleteParcelFormComponent.vue @@ -14,7 +14,7 @@
Cancel
-
Confirm
+
Confirm
diff --git a/routes/packing_list.php b/routes/packing_list.php index fe889ddb..888155c4 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -11,6 +11,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::put('/update/{id}', 'UpdatePackingListController@update')->name('update'); Route::put('/status/{id}/update/{status}', 'UpdatePackingListStatusController@update')->name('status.update'); Route::delete('/delete/{id}', 'DeletePackingListController@delete')->name('delete'); + Route::delete('/delete-by-package-id/{id}', 'DeletePackingListByPackageIdController@delete')->name('delete.by_package_id'); Route::put('/reschedule/{id}', 'ReschedulePackingListController@reschedule')->name('reschedule'); Route::put('/update-dispatch-date/{id}', 'UpdateDispatchDatePackingListController@update')->name('update_dispatch_date'); From 43cd6f35be8734c72152ea4ee950039e6d29496e Mon Sep 17 00:00:00 2001 From: Dillon Date: Thu, 6 Apr 2023 22:57:50 +0800 Subject: [PATCH 69/99] New route, middleware, token table, filters for query to allow third party to access api --- .../General/Eloquent/Filters/AmountExceed.php | 19 +++++++ .../General/Eloquent/Filters/AmountShort.php | 19 +++++++ .../Eloquent/Filters/CreatedBefore.php | 20 +++++++ .../Eloquent/Filters/PaymentMethod.php | 20 +++++++ app/Http/Kernel.php | 8 ++- .../Middleware/TokenCheckerMiddleware.php | 56 +++++++++++++++++++ app/Models/PersonalAccessTokens.php | 9 +++ app/Providers/RouteServiceProvider.php | 5 ++ ...01_create_personal_access_tokens_table.php | 36 ++++++++++++ routes/apipub.php | 9 +++ 10 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 app/Classes/General/Eloquent/Filters/AmountExceed.php create mode 100644 app/Classes/General/Eloquent/Filters/AmountShort.php create mode 100644 app/Classes/General/Eloquent/Filters/CreatedBefore.php create mode 100644 app/Classes/General/Eloquent/Filters/PaymentMethod.php create mode 100644 app/Http/Middleware/TokenCheckerMiddleware.php create mode 100644 app/Models/PersonalAccessTokens.php create mode 100644 database/migrations/2023_04_06_000001_create_personal_access_tokens_table.php create mode 100644 routes/apipub.php diff --git a/app/Classes/General/Eloquent/Filters/AmountExceed.php b/app/Classes/General/Eloquent/Filters/AmountExceed.php new file mode 100644 index 00000000..a3e353fa --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/AmountExceed.php @@ -0,0 +1,19 @@ +where('amount', '>', $value); + } +} diff --git a/app/Classes/General/Eloquent/Filters/AmountShort.php b/app/Classes/General/Eloquent/Filters/AmountShort.php new file mode 100644 index 00000000..7406fc47 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/AmountShort.php @@ -0,0 +1,19 @@ +where('amount', '<', $value); + } +} diff --git a/app/Classes/General/Eloquent/Filters/CreatedBefore.php b/app/Classes/General/Eloquent/Filters/CreatedBefore.php new file mode 100644 index 00000000..bbbe3232 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/CreatedBefore.php @@ -0,0 +1,20 @@ +where('created_at', '<', Carbon::parse($value)); + } +} diff --git a/app/Classes/General/Eloquent/Filters/PaymentMethod.php b/app/Classes/General/Eloquent/Filters/PaymentMethod.php new file mode 100644 index 00000000..cd8ba435 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/PaymentMethod.php @@ -0,0 +1,20 @@ +where('payment_method', $value); + } + +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 79e670f6..dc3bc265 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -44,6 +44,11 @@ class Kernel extends HttpKernel 'throttle:300,1', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], + + 'apipub' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], ]; /** @@ -63,6 +68,7 @@ class Kernel extends HttpKernel 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, - 'valid.token' => ValidateToken::class + 'valid.token' => ValidateToken::class, + 'token.check' => \App\Http\Middleware\TokenCheckerMiddleware::class, ]; } diff --git a/app/Http/Middleware/TokenCheckerMiddleware.php b/app/Http/Middleware/TokenCheckerMiddleware.php new file mode 100644 index 00000000..480ea348 --- /dev/null +++ b/app/Http/Middleware/TokenCheckerMiddleware.php @@ -0,0 +1,56 @@ +query('api-key')) { + return response()->json(['message' => 'Invalid API key.'], 401); + } + + // Check if the api_key is valid + $apiKey = $request->query('api-key'); + $personalAccessToken = PersonalAccessTokens::where('token', $apiKey)->first(); + + if (!$personalAccessToken) { + return response()->json(['error' => 'Unauthorized'], 401); + } + return $next($request); + + //Method 2: Token pass via request header + /* + $authHeader = $request->header('Authorization'); + if (preg_match('/Bearer\s+(.*)$/i', $authHeader, $matches)) { + $token = $matches[1]; + // validate the token here + + $personalAccessToken = PersonalAccessToken::where('token', $token)->first(); + + if (!$personalAccessToken) { + return response()->json(['error' => 'Unauthorized'], 401); + } + + + // if the token is valid, you can attach it to the request + $request->attributes->add(['bearerToken' => $token]); + return $next($request); + } + return response()->json(['error' => 'Unauthorized'], 401); + */ + } +} diff --git a/app/Models/PersonalAccessTokens.php b/app/Models/PersonalAccessTokens.php new file mode 100644 index 00000000..5efc331d --- /dev/null +++ b/app/Models/PersonalAccessTokens.php @@ -0,0 +1,9 @@ +namespace($this->namespace) ->group(base_path('routes/api.php')); + Route::prefix('public/api') + ->middleware('apipub') + ->namespace($this->namespace) + ->group(base_path('routes/apipub.php')); + Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); diff --git a/database/migrations/2023_04_06_000001_create_personal_access_tokens_table.php b/database/migrations/2023_04_06_000001_create_personal_access_tokens_table.php new file mode 100644 index 00000000..691a4bf8 --- /dev/null +++ b/database/migrations/2023_04_06_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + // $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +} diff --git a/routes/apipub.php b/routes/apipub.php new file mode 100644 index 00000000..7ad05b14 --- /dev/null +++ b/routes/apipub.php @@ -0,0 +1,9 @@ + 'apipub', 'prefix' => 'v1', 'as' => 'apipub.'], function () { + Route::group(['middleware' => 'token.check'], function () { + Route::get('/list', 'Transactions\ListTransactionsController@list')->name('list'); + }); +}); From f7a9b2332c3a991d47910f3cf6b6e211d001eb7a Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 11 Apr 2023 11:39:22 +0800 Subject: [PATCH 70/99] enable customer 769SMC summary in 2 different year 2022 and 2023 --- routes/web.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/routes/web.php b/routes/web.php index 82a27082..1fa8f7b9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -431,10 +431,21 @@ Route::get('/settings', function () { Route::get('/customer/{company_module_id}/summary', 'Exports\ExportCompanyModuleSummaryController@export')->name('customer.summary.export'); Route::get('/export-customer-order/{marking}', 'Exports\ExportCompanyModuleSummaryController@exportorderSummaryByMarking')->name('customer.orderSummary.export'); -Route::get('/customer/summary/monthly', function () { +Route::get('/customer/summary/{year}/monthly', function ($year) { + if (!in_array($year, [2022, 2023])) { + return 'Year Error!'; + } + // $containers = Container::whereMonth('loading_date', '>=', ((float)Carbon::now()->format('m') - 2))->whereYear('loading_date', (float)Carbon::now()->format('Y'))->get(); - // $containers = Container::whereMonth('loading_date', '>=', 1)->whereYear('loading_date', 2023)->get(); - $containers = Container::whereMonth('loading_date', '>=', 9)->whereYear('loading_date', 2022)->get(); + + if ($year == 2022) { + $containers = Container::whereMonth('loading_date', '>=', 9)->whereYear('loading_date', 2022)->get(); + } + + if ($year == 2023) { + $containers = Container::whereMonth('loading_date', '>=', 1)->whereYear('loading_date', 2023)->get(); + } + $marking = '769SMC'; $connection = CompanyConnection::where('invitee_reference', $marking)->first(); $companyModuleId = $connection->invitee->id; From 2bb4afe4263d5d71ae7abc548f93ceedda26565f Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 12 Apr 2023 11:58:10 +0800 Subject: [PATCH 71/99] update show duplicated invoice logic --- routes/web.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 1fa8f7b9..813eebba 100644 --- a/routes/web.php +++ b/routes/web.php @@ -870,7 +870,7 @@ Route::get('/invoices/approve', function(Request $request){ Route::get('/invoices/show-duplicated', function(Request $request){ $transactionWithMultipleInvoice = DB::table('transactions') ->where('type', TransactionType::SHIPPING_INVOICE) - ->where('status', '!=' , ApprovalStatus::EXPIRED) + ->whereNotIn('status', [ApprovalStatus::EXPIRED, ApprovalStatus::SUSPENDED]) ->where('deleted_at', null) ->select('owner_id', DB::raw('count(*) as count')) ->groupBy('owner_id') From 1a5db2528561313198c70c2d2a9af97c3ca7c295 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 12 Apr 2023 12:15:06 +0800 Subject: [PATCH 72/99] update show duplicated invoice logic --- routes/web.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/routes/web.php b/routes/web.php index 813eebba..3d6c17f0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -899,9 +899,18 @@ Route::get('/invoices/show-duplicated', function(Request $request){ foreach($duplicatedInvoice as $invoice) { $order = $invoice->owner->owner; + + $billplzPaymentId = ''; + + if ($invoice->status == ApprovalStatus::COMPLETED) { + if ($invoice->transactions->first()->type == TransactionType::PAYMENT) { + $billplzPaymentId = $invoice->transactions->first()->payment_reference ; + } + } + echo "
'. $order->reference.' - ' . $order->created_at . '".ApprovalStatus::APPROVAL_STATUS_ID[$invoice->status]."".ApprovalStatus::APPROVAL_STATUS_ID[$invoice->status]. ' Billplz reference: ' . $billplzPaymentId . "$invoice->owner_id$invoice->amount".$duplicatedOrderArray[$invoice->owner_id]."