From 2bbe7e4eab8e9e2e5134653e6294ba3b7fae6d75 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Wed, 25 Dec 2024 20:59:49 +0800 Subject: [PATCH] Admin Workflow - Update business logic to fetch 1688 data for processing --- .../DownloadMockUpWhiteFormPdfLogic.php | 4 +- .../AdminWorkflowBaseController.php | 61 +++++++++++++++++++ .../forms/AdminWorkFlowFormComponent.vue | 20 +++++- routes/admin_workflow.php | 55 ++++++----------- 4 files changed, 98 insertions(+), 42 deletions(-) create mode 100644 app/Http/Controllers/AdminWorkflow/AdminWorkflowBaseController.php diff --git a/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php index 4d80785f..7c68536d 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/DownloadMockUpWhiteFormPdfLogic.php @@ -48,7 +48,7 @@ class DownloadMockUpWhiteFormPdfLogic return ['id' => $value]; }, json_decode($request->input('payments'))); - DB::beginTransaction(); + DB::beginTransaction(); //cief todo: 74 $this->createSupplierTransactionProcessor->execute($supplier, $rate, $payments); @@ -56,7 +56,7 @@ class DownloadMockUpWhiteFormPdfLogic $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $this->createSupplierTransactionProcessor->getBills(), 'transferFeeTransactions' => $this->createSupplierTransactionProcessor->getTransferTransactions(), 'supplier' => $supplier]); - DB::rollBack(); + DB::rollBack(); //cief todo: 74 $exportFileName = 'MockUpWhiteForm.pdf'; $filesystemDriver = Storage::getDefaultDriver(); diff --git a/app/Http/Controllers/AdminWorkflow/AdminWorkflowBaseController.php b/app/Http/Controllers/AdminWorkflow/AdminWorkflowBaseController.php new file mode 100644 index 00000000..55e16882 --- /dev/null +++ b/app/Http/Controllers/AdminWorkflow/AdminWorkflowBaseController.php @@ -0,0 +1,61 @@ +where(function ($query) { + $query->where('key', '1688_admin_workflow_processed') + ->orWhere(function ($query) { + $query->where('key', '1688_admin_workflow_processing') + ->where('updated_at', '>', Carbon::now()->subHour()); + }); + }) + ->pluck('owner_id') + ->filter(function ($value) { + return is_numeric($value); + }) + ->toArray(); + + + $timeAgo = Carbon::now()->subMonths(6); + $serviceId = 4; + $booking = Booking::where('service_id', $serviceId) + ->where('status', ApprovalStatus::APPROVED) + ->whereNotIn('id', $excludedBookingIds) + ->whereHas('bills', function ($query) { + $query->whereHas('groupTransaction', function ($query) { + $query->whereHas('group', function ($query) { + $query->whereDoesntHave('billGroup')->whereIn('issuer', [2]); + }); + }); + }) + ->where('created_at', '>=', $timeAgo) + ->latest() + ->first(); + + if(!$booking){ + return responseJson(null, 'No booking found', 404); + } + + markedProcessing($booking, '1688_admin_workflow_processing'); + + return responseJson([ + 'passwords' => $booking->bank->holder_name ?? null, + 'account_no' => $booking->bank->account_no ?? null, + 'pin' => $booking->bank->bank_branch ?? null, + 'holder_name' => $booking->bank->holder_name ?? null, + 'booking' => $booking + ]); + } +} diff --git a/resources/assets/vue/components/general/forms/AdminWorkFlowFormComponent.vue b/resources/assets/vue/components/general/forms/AdminWorkFlowFormComponent.vue index 941a61e8..96fc0717 100644 --- a/resources/assets/vue/components/general/forms/AdminWorkFlowFormComponent.vue +++ b/resources/assets/vue/components/general/forms/AdminWorkFlowFormComponent.vue @@ -73,7 +73,23 @@ {{ externalApiResponse.data.booking.marking }} -
+
+
+

+ Reference: {{ externalApiResponse.data.reference }} +

+

