From a2e65a2ba5eac494d6d25eb64c0649d7722c1d64 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sun, 15 Sep 2024 16:47:30 +0800 Subject: [PATCH 01/28] Laravel Vapor - Deployment day to production, solve an error in YD API query --- .../Commands/V2/ProcessYDPortalDataV2Command.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php b/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php index 6d521a65..5d4bb673 100644 --- a/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php +++ b/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php @@ -44,23 +44,23 @@ class ProcessYDPortalDataV2Command extends Command $jobs = []; $jobs = array_merge($jobs, $this->fetchPackingListsFromYdPortalV2CommandJobs()); $jobs = array_merge($jobs, $this->fetchContainersFromYdPortalV2CommandJobs()); - $jobsWithDelay1 = $this->fetchContainersUpdatesFromYdPortalV2CommandJob(); - $jobsWithDelay2 = $this->fetchDeliveryUpdatesFromYdPortalV2CommandJobs(); + $jobs2 = $this->fetchContainersUpdatesFromYdPortalV2CommandJob(); + $jobs3 = $this->fetchDeliveryUpdatesFromYdPortalV2CommandJobs(); // The following job is intentionally excluded ////$jobs = array_merge($jobs, $this->fetchOrderListsFromYdPortalV2CommandJob()); // Bus::chain($jobs)->dispatch(); - foreach ($jobs as $job) { - dispatch($job); + foreach ($jobs as $index => $job) { + dispatch($job)->delay(now()->addSeconds($index * 2)); } - foreach ($jobsWithDelay1 as $index => $job) { + foreach ($jobs2 as $index => $job) { dispatch($job)->delay(now()->addSeconds($index * 1)); } - foreach ($jobsWithDelay2 as $index => $job) { + foreach ($jobs3 as $index => $job) { dispatch($job)->delay(now()->addSeconds($index * 1)); } From 53b8764a61aba5e9a64d8b4b9635b2a5565b5926 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sun, 15 Sep 2024 17:27:23 +0800 Subject: [PATCH 02/28] Laravel Vapor - Deployment day to production, solve an error in YD API query --- app/Console/Commands/V2/ProcessYDPortalDataV2Command.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php b/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php index 5d4bb673..facd3ef3 100644 --- a/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php +++ b/app/Console/Commands/V2/ProcessYDPortalDataV2Command.php @@ -61,7 +61,8 @@ class ProcessYDPortalDataV2Command extends Command } foreach ($jobs3 as $index => $job) { - dispatch($job)->delay(now()->addSeconds($index * 1)); + $delayInSeconds = intdiv($index, 2); + dispatch($job)->delay(now()->addSeconds($delayInSeconds)); } } @@ -146,7 +147,7 @@ class ProcessYDPortalDataV2Command extends Command $count = 0; foreach ($packingLists as $packingList) { - if ($count >= 500) { + if ($count >= 1000) { break; } From 2b6727cadc38331c2c24a599372dfbc3934a35d8 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sun, 15 Sep 2024 22:40:28 +0800 Subject: [PATCH 03/28] Laravel Vapor - Show stack trace when enabled through environment variables --- app/Exceptions/Handler.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 3d292064..ec4dba30 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -7,6 +7,7 @@ use App\Classes\ValueObjects\Response\ApiResponseObject; use Illuminate\Auth\AuthenticationException; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Foundation\Http\Exceptions\MaintenanceModeException; +use Illuminate\Support\Facades\Log; use Throwable; class Handler extends ExceptionHandler @@ -36,6 +37,13 @@ class Handler extends ExceptionHandler */ public function report(Throwable $exception) { + if (env('LOG_STACK_TRACE', false)) { + Log::error($exception->getMessage(), [ + 'exception' => $exception, + 'stack_trace' => $exception->getTraceAsString(), + ]); + } + parent::report($exception); } From c0ff60c5e72c0a8b5c7f2266e34f11fcfa924fba Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 04:49:31 +0800 Subject: [PATCH 04/28] Laravel Vapor - New table and command to handle delayed jobs --- .../PackingListToPerfexCRMProcessor.php | 24 ++++++++ .../V2/ProcessDelayedJobsV2Command.php | 61 +++++++++++++++++++ app/Console/Kernel.php | 4 ++ app/Models/DelayedJob.php | 19 ++++++ ...09_19_035110_create_jobs_delayed_table.php | 34 +++++++++++ 5 files changed, 142 insertions(+) create mode 100644 app/Console/Commands/V2/ProcessDelayedJobsV2Command.php create mode 100644 app/Models/DelayedJob.php create mode 100644 database/migrations/2024_09_19_035110_create_jobs_delayed_table.php diff --git a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php index de63ee76..bc32c555 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php @@ -9,6 +9,7 @@ use App\Models\PackingList; use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus; use App\Classes\ValueObjects\Constants\PerfexCRMTasksYDStages; use App\Classes\ValueObjects\Constants\PerfexCRMTaskStatus; +use App\Models\DelayedJob; use Illuminate\Support\Facades\Log; class PackingListToPerfexCRMProcessor @@ -92,6 +93,29 @@ class PackingListToPerfexCRMProcessor private function dispatchUpdateJob(PackingList $packingList, UpdatePerfexCRMObject $updatePerfexCRMObject) { + try { + /** + * UpdatePerfexCRMPrelude constructor. + * @param $packingList + * @param Transaction $transaction + * @param UpdatePerfexCRMObject $updatePerfexCRMObject + * @param bool|null $shouldCreateInvoice + */ + DelayedJob::create([ + 'job_class' => UpdatePerfexCRMPrelude::class, + 'parameters' => json_encode([ + 'packingList' => $packingList, + 'transaction' => null, + 'updatePerfexCRMObject' => $updatePerfexCRMObject, + 'shouldCreateInvoice' => false, + ]), + 'execute_at' => now()->addMinute(1), + ]); + + } catch (\Exception $e) { + Log::info('An unexpected error occurred when DelayedJob::create: ' . $e->getMessage()); + } + UpdatePerfexCRMPrelude::dispatch($packingList, null, $updatePerfexCRMObject, false); } diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php new file mode 100644 index 00000000..3bbb5e53 --- /dev/null +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -0,0 +1,61 @@ +limit(10) + ->get(); + + $count = 0; + foreach ($jobs as $index => $delayedJob) { + $jobClass = $delayedJob->job_class; + $params = json_decode($delayedJob->parameters, true); + + $singleDelayedJob = new $jobClass( + $params['packingList'], + $params['transaction'], + $params['updatePerfexCRMObject'], + $params['shouldCreateInvoice'] + ); + + Log::info('packingList : ' . $params['packingList']); + Log::info('transaction : ' . $params['transaction']); + Log::info('updatePerfexCRMObject : ' . $params['updatePerfexCRMObject']); + Log::info('shouldCreateInvoice : ' . $params['shouldCreateInvoice']); + + // dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); + + // $delayedJob->delete(); + } + Log::info('Total delayed jobs processed and dispatched: ' . $count); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 52f80904..81708430 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -34,6 +34,10 @@ class Kernel extends ConsoleKernel ->everyFiveMinutes() ->withoutOverlapping(); + // $schedule->command('process-delayed-jobs-command') + // ->everyFiveMinutes() + // ->withoutOverlapping(); + $schedule->command('housekeeping-s3-files-command') ->dailyAt('01:00') ->withoutOverlapping(); diff --git a/app/Models/DelayedJob.php b/app/Models/DelayedJob.php new file mode 100644 index 00000000..7727c679 --- /dev/null +++ b/app/Models/DelayedJob.php @@ -0,0 +1,19 @@ +id(); + $table->string('job_class'); + $table->json('parameters'); + $table->timestamp('execute_at'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('jobs_delayed'); + } +} From 639b0ffe4ac9589004f4310b79de280ab85b0345 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 04:55:06 +0800 Subject: [PATCH 05/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Commands/V2/ProcessDelayedJobsV2Command.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index 3bbb5e53..738b7f0d 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -53,7 +53,6 @@ class ProcessDelayedJobsV2Command extends Command Log::info('shouldCreateInvoice : ' . $params['shouldCreateInvoice']); // dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); - // $delayedJob->delete(); } Log::info('Total delayed jobs processed and dispatched: ' . $count); From 4456ddcb6b64eb1945088daa31a926d8f69ba394 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 06:38:22 +0800 Subject: [PATCH 06/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Classes/Jobs/UpdatePerfexCRMPrelude.php | 8 ++++++++ .../Commands/V2/ProcessDelayedJobsV2Command.php | 12 ++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php index ca471bd0..4731cc0b 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php +++ b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php @@ -47,6 +47,14 @@ class UpdatePerfexCRMPrelude implements ShouldQueue public function handle() { + Log::info('packingList: ' . json_encode($this->packingList)); + Log::info('packingList owner: ' . json_encode($this->packingList->owner)); + Log::info('transaction: ' . json_encode($this->transaction)); + Log::info('updatePerfexCRMObject: ' . json_encode($this->updatePerfexCRMObject)); + Log::info('shouldCreateInvoice: ' . json_encode($this->shouldCreateInvoice)); + + return; + if(is_null($this->packingList)){ $this->packingList = $this->transaction->owner->owner; } diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index 738b7f0d..954ef033 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -47,14 +47,14 @@ class ProcessDelayedJobsV2Command extends Command $params['shouldCreateInvoice'] ); - Log::info('packingList : ' . $params['packingList']); - Log::info('transaction : ' . $params['transaction']); - Log::info('updatePerfexCRMObject : ' . $params['updatePerfexCRMObject']); - Log::info('shouldCreateInvoice : ' . $params['shouldCreateInvoice']); + Log::info('ProcessDelayedJobsV2Command packingList : ' . $params['packingList']); + Log::info('ProcessDelayedJobsV2Command transaction : ' . $params['transaction']); + Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . $params['updatePerfexCRMObject']); + Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . $params['shouldCreateInvoice']); - // dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); + dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); // $delayedJob->delete(); } - Log::info('Total delayed jobs processed and dispatched: ' . $count); + Log::info('ProcessDelayedJobsV2Command Total delayed jobs processed and dispatched: ' . $count); } } From e18ff9215ab076f45de25c86edf59feceefdecb4 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 07:25:32 +0800 Subject: [PATCH 07/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Classes/Jobs/UpdatePerfexCRMPrelude.php | 12 +++++------ .../UpdatePerfexCRMObject.php | 21 +++++++++++++++++++ .../PackingListToPerfexCRMProcessor.php | 2 +- .../V2/ProcessDelayedJobsV2Command.php | 10 ++++----- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php index 4731cc0b..c7fe8503 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php +++ b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php @@ -47,13 +47,13 @@ class UpdatePerfexCRMPrelude implements ShouldQueue public function handle() { - Log::info('packingList: ' . json_encode($this->packingList)); - Log::info('packingList owner: ' . json_encode($this->packingList->owner)); - Log::info('transaction: ' . json_encode($this->transaction)); - Log::info('updatePerfexCRMObject: ' . json_encode($this->updatePerfexCRMObject)); - Log::info('shouldCreateInvoice: ' . json_encode($this->shouldCreateInvoice)); + // Log::info('packingList: ' . json_encode($this->packingList)); + // Log::info('packingList owner: ' . json_encode($this->packingList->owner)); + // Log::info('transaction: ' . json_encode($this->transaction)); + // Log::info('updatePerfexCRMObject: ' . json_encode($this->updatePerfexCRMObject)); + // Log::info('shouldCreateInvoice: ' . json_encode($this->shouldCreateInvoice)); - return; + // return; if(is_null($this->packingList)){ $this->packingList = $this->transaction->owner->owner; diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php index 17e559c9..a8b606b0 100644 --- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php +++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php @@ -142,4 +142,25 @@ class UpdatePerfexCRMObject implements DataTransferObject { $this->invoiceId = $invoiceId; } + + public function toArray(): array + { + return [ + 'companyName' => $this->companyName, + 'companyReference' => $this->companyReference, + 'contactName' => $this->contactName, + 'contactEmail' => $this->contactEmail, + 'bookingMarking' => $this->bookingMarking, + 'projectName' => $this->projectName, + 'projectStatus' => $this->projectStatus, + 'invoiceId' => $this->invoiceId, + 'milestoneNames' => $this->milestoneNames, + 'tasks' => $this->tasks, + ]; + } + + public function toJson(): string + { + return json_encode($this->toArray()); + } } diff --git a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php index bc32c555..fbfaf17d 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php @@ -106,7 +106,7 @@ class PackingListToPerfexCRMProcessor 'parameters' => json_encode([ 'packingList' => $packingList, 'transaction' => null, - 'updatePerfexCRMObject' => $updatePerfexCRMObject, + 'updatePerfexCRMObject' => $updatePerfexCRMObject->toJson(), 'shouldCreateInvoice' => false, ]), 'execute_at' => now()->addMinute(1), diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index 954ef033..2bda6e68 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -40,6 +40,11 @@ class ProcessDelayedJobsV2Command extends Command $jobClass = $delayedJob->job_class; $params = json_decode($delayedJob->parameters, true); + Log::info('ProcessDelayedJobsV2Command packingList : ' . $params['packingList']); + Log::info('ProcessDelayedJobsV2Command transaction : ' . $params['transaction']); + Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . $params['updatePerfexCRMObject']); + Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . $params['shouldCreateInvoice']); + $singleDelayedJob = new $jobClass( $params['packingList'], $params['transaction'], @@ -47,11 +52,6 @@ class ProcessDelayedJobsV2Command extends Command $params['shouldCreateInvoice'] ); - Log::info('ProcessDelayedJobsV2Command packingList : ' . $params['packingList']); - Log::info('ProcessDelayedJobsV2Command transaction : ' . $params['transaction']); - Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . $params['updatePerfexCRMObject']); - Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . $params['shouldCreateInvoice']); - dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); // $delayedJob->delete(); } From f6bc88f553f1707289c2788af04910e539c87c75 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 07:42:10 +0800 Subject: [PATCH 08/28] Laravel Vapor - New table and command to handle delayed jobs --- .../PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php index fbfaf17d..5c992804 100644 --- a/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php +++ b/app/Classes/Modules/PerfexCRM/Processors/PackingListToPerfexCRMProcessor.php @@ -106,7 +106,7 @@ class PackingListToPerfexCRMProcessor 'parameters' => json_encode([ 'packingList' => $packingList, 'transaction' => null, - 'updatePerfexCRMObject' => $updatePerfexCRMObject->toJson(), + 'updatePerfexCRMObject' => $updatePerfexCRMObject->toArray(), 'shouldCreateInvoice' => false, ]), 'execute_at' => now()->addMinute(1), From cd36f5b4350d500c2650897c64675bd1f113b549 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 08:06:22 +0800 Subject: [PATCH 09/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Classes/Jobs/UpdatePerfexCRMPrelude.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php index c7fe8503..5a8d32ae 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php +++ b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php @@ -47,13 +47,15 @@ class UpdatePerfexCRMPrelude implements ShouldQueue public function handle() { - // Log::info('packingList: ' . json_encode($this->packingList)); - // Log::info('packingList owner: ' . json_encode($this->packingList->owner)); - // Log::info('transaction: ' . json_encode($this->transaction)); - // Log::info('updatePerfexCRMObject: ' . json_encode($this->updatePerfexCRMObject)); - // Log::info('shouldCreateInvoice: ' . json_encode($this->shouldCreateInvoice)); + Log::info('packingList: ' . json_encode($this->packingList)); + Log::info('packingList owner: ' . json_encode($this->packingList->owner)); + Log::info('transaction: ' . json_encode($this->transaction)); + Log::info('updatePerfexCRMObject: ' . json_encode($this->updatePerfexCRMObject)); + Log::info('shouldCreateInvoice: ' . json_encode($this->shouldCreateInvoice)); - // return; + if(env('APP_ENV') !== 'production'){ + return; + } if(is_null($this->packingList)){ $this->packingList = $this->transaction->owner->owner; From 49b5d142d9118f1c4609ee6d3e885ccba6c274c5 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 08:18:41 +0800 Subject: [PATCH 10/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Commands/V2/ProcessDelayedJobsV2Command.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index 2bda6e68..64665399 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -40,10 +40,10 @@ class ProcessDelayedJobsV2Command extends Command $jobClass = $delayedJob->job_class; $params = json_decode($delayedJob->parameters, true); - Log::info('ProcessDelayedJobsV2Command packingList : ' . $params['packingList']); - Log::info('ProcessDelayedJobsV2Command transaction : ' . $params['transaction']); - Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . $params['updatePerfexCRMObject']); - Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . $params['shouldCreateInvoice']); + Log::info('ProcessDelayedJobsV2Command packingList : ' . json_encode($params['packingList'])); + Log::info('ProcessDelayedJobsV2Command transaction : ' . json_encode($params['transaction'])); + Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . json_encode($params['updatePerfexCRMObject'])); + Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . json_encode($params['shouldCreateInvoice'])); $singleDelayedJob = new $jobClass( $params['packingList'], From fed40d838462526c997da9c93f327af7260d5855 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 08:38:13 +0800 Subject: [PATCH 11/28] Laravel Vapor - New table and command to handle delayed jobs --- .../UpdatePerfexCRMObject.php | 18 ++++++++++++++++++ .../V2/ProcessDelayedJobsV2Command.php | 6 ++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php index a8b606b0..2bba3192 100644 --- a/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php +++ b/app/Classes/Modules/PerfexCRM/DataTransferObjects/UpdatePerfexCRMObject.php @@ -163,4 +163,22 @@ class UpdatePerfexCRMObject implements DataTransferObject { return json_encode($this->toArray()); } + + public static function fromJson(string $json): self + { + $data = json_decode($json, true); + + return new self( + $data['companyName'], + $data['companyReference'], + $data['contactName'], + $data['contactEmail'], + $data['bookingMarking'], + $data['projectName'], + $data['projectStatus'], + $data['invoiceId'], + $data['milestoneNames'], + $data['tasks'] + ); + } } diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index 64665399..d98bc487 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -2,7 +2,7 @@ namespace App\Console\Commands\V2; - +use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject; use Illuminate\Console\Command; use App\Models\DelayedJob; use Illuminate\Support\Facades\Log; @@ -45,10 +45,12 @@ class ProcessDelayedJobsV2Command extends Command Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . json_encode($params['updatePerfexCRMObject'])); Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . json_encode($params['shouldCreateInvoice'])); + $updatePerfexCRMObject = UpdatePerfexCRMObject::fromJson($params['updatePerfexCRMObject']); + $singleDelayedJob = new $jobClass( $params['packingList'], $params['transaction'], - $params['updatePerfexCRMObject'], + $updatePerfexCRMObject, $params['shouldCreateInvoice'] ); From c19c44bfbecf8571744d7cce2a9bcd17137481b1 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 08:54:11 +0800 Subject: [PATCH 12/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Commands/V2/ProcessDelayedJobsV2Command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index d98bc487..cd7a7886 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -45,7 +45,7 @@ class ProcessDelayedJobsV2Command extends Command Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . json_encode($params['updatePerfexCRMObject'])); Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . json_encode($params['shouldCreateInvoice'])); - $updatePerfexCRMObject = UpdatePerfexCRMObject::fromJson($params['updatePerfexCRMObject']); + $updatePerfexCRMObject = UpdatePerfexCRMObject::fromJson(json_encode($params['updatePerfexCRMObject'])); $singleDelayedJob = new $jobClass( $params['packingList'], From 457952cd440128eab34ca148ed3bdfa166d8b540 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 09:34:28 +0800 Subject: [PATCH 13/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Classes/Jobs/UpdatePerfexCRMPrelude.php | 6 +-- .../V2/ProcessDelayedJobsV2Command.php | 37 +++++++++++-------- 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php index 5a8d32ae..e7955ec8 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php +++ b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php @@ -32,12 +32,12 @@ class UpdatePerfexCRMPrelude implements ShouldQueue /** * UpdatePerfexCRMPrelude constructor. - * @param $packingList + * @param PackingList $packingList * @param Transaction $transaction * @param UpdatePerfexCRMObject $updatePerfexCRMObject * @param bool|null $shouldCreateInvoice */ - public function __construct($packingList, $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, ?bool $shouldCreateInvoice = false) + public function __construct(PackingList $packingList, $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, ?bool $shouldCreateInvoice = false) { $this->packingList = $packingList; $this->transaction = $transaction; @@ -50,7 +50,7 @@ class UpdatePerfexCRMPrelude implements ShouldQueue Log::info('packingList: ' . json_encode($this->packingList)); Log::info('packingList owner: ' . json_encode($this->packingList->owner)); Log::info('transaction: ' . json_encode($this->transaction)); - Log::info('updatePerfexCRMObject: ' . json_encode($this->updatePerfexCRMObject)); + Log::info('updatePerfexCRMObject get tasks: ' . json_encode($this->updatePerfexCRMObject->getTasks())); Log::info('shouldCreateInvoice: ' . json_encode($this->shouldCreateInvoice)); if(env('APP_ENV') !== 'production'){ diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index cd7a7886..bc3fc4b5 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -2,9 +2,11 @@ namespace App\Console\Commands\V2; +use App\Classes\Jobs\UpdatePerfexCRMPrelude; use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject; use Illuminate\Console\Command; use App\Models\DelayedJob; +use App\Models\PackingList; use Illuminate\Support\Facades\Log; @@ -32,30 +34,35 @@ class ProcessDelayedJobsV2Command extends Command public function handle() { $jobs = DelayedJob::orderBy('execute_at') - ->limit(10) + ->limit(5) ->get(); $count = 0; foreach ($jobs as $index => $delayedJob) { $jobClass = $delayedJob->job_class; - $params = json_decode($delayedJob->parameters, true); + if($jobClass === UpdatePerfexCRMPrelude::class){ + $params = json_decode($delayedJob->parameters, true); - Log::info('ProcessDelayedJobsV2Command packingList : ' . json_encode($params['packingList'])); - Log::info('ProcessDelayedJobsV2Command transaction : ' . json_encode($params['transaction'])); - Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . json_encode($params['updatePerfexCRMObject'])); - Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . json_encode($params['shouldCreateInvoice'])); + Log::info('ProcessDelayedJobsV2Command packingList : ' . json_encode($params['packingList'])); + Log::info('ProcessDelayedJobsV2Command packingList id : ' . json_encode($params['packingList']['id'])); + Log::info('ProcessDelayedJobsV2Command transaction : ' . json_encode($params['transaction'])); + Log::info('ProcessDelayedJobsV2Command updatePerfexCRMObject : ' . json_encode($params['updatePerfexCRMObject'])); + Log::info('ProcessDelayedJobsV2Command shouldCreateInvoice : ' . json_encode($params['shouldCreateInvoice'])); - $updatePerfexCRMObject = UpdatePerfexCRMObject::fromJson(json_encode($params['updatePerfexCRMObject'])); + $updatePerfexCRMObject = UpdatePerfexCRMObject::fromJson(json_encode($params['updatePerfexCRMObject'])); + $packingList = PackingList::where('id', $params['packingList']['id'])->first(); - $singleDelayedJob = new $jobClass( - $params['packingList'], - $params['transaction'], - $updatePerfexCRMObject, - $params['shouldCreateInvoice'] - ); + $singleDelayedJob = new $jobClass( + $packingList, + $params['transaction'], + $updatePerfexCRMObject, + $params['shouldCreateInvoice'] + ); + + dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); + // $delayedJob->delete(); + } - dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); - // $delayedJob->delete(); } Log::info('ProcessDelayedJobsV2Command Total delayed jobs processed and dispatched: ' . $count); } From 0386c224b1192983fe347c34c3200723b6d2a001 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 10:13:52 +0800 Subject: [PATCH 14/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Commands/V2/ProcessDelayedJobsV2Command.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index bc3fc4b5..0029b64c 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -61,6 +61,7 @@ class ProcessDelayedJobsV2Command extends Command dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); // $delayedJob->delete(); + $count++; } } From ea569b437b085999ae5a8e289130ccf0c7f25a9d Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 10:15:31 +0800 Subject: [PATCH 15/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Commands/V2/ProcessDelayedJobsV2Command.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index 0029b64c..bb8f857d 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -60,7 +60,7 @@ class ProcessDelayedJobsV2Command extends Command ); dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); - // $delayedJob->delete(); + $delayedJob->delete(); $count++; } From c8ca6d7f6f0718e894848e75df21fe37a5c47e7b Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 10:29:43 +0800 Subject: [PATCH 16/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Kernel.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 81708430..e2811174 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -34,9 +34,9 @@ class Kernel extends ConsoleKernel ->everyFiveMinutes() ->withoutOverlapping(); - // $schedule->command('process-delayed-jobs-command') - // ->everyFiveMinutes() - // ->withoutOverlapping(); + $schedule->command('process-delayed-jobs-command') + ->everyFiveMinutes() + ->withoutOverlapping(); $schedule->command('housekeeping-s3-files-command') ->dailyAt('01:00') From 8795e116f0c06b51d1048041cea745b725d19925 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 10:44:56 +0800 Subject: [PATCH 17/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Commands/V2/ProcessDelayedJobsV2Command.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index bb8f857d..3229f0b0 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -34,7 +34,7 @@ class ProcessDelayedJobsV2Command extends Command public function handle() { $jobs = DelayedJob::orderBy('execute_at') - ->limit(5) + ->limit(50) ->get(); $count = 0; @@ -59,7 +59,7 @@ class ProcessDelayedJobsV2Command extends Command $params['shouldCreateInvoice'] ); - dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 30)); + dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 15)); $delayedJob->delete(); $count++; } From 4d7e9dcd6689110405581ca1a99d91235c2a1658 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 19 Sep 2024 12:37:07 +0800 Subject: [PATCH 18/28] Laravel Vapor - Fix a null error --- app/Classes/Jobs/UpdatePerfexCRMPrelude.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php index e7955ec8..57361f52 100644 --- a/app/Classes/Jobs/UpdatePerfexCRMPrelude.php +++ b/app/Classes/Jobs/UpdatePerfexCRMPrelude.php @@ -37,7 +37,7 @@ class UpdatePerfexCRMPrelude implements ShouldQueue * @param UpdatePerfexCRMObject $updatePerfexCRMObject * @param bool|null $shouldCreateInvoice */ - public function __construct(PackingList $packingList, $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, ?bool $shouldCreateInvoice = false) + public function __construct(?PackingList $packingList, $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, ?bool $shouldCreateInvoice = false) { $this->packingList = $packingList; $this->transaction = $transaction; From d61d58a51a1d6f9515e33757a5b880a9ca605f3f Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Fri, 20 Sep 2024 01:46:38 +0800 Subject: [PATCH 19/28] Laravel Vapor - New table and command to handle delayed jobs --- app/Console/Commands/V2/ProcessDelayedJobsV2Command.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php index 3229f0b0..8f19a1e5 100644 --- a/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php +++ b/app/Console/Commands/V2/ProcessDelayedJobsV2Command.php @@ -34,7 +34,7 @@ class ProcessDelayedJobsV2Command extends Command public function handle() { $jobs = DelayedJob::orderBy('execute_at') - ->limit(50) + ->limit(150) ->get(); $count = 0; @@ -59,7 +59,8 @@ class ProcessDelayedJobsV2Command extends Command $params['shouldCreateInvoice'] ); - dispatch($singleDelayedJob)->delay(now()->addSeconds($index * 15)); + $delayInSeconds = intdiv($index, 2) * 10 ; + dispatch($singleDelayedJob)->delay(now()->addSeconds($delayInSeconds)); $delayedJob->delete(); $count++; } From 5401b38638be20ad3e4231dfbb335f80462205e2 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Fri, 20 Sep 2024 06:56:35 +0800 Subject: [PATCH 20/28] Laravel Vapor - Debugging 504 error --- .../FetchOrderPackagesLogic.php | 60 ++++++++++++++++++ .../Orders/FetchOrderPackagesController.php | 20 ++++++ app/Http/Resources/OrderPackagesResource.php | 61 +++++++++++++++++++ .../OrderPackageV2SectionComponent.vue | 2 +- routes/order.php | 1 + 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php create mode 100644 app/Http/Controllers/Orders/FetchOrderPackagesController.php create mode 100644 app/Http/Resources/OrderPackagesResource.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php new file mode 100644 index 00000000..51221f5d --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php @@ -0,0 +1,60 @@ + 'Retrieved Order Packages', + 'message' => 'You have successfully retrieved an order packages' + ]; + } + + /** @var CanFetchOrder */ + private $canFetchOrder; + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** + * FetchOrderPackagesLogic 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 OrderPackagesResource($query)); + + } + +} diff --git a/app/Http/Controllers/Orders/FetchOrderPackagesController.php b/app/Http/Controllers/Orders/FetchOrderPackagesController.php new file mode 100644 index 00000000..2902887b --- /dev/null +++ b/app/Http/Controllers/Orders/FetchOrderPackagesController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/app/Http/Resources/OrderPackagesResource.php b/app/Http/Resources/OrderPackagesResource.php new file mode 100644 index 00000000..b16dc407 --- /dev/null +++ b/app/Http/Resources/OrderPackagesResource.php @@ -0,0 +1,61 @@ +id; + + return [ + 'id' => $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()), + 'parcels' => $this->whenLoaded('packingLists', function() { + return [ + 'origin_warehouse_packages' => PackingListResource::collection( + $this->originWarehousePackages()->get() + ), + 'in_transit_packages' => PackingListResource::collection( + $this->inTransitPackages()->get() + ), + 'destination_warehouse_packages' => PackingListResource::collection( + $this->destinationWarehousePackages()->get() + ), + 'delivered_packages' => PackingListResource::collection( + $this->deliveredPackages()->get() + ), + 'received_packages' => PackingListResource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()), + ]; + }), + // 'invoices' => $this->whenLoaded('packingLists', function() use ($orderId) { + // return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get()); + // }), + //'remarks' => RemarkResource::collection($this->remarks), + 'created_at' => $this->created_at->format('d-m-Y') + ]; + + } +} diff --git a/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue index e4c7fe2d..7ee7c061 100644 --- a/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderPackageV2SectionComponent.vue @@ -333,7 +333,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.packages', this.order_number), 'get', this.section, false, false) }, successHandler(response){ this.dataLoaded = true; diff --git a/routes/order.php b/routes/order.php index 998ef517..27c67ec0 100644 --- a/routes/order.php +++ b/routes/order.php @@ -21,4 +21,5 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f Route::put('/assign-remark/{id}', 'AssignOrderRemarkController@create')->name('assign.remark'); Route::get('/{id}/shipping-cost', 'ShippingCostController@calculate')->name('shipping.cost'); + Route::get('/packages/{id}', 'FetchOrderPackagesController@fetch')->name('packages'); }); From cca188eefd44d8fc409a9f544acce6a6480d0374 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Fri, 20 Sep 2024 07:26:48 +0800 Subject: [PATCH 21/28] Laravel Vapor - Debugging 504 error --- app/Http/Resources/OrderPackagesResource.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Resources/OrderPackagesResource.php b/app/Http/Resources/OrderPackagesResource.php index b16dc407..fed8b326 100644 --- a/app/Http/Resources/OrderPackagesResource.php +++ b/app/Http/Resources/OrderPackagesResource.php @@ -29,8 +29,8 @@ class OrderPackagesResource extends JsonResource '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), + //'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()), 'parcels' => $this->whenLoaded('packingLists', function() { From 3a97b5e26dec0e1abe7dab324a09f829edf92116 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Fri, 20 Sep 2024 08:22:47 +0800 Subject: [PATCH 22/28] Laravel Vapor - Debugging 504 error --- app/Http/Resources/OrderPackagesResource.php | 12 +++--- .../Resources/PackingListBase2Resource.php | 43 +++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 app/Http/Resources/PackingListBase2Resource.php diff --git a/app/Http/Resources/OrderPackagesResource.php b/app/Http/Resources/OrderPackagesResource.php index fed8b326..2b414815 100644 --- a/app/Http/Resources/OrderPackagesResource.php +++ b/app/Http/Resources/OrderPackagesResource.php @@ -31,23 +31,23 @@ class OrderPackagesResource extends JsonResource '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' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()), // 'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()), 'parcels' => $this->whenLoaded('packingLists', function() { return [ - 'origin_warehouse_packages' => PackingListResource::collection( + 'origin_warehouse_packages' => PackingListBase2Resource::collection( $this->originWarehousePackages()->get() ), - 'in_transit_packages' => PackingListResource::collection( + 'in_transit_packages' => PackingListBase2Resource::collection( $this->inTransitPackages()->get() ), - 'destination_warehouse_packages' => PackingListResource::collection( + 'destination_warehouse_packages' => PackingListBase2Resource::collection( $this->destinationWarehousePackages()->get() ), - 'delivered_packages' => PackingListResource::collection( + 'delivered_packages' => PackingListBase2Resource::collection( $this->deliveredPackages()->get() ), - 'received_packages' => PackingListResource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()), + 'received_packages' => PackingListBase2Resource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()), ]; }), // 'invoices' => $this->whenLoaded('packingLists', function() use ($orderId) { diff --git a/app/Http/Resources/PackingListBase2Resource.php b/app/Http/Resources/PackingListBase2Resource.php new file mode 100644 index 00000000..ef7defd4 --- /dev/null +++ b/app/Http/Resources/PackingListBase2Resource.php @@ -0,0 +1,43 @@ +user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); + $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + + return [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $this->type, + 'receive_packing_list' => $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListResource(PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first())), + 'packages' => PackageResource::collection($packages), + $this->mergeWhen($this->owner instanceof Order, [ + 'order' => New OrderResource($this->owner) + ]), + //'shipping_transaction' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()), + //'suspended_invoice' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()), + // 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()), + ]; + } +} From 5d8d57e399fc2a3ce682d463b9008fd2ab7cd662 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 21 Sep 2024 13:15:05 +0800 Subject: [PATCH 23/28] Laravel Vapor - Code refactoring --- .../FetchOrderPackagesLogic.php | 4 +- .../Resources/OrderPackagesBaseResource.php | 99 +++++++++++++++++++ app/Http/Resources/OrderPackagesResource.php | 61 ------------ app/Http/Resources/PackageBaseResource.php | 12 ++- .../Resources/PackingListBase2Resource.php | 43 -------- .../Resources/PackingListBaseResource.php | 17 +++- 6 files changed, 123 insertions(+), 113 deletions(-) create mode 100644 app/Http/Resources/OrderPackagesBaseResource.php delete mode 100644 app/Http/Resources/OrderPackagesResource.php delete mode 100644 app/Http/Resources/PackingListBase2Resource.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php index 51221f5d..f53c4f74 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/FetchOrderPackagesLogic.php @@ -6,7 +6,7 @@ namespace App\Classes\Modules\Orders\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Orders\Services\FetchesOrder; use App\Classes\Modules\Orders\Standards\Rules\CanFetchOrder; -use App\Http\Resources\OrderPackagesResource; +use App\Http\Resources\OrderPackagesBaseResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -53,7 +53,7 @@ class FetchOrderPackagesLogic extends AbstractControllerLogic $query = $this->fetchesOrder->execute(['reference' => $request->route('id'), 'with_packing_lists' => true]); - return $this->resourceResponse(new OrderPackagesResource($query)); + return $this->resourceResponse(new OrderPackagesBaseResource($query)); } diff --git a/app/Http/Resources/OrderPackagesBaseResource.php b/app/Http/Resources/OrderPackagesBaseResource.php new file mode 100644 index 00000000..099901d4 --- /dev/null +++ b/app/Http/Resources/OrderPackagesBaseResource.php @@ -0,0 +1,99 @@ +id; + + $origin_warehouse_packages = $this->originWarehousePackages()->get(); + foreach ($origin_warehouse_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $in_transit_packages = $this->inTransitPackages()->get(); + foreach ($in_transit_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $destination_warehouse_packages = $this->destinationWarehousePackages()->get(); + foreach ($destination_warehouse_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $delivered_packages = $this->deliveredPackages()->get(); + foreach ($delivered_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + $received_packages = $this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get(); + foreach ($received_packages as $item) { + $item['include_shipping_transaction'] = false; + $item['include_suspended_invoice'] = false; + $item['include_packages'] = true; + $item['include_receive_packing_list'] = true; + $item['include_order_in_packages'] = true; + } + + + return [ + 'id' => $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()), + 'parcels' => $this->whenLoaded('packingLists', function() use ($origin_warehouse_packages, $in_transit_packages, $destination_warehouse_packages, $delivered_packages, $received_packages) { + return [ + 'origin_warehouse_packages' => PackingListBaseResource::collection($origin_warehouse_packages), + 'in_transit_packages' => PackingListBaseResource::collection($in_transit_packages), + 'destination_warehouse_packages' => PackingListBaseResource::collection($destination_warehouse_packages), + 'delivered_packages' => PackingListBaseResource::collection($delivered_packages), + 'received_packages' => PackingListBaseResource::collection($received_packages), + ]; + }), + // 'invoices' => $this->whenLoaded('packingLists', function() use ($orderId) { + // return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get()); + // }), + //'remarks' => RemarkResource::collection($this->remarks), + 'created_at' => $this->created_at->format('d-m-Y') + ]; + + } +} diff --git a/app/Http/Resources/OrderPackagesResource.php b/app/Http/Resources/OrderPackagesResource.php deleted file mode 100644 index 2b414815..00000000 --- a/app/Http/Resources/OrderPackagesResource.php +++ /dev/null @@ -1,61 +0,0 @@ -id; - - return [ - 'id' => $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()), - 'parcels' => $this->whenLoaded('packingLists', function() { - return [ - 'origin_warehouse_packages' => PackingListBase2Resource::collection( - $this->originWarehousePackages()->get() - ), - 'in_transit_packages' => PackingListBase2Resource::collection( - $this->inTransitPackages()->get() - ), - 'destination_warehouse_packages' => PackingListBase2Resource::collection( - $this->destinationWarehousePackages()->get() - ), - 'delivered_packages' => PackingListBase2Resource::collection( - $this->deliveredPackages()->get() - ), - 'received_packages' => PackingListBase2Resource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()), - ]; - }), - // 'invoices' => $this->whenLoaded('packingLists', function() use ($orderId) { - // return TransactionResource::collection($this->transactions()->whereNotIn('transactions.status', [0, 1])->where('transactions.type', TransactionType::SHIPPING_INVOICE)->get()); - // }), - //'remarks' => RemarkResource::collection($this->remarks), - 'created_at' => $this->created_at->format('d-m-Y') - ]; - - } -} diff --git a/app/Http/Resources/PackageBaseResource.php b/app/Http/Resources/PackageBaseResource.php index 19e4a159..5b1d14ff 100644 --- a/app/Http/Resources/PackageBaseResource.php +++ b/app/Http/Resources/PackageBaseResource.php @@ -16,7 +16,7 @@ class PackageBaseResource extends JsonResource */ public function toArray($request) { - return [ + $data = [ 'id' => $this->id, 'type' => $this->type, 'description' => $this->description, @@ -28,11 +28,15 @@ class PackageBaseResource extends JsonResource 'cbm' => (($this->width / 100) * ($this->height / 100) * ($this->length / 100)) * $this->quantity, 'reference' => $this->packingList->reference, 'status' => $this->status, - // $this->mergeWhen($originalPackingList->owner instanceof Order, [ - // 'order' => New OrderResource($originalPackingList->owner) - // ]), // 'container' => new ContainerResource($originalPackingList->containers()->first()), // 'transport' => new TransportResource($originalPackingList->transports()->first()) ]; + + if($this->include_order) { + $originalPackingList = $this->packingList->owner instanceof PackingList ? $this->packingList->owner : $this->packingList; + $data['order'] = new OrderResource($originalPackingList->owner); + } + + return $data; } } diff --git a/app/Http/Resources/PackingListBase2Resource.php b/app/Http/Resources/PackingListBase2Resource.php deleted file mode 100644 index ef7defd4..00000000 --- a/app/Http/Resources/PackingListBase2Resource.php +++ /dev/null @@ -1,43 +0,0 @@ -user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]); - $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; - - return [ - 'id' => $this->id, - 'claimant_id' => $this->claimant_id, - 'reference' => $this->reference, - 'status' => $this->status, - 'transport' => new TransportResource($this->transports()->first()), - 'type' => $this->type, - 'receive_packing_list' => $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListResource(PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first())), - 'packages' => PackageResource::collection($packages), - $this->mergeWhen($this->owner instanceof Order, [ - 'order' => New OrderResource($this->owner) - ]), - //'shipping_transaction' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()), - //'suspended_invoice' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()), - // 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()), - ]; - } -} diff --git a/app/Http/Resources/PackingListBaseResource.php b/app/Http/Resources/PackingListBaseResource.php index 862bff62..f41905fe 100644 --- a/app/Http/Resources/PackingListBaseResource.php +++ b/app/Http/Resources/PackingListBaseResource.php @@ -25,12 +25,15 @@ class PackingListBaseResource extends JsonResource $receive_packing_list = null; if($this->include_packages){ $packages = !$this->packingLists()->exists() || $exceptionUsers ? $this->packages : $this->packingLists->first()->packages; + foreach ($packages as $item) { + $item['include_order'] = $this->include_order_in_packages; + } } if($this->include_receive_packing_list){ $receive_packing_list = $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListResource(PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first())); } - return [ + $data = [ 'id' => $this->id, 'claimant_id' => $this->claimant_id, 'reference' => $this->reference, @@ -43,9 +46,17 @@ class PackingListBaseResource extends JsonResource $this->mergeWhen($this->owner instanceof Order, [ 'order' => New OrderResource($this->owner) ]), - 'shipping_transaction' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()), - 'suspended_invoice' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()), // 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()), ]; + + if($this->include_shipping_transaction){ + $data['shipping_transaction'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()); + } + if($this->include_suspended_invoice){ + $data['suspended_invoice'] = new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()); + } + + return $data; + } } From d4f02cdafe6cd13b7b9d3f0605dd91f76c988df6 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 21 Sep 2024 22:20:03 +0800 Subject: [PATCH 24/28] Laravel Vapor - Code refactoring --- .../ListPackingListsLogic.php | 27 +++++++++++++------ .../AdminPaymentsBillingSectionComponent.vue | 8 +++--- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php index aa35da9e..a3af079e 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php @@ -68,21 +68,32 @@ class ListPackingListsLogic extends AbstractControllerLogic } else{ $filters = json_decode($request->input('filters'), true); - if(isset($filters['include_packages'])){ - //'include_packages' filter is an attempt to reduce the request-response time to only load basic information unless explicitly indicated to be included - foreach ($query->items() as $item) { + $useNew = false; + foreach ($query->items() as $item) { + if(isset($filters['include_packages'])){ + //'include_packages' filter is an attempt to reduce the request-response time to only load basic information unless explicitly indicated to be included $item['include_packages'] = $filters['include_packages']; + $useNew = true; } - } - if(isset($filters['include_receive_packing_list'])){ - //'include_receive_packing_list' filter is an attempt to reduce the request-response time to only load basic information unless explicitly indicated to be included - foreach ($query->items() as $item) { + if(isset($filters['include_receive_packing_list'])){ + //'include_receive_packing_list' filter is an attempt to reduce the request-response time to only load basic information unless explicitly indicated to be included $item['include_receive_packing_list'] = $filters['include_receive_packing_list']; + $useNew = true; } + + if(isset($filters['include_shipping_transaction'])){ + $item['include_shipping_transaction'] = $filters['include_shipping_transaction']; + $useNew = true; + } + + if(isset($filters['include_suspended_invoice'])){ + $item['include_suspended_invoice'] = $filters['include_suspended_invoice']; + $useNew = true; + } } - if(isset($filters['include_packages']) || isset($filters['include_receive_packing_list']) ){ + if($useNew){ return $this->collectionResponse(PackingListBaseResource::collection($query)); } diff --git a/resources/assets/vue/components/paymentsBilling/sections/AdminPaymentsBillingSectionComponent.vue b/resources/assets/vue/components/paymentsBilling/sections/AdminPaymentsBillingSectionComponent.vue index a4e2ec89..0cbc46e3 100644 --- a/resources/assets/vue/components/paymentsBilling/sections/AdminPaymentsBillingSectionComponent.vue +++ b/resources/assets/vue/components/paymentsBilling/sections/AdminPaymentsBillingSectionComponent.vue @@ -102,23 +102,23 @@
- +
- +
- +
- +
From f293a975ed944f50475b78e2b3b9e476ba3e5d77 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 21 Sep 2024 23:02:24 +0800 Subject: [PATCH 25/28] Laravel Vapor - look into price increase for storage invoice --- .../CheckStorageInvoiceTransactionProcessor.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php index b31505a5..6a77ff17 100644 --- a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php @@ -181,6 +181,17 @@ class CheckStorageInvoiceTransactionProcessor $dt1 = $eta->copy()->addDay()->startOfDay(); $dt2 = Carbon::now()->copy()->addDay()->startOfDay(); $interval = Carbon::parse($dt2)->diff($dt1); + + $targetDate = '2024-09-14'; + $nowMalaysia = Carbon::now('Asia/Kuala_Lumpur'); + $targetDateMalaysia = Carbon::createFromFormat('Y-m-d', $targetDate, 'Asia/Kuala_Lumpur'); + LogHelper::channel('storage_invoices')->info('targetDate: '.json_encode($targetDate)); + LogHelper::channel('storage_invoices')->info('nowMalaysia: '.json_encode($nowMalaysia)); + LogHelper::channel('storage_invoices')->info('targetDateMalaysia: '.json_encode($targetDateMalaysia)); + if ($nowMalaysia->greaterThan($targetDateMalaysia)) { + LogHelper::channel('storage_invoices')->info('greaterThan: true'); + } + LogHelper::channel('storage_invoices')->info('eta: '.json_encode($eta)); LogHelper::channel('storage_invoices')->info('dt1: '.json_encode($dt1)); LogHelper::channel('storage_invoices')->info('dt2: '.json_encode($dt2)); From ee3de039fbb7668d29ccc1cd935a1224611d256a Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 21 Sep 2024 23:28:42 +0800 Subject: [PATCH 26/28] Laravel Vapor - look into price increase for storage invoice --- .../CheckStorageInvoiceTransactionProcessor.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php index 6a77ff17..047d4bfb 100644 --- a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php @@ -182,14 +182,17 @@ class CheckStorageInvoiceTransactionProcessor $dt2 = Carbon::now()->copy()->addDay()->startOfDay(); $interval = Carbon::parse($dt2)->diff($dt1); - $targetDate = '2024-09-14'; + + $targetDate = Carbon::create(2024, 9, 22, 0, 0, 0, 'Asia/Kuala_Lumpur'); $nowMalaysia = Carbon::now('Asia/Kuala_Lumpur'); - $targetDateMalaysia = Carbon::createFromFormat('Y-m-d', $targetDate, 'Asia/Kuala_Lumpur'); - LogHelper::channel('storage_invoices')->info('targetDate: '.json_encode($targetDate)); - LogHelper::channel('storage_invoices')->info('nowMalaysia: '.json_encode($nowMalaysia)); - LogHelper::channel('storage_invoices')->info('targetDateMalaysia: '.json_encode($targetDateMalaysia)); - if ($nowMalaysia->greaterThan($targetDateMalaysia)) { - LogHelper::channel('storage_invoices')->info('greaterThan: true'); + LogHelper::channel('storage_invoices')->info('LogHelper.info: targetDateMalaysia: ' . $targetDate->toIso8601String()); + LogHelper::channel('storage_invoices')->info('LogHelper.info: nowMalaysia: ' . $nowMalaysia->toIso8601String()); + + if ($nowMalaysia->greaterThanOrEqualTo($targetDate)) { + LogHelper::channel('storage_invoices')->info('true'); + } + else{ + LogHelper::channel('storage_invoices')->info('true'); } LogHelper::channel('storage_invoices')->info('eta: '.json_encode($eta)); From 34b692fb4dc24758757905933f549b489b878675 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sat, 21 Sep 2024 23:48:50 +0800 Subject: [PATCH 27/28] Laravel Vapor - look into price increase for storage invoice --- ...heckStorageInvoiceTransactionProcessor.php | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php index 047d4bfb..cbec45c0 100644 --- a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php @@ -66,6 +66,8 @@ class CheckStorageInvoiceTransactionProcessor /** @var DeletesBillplzBill */ private $deletesBillplzBill; + private $defaultPricePerCBM = 3; + /** * @param FetchesOrder $fetchesOrder * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber @@ -90,6 +92,20 @@ class CheckStorageInvoiceTransactionProcessor $this->updatesTransactionStatus = $updatesTransactionStatus; $this->deletesGroup = $deletesGroup; $this->deletesBillplzBill = $deletesBillplzBill; + + $targetDate = Carbon::create(2024, 9, 22, 0, 0, 0, 'Asia/Kuala_Lumpur'); + $nowMalaysia = Carbon::now('Asia/Kuala_Lumpur'); + LogHelper::channel('storage_invoices')->info('targetDateMalaysia: ' . $targetDate->toIso8601String()); + LogHelper::channel('storage_invoices')->info('nowMalaysia: ' . $nowMalaysia->toIso8601String()); + + if ($nowMalaysia->greaterThanOrEqualTo($targetDate)) { + LogHelper::channel('storage_invoices')->info('true'); + $this->defaultPricePerCBM = 6; + } + else{ + LogHelper::channel('storage_invoices')->info('false'); + $this->defaultPricePerCBM = 6; + } } /** @@ -176,25 +192,12 @@ class CheckStorageInvoiceTransactionProcessor } private function processSingleTransactionOfTypeShippingInvoice($transaction, $destinationWarehousePackage, $company_module_id, $eta){ - $pricePerCBM = 3; + $pricePerCBM = $this->defaultPricePerCBM; $resultNumberOfDaysFree = 10; $dt1 = $eta->copy()->addDay()->startOfDay(); $dt2 = Carbon::now()->copy()->addDay()->startOfDay(); $interval = Carbon::parse($dt2)->diff($dt1); - - $targetDate = Carbon::create(2024, 9, 22, 0, 0, 0, 'Asia/Kuala_Lumpur'); - $nowMalaysia = Carbon::now('Asia/Kuala_Lumpur'); - LogHelper::channel('storage_invoices')->info('LogHelper.info: targetDateMalaysia: ' . $targetDate->toIso8601String()); - LogHelper::channel('storage_invoices')->info('LogHelper.info: nowMalaysia: ' . $nowMalaysia->toIso8601String()); - - if ($nowMalaysia->greaterThanOrEqualTo($targetDate)) { - LogHelper::channel('storage_invoices')->info('true'); - } - else{ - LogHelper::channel('storage_invoices')->info('true'); - } - LogHelper::channel('storage_invoices')->info('eta: '.json_encode($eta)); LogHelper::channel('storage_invoices')->info('dt1: '.json_encode($dt1)); LogHelper::channel('storage_invoices')->info('dt2: '.json_encode($dt2)); @@ -310,7 +313,7 @@ class CheckStorageInvoiceTransactionProcessor } private function isPaidOrWaivedStorageInvoiceExist($transaction, $packingList, $eta){ - $pricePerCBM = 3; + $pricePerCBM = $this->defaultPricePerCBM; $resultNumberOfDaysFree = 10; $dt1 = $eta->copy()->addDay()->startOfDay(); $resultStartDate = $dt1->format('Y-m-d'); From 5790f5a7a3d564f83b0ccd1051c5a8c1fb509636 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Sun, 22 Sep 2024 01:28:04 +0800 Subject: [PATCH 28/28] Laravel Vapor - look into price increase for storage invoice --- ...heckStorageInvoiceTransactionProcessor.php | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php index cbec45c0..ea0708e6 100644 --- a/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CheckStorageInvoiceTransactionProcessor.php @@ -239,6 +239,8 @@ class CheckStorageInvoiceTransactionProcessor $this->createStorageInvoiceTransactionDetails($storageInvoice, $destinationWarehousePackage, $cbm, $pricePerCBM, $resultNumberOfDaysExceeded, $taxPercentage); } else if($storageInvoice){ + $amount = $storageInvoice->amount; + //Additional handling for giving selected storage invoice a waiver if(isset($storageInvoice->is_waived) && $storageInvoice->is_waived){ $pricePerCBM = 0; @@ -253,6 +255,15 @@ class CheckStorageInvoiceTransactionProcessor $intervalRecalculate = Carbon::parse($dateStorageInvoicePaid)->diff($dt1); $resultNumberOfDaysExceeded = $intervalRecalculate->days - $resultNumberOfDaysFree; $price_cbm = $pricePerCBM * $cbm * $resultNumberOfDaysExceeded; + + try{ + $auditPricePerCbm = floor($amount / ($cbm * $resultNumberOfDaysExceeded)); + LogHelper::channel('storage_invoices')->info('auditPricePerCbm: '.$auditPricePerCbm); + $pricePerCBM = $auditPricePerCbm; + } + catch(\Exception $ex){ + LogHelper::channel('storage_invoices')->info('auditPricePerCbm: '.$ex); + } } if (Carbon::now()->isAfter($dateToCompare)) { @@ -261,7 +272,6 @@ class CheckStorageInvoiceTransactionProcessor $price_cbm = $price_cbm + $total_tax; } - $amount = $storageInvoice->amount; $epsilon = 0.0001; // Tolerance for the comparison LogHelper::channel('storage_invoices')->info('Update $transaction->id: '.$transaction->id); LogHelper::channel('storage_invoices')->info('$storageInvoice->status: '.$storageInvoice->status); @@ -334,10 +344,6 @@ class CheckStorageInvoiceTransactionProcessor if($storageInvoice){ $storageInvoiceId = $storageInvoice->id; - if(isset($storageInvoice->is_waived) && $storageInvoice->is_waived){ - $pricePerCBM = 0; - } - $transactionDetailsItems = $transaction->transactionDetails()->get(); $cbm = 0.00; foreach ($transactionDetailsItems as $tdItem){ @@ -348,6 +354,20 @@ class CheckStorageInvoiceTransactionProcessor $cbm = $cbm + $quantity; } + if(isset($storageInvoice->is_waived) && $storageInvoice->is_waived){ + $pricePerCBM = 0; + } + else{ + try{ + $auditPricePerCbm = floor($storageInvoice->amount / ($cbm * $resultNumberOfDaysExceeded)); + LogHelper::channel('storage_invoices')->info('auditPricePerCbm: '.$auditPricePerCbm); + $pricePerCBM = $auditPricePerCbm; + } + catch(\Exception $ex){ + LogHelper::channel('storage_invoices')->info('auditPricePerCbm: '.$ex); + } + } + if($storageInvoiceId !== 0){ $result = [ 'parentInvoiceId' => $transaction->id,