+ Marking: {{ externalApiResponse.data.marking }} +

+

+ Currency Rate: {{ externalApiResponse.data.currency_rate }} +

+

+ Total Amount: {{ externalApiResponse.data.total_amount }} +

+
+
+
diff --git a/routes/admin_workflow.php b/routes/admin_workflow.php index e2cadb45..8c2f535d 100644 --- a/routes/admin_workflow.php +++ b/routes/admin_workflow.php @@ -5,10 +5,12 @@ use App\Classes\Modules\Accounts\Services\CreatesKeyValuePair; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\TransactionType; use App\Classes\ValueObjects\Constants\BookingAttributeNames; +use App\Http\Controllers\AdminWorkflow\AdminWorkflowBaseController; use App\Http\Resources\BookingResource; use App\Models\Booking; use App\Models\KeyValuePair; use Carbon\Carbon; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Route; // Generalized JSON response function @@ -27,53 +29,25 @@ if (!function_exists('responseJson')) { } if (!function_exists('markedProcessing')) { - function markedProcessing($booking, $key){ - $kvp = $booking->attributesKVP()->where('key', $key)->first(); + function markedProcessing($model, $key){ + $kvp = $model->attributesKVP()->where('key', $key)->first(); + + if($kvp){ + $kvp->delete(); + $kvp = null; + } if(!$kvp){ $keyValuePairObject = new KeyValuePairObject($key, true); - (App()->make(CreatesKeyValuePair::class))->execute($booking, $keyValuePairObject); + (App()->make(CreatesKeyValuePair::class))->execute($model, $keyValuePairObject); } } } -Route::group(['prefix' => 'admin-work-flow', 'as' => 'admin_work_flow.', 'namespace' => 'AdminWorkFlow'], function () { + Route::group(['prefix' => 'admin-work-flow', 'as' => 'admin_work_flow.', 'namespace' => 'AdminWorkFlow'], function () { - Route::get('/fetch-oldest-order', function () { - $excludedBookingIds = KeyValuePair::where('owner_type', 'App\Models\Booking') - ->where(function ($query) { - $query->where('key', '1688_admin_workflow_processed') - ->orWhere(function ($query) { - $query->where('key', '1688_admin_workflow_processing') - ->where('updated_at', '>', Carbon::now()->subHour()); - }); - }) - ->pluck('owner_id') - ->filter(function ($value) { - return is_numeric($value); - }) - ->toArray(); - - $booking = Booking::where('service_id', 4) - ->where('status', ApprovalStatus::APPROVED) - ->whereNotIn('id', $excludedBookingIds) - ->first(); - - if(!$booking){ - return responseJson(null, 'No booking found', 404); - } - - markedProcessing($booking, '1688_admin_workflow_processing'); - - return responseJson([ - 'passwords' => $booking->bank->holder_name ?? null, - 'account_no' => $booking->bank->account_no ?? null, - 'pin' => $booking->bank->bank_branch ?? null, - 'holder_name' => $booking->bank->holder_name ?? null, - 'booking' => $booking - ]); - })->name('fetch_oldest_order'); + Route::get('/fetch-oldest-order', [AdminWorkflowBaseController::class, 'fetchOldestOrder'])->name('fetch_oldest_order'); Route::get('/fetch-pending-approved-po', function () { @@ -162,9 +136,14 @@ Route::group(['prefix' => 'admin-work-flow', 'as' => 'admin_work_flow.', 'namesp ->get(['id', 'value']) ->map(fn ($attr) => $attr->only(['id', 'value'])); + $transaction = $booking->bills()->first(); //cief todo: 74 - more than 1 record? return responseJson([ 'booking' => $booking, 'booking_attributes' => $attributes, + 'reference' =>$transaction->owner->owner->marking, + 'marking' => $transaction->owner->owner->company->reference, + 'currency_rate' => $transaction->currency_rate, + 'total_amount' =>$transaction->currency->short_code . ' ' . number_format((float)$transaction->amount, 2, '.', '') ]); })->name('fetch_model_attributes');