From 6a4e2926b913dcb3744690c7ff47e1b2e1f1fb66 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 23 Oct 2021 13:55:38 +0800 Subject: [PATCH 01/61] wip --- resources/views/pages/settings.blade.php | 70 +++++++++++++++++++++++ resources/views/partials/header.blade.php | 9 +++ resources/views/partials/menu.blade.php | 8 +++ routes/web.php | 4 ++ 4 files changed, 91 insertions(+) create mode 100644 resources/views/pages/settings.blade.php diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php new file mode 100644 index 00000000..be7dc92b --- /dev/null +++ b/resources/views/pages/settings.blade.php @@ -0,0 +1,70 @@ +@extends('layouts.base_portal') +@section('inner_content') +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
User Profile
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
Complete
+
+
+
+
+
+
+
+
+
+
+
+
+

active

+
+
+
+
+

complete

+
+
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/header.blade.php index d3a15ad2..685d3f27 100644 --- a/resources/views/partials/header.blade.php +++ b/resources/views/partials/header.blade.php @@ -17,6 +17,15 @@ +
+ +
+
+ +
+
+
+
diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index c32eb3df..cf62bda3 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -129,6 +129,14 @@
Shipping Queue
+
+
+ +
+
+
Settings
+
+
diff --git a/routes/web.php b/routes/web.php index 6c3097e4..b3858c11 100644 --- a/routes/web.php +++ b/routes/web.php @@ -150,3 +150,7 @@ Route::get('/debug', function (){ dd($issues); }); + +Route::get('/settings', function () { + return view('pages.settings'); +})->name('settings'); \ No newline at end of file From ab84ca4719cad0a5a894b934caf0e389e75836a7 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 26 Oct 2021 11:46:49 +0800 Subject: [PATCH 02/61] move settings ui from exchange --- .../elements/UserProfileComponent.vue | 67 ++++ .../forms/AnnouncementFormComponent.vue | 128 ++++++++ .../forms/DeleteAnnouncementFormComponent.vue | 33 ++ .../settings/forms/EditEmailFormComponent.vue | 58 ++++ .../EditUserProfileFullnameFormComponent.vue | 51 +++ .../forms/ResetUserPasswordFormComponent.vue | 44 +++ .../forms/SegmentServiceFormComponent.vue | 293 ++++++++++++++++++ .../settings/forms/ServiceFormComponent.vue | 212 +++++++++++++ .../UpdateServiceStatusFormComponent.vue | 33 ++ .../user/elements/UserComponent.vue | 61 ++++ .../user/form/DeleteUserFormComponent.vue | 33 ++ .../user/form/UserFormComponent.vue | 117 +++++++ resources/views/pages/settings.blade.php | 288 ++++++++++++++--- 13 files changed, 1374 insertions(+), 44 deletions(-) create mode 100644 resources/assets/vue/components/settings/elements/UserProfileComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/ServiceFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue create mode 100644 resources/assets/vue/components/user/elements/UserComponent.vue create mode 100644 resources/assets/vue/components/user/form/DeleteUserFormComponent.vue create mode 100644 resources/assets/vue/components/user/form/UserFormComponent.vue diff --git a/resources/assets/vue/components/settings/elements/UserProfileComponent.vue b/resources/assets/vue/components/settings/elements/UserProfileComponent.vue new file mode 100644 index 00000000..fd42e9b9 --- /dev/null +++ b/resources/assets/vue/components/settings/elements/UserProfileComponent.vue @@ -0,0 +1,67 @@ + + + diff --git a/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue b/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue new file mode 100644 index 00000000..a29f7572 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue @@ -0,0 +1,128 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue b/resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue new file mode 100644 index 00000000..5c59b264 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue @@ -0,0 +1,33 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue new file mode 100644 index 00000000..ca60b203 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue @@ -0,0 +1,58 @@ + + diff --git a/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue new file mode 100644 index 00000000..315600ff --- /dev/null +++ b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue @@ -0,0 +1,51 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue b/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue new file mode 100644 index 00000000..ca22298d --- /dev/null +++ b/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue @@ -0,0 +1,44 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue b/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue new file mode 100644 index 00000000..5405ae6e --- /dev/null +++ b/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue @@ -0,0 +1,293 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue new file mode 100644 index 00000000..002488cc --- /dev/null +++ b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue @@ -0,0 +1,212 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue b/resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue new file mode 100644 index 00000000..aef5b89f --- /dev/null +++ b/resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue @@ -0,0 +1,33 @@ + + \ 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 new file mode 100644 index 00000000..20b57e6f --- /dev/null +++ b/resources/assets/vue/components/user/elements/UserComponent.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/user/form/DeleteUserFormComponent.vue b/resources/assets/vue/components/user/form/DeleteUserFormComponent.vue new file mode 100644 index 00000000..cb8af386 --- /dev/null +++ b/resources/assets/vue/components/user/form/DeleteUserFormComponent.vue @@ -0,0 +1,33 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/user/form/UserFormComponent.vue b/resources/assets/vue/components/user/form/UserFormComponent.vue new file mode 100644 index 00000000..5d283733 --- /dev/null +++ b/resources/assets/vue/components/user/form/UserFormComponent.vue @@ -0,0 +1,117 @@ + + \ No newline at end of file diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index be7dc92b..0d5665cb 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -2,69 +2,269 @@ @section('inner_content')
-
-
-
-
-
+ +
+
+
-
-
-
-
- +
+
+
+
+
+
+
+
+ +
+
+
User Profile
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ Account Settings +
-
User Profile
+
+
+ +
+
-
-
-
-
-
-
-
-
- +
-
-
-
-
-

active

-
-
-
-
-

complete

-
-
-
-
-
-
+
@endsection \ No newline at end of file From 149029bc24d99df17be753e1bc6a2ba1d9c24eeb Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 26 Oct 2021 18:46:43 +0800 Subject: [PATCH 03/61] change settings page input label design --- .../settings/forms/EditUserProfileFullnameFormComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue index 315600ff..de490b7e 100644 --- a/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue @@ -10,8 +10,8 @@
-
Full Name
+
From 558868d85967b3299b441a42471c93654ced52bd Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 6 Nov 2021 20:43:39 +0800 Subject: [PATCH 04/61] update setting edit full name --- .../settings/forms/EditUserProfileFullnameFormComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue index de490b7e..95e79174 100644 --- a/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue @@ -41,7 +41,7 @@ return { error: '', parameters: { - name: '' + name: this.data.name, } } }, From 86401cdad6010061b11be4c716191b1dd3a2485e Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sat, 27 Nov 2021 22:34:56 +0800 Subject: [PATCH 05/61] hide all setting until the set up is complete update user reset password --- .../forms/ResetUserPasswordFormComponent.vue | 4 +- resources/views/pages/settings.blade.php | 440 +++++++++--------- 2 files changed, 220 insertions(+), 224 deletions(-) diff --git a/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue b/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue index ca22298d..1a735522 100644 --- a/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue @@ -19,7 +19,7 @@
Cancel
-
Confirm
+
Confirm
@@ -34,7 +34,7 @@ return { error: '', parameters: { - email: '' + email: this.$store.getters.getUserEmail, } } }, diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index 0d5665cb..3cb44b17 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -2,126 +2,25 @@ @section('inner_content')
- -
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
User Profile
-
-
-
-
-
-
-
-
- -
-
-
-
-
+
+
+
+
+
-
-
-
- Account Settings -
-
-
-
-
-
- +
+
+
+ +
+
+
User Profile
@@ -131,140 +30,237 @@
- +
+
+
+
+
+
+
+
+
+ Account Settings +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
@endsection \ No newline at end of file From a56b5c64ba92684aedf31f4ea813510b5df9bf67 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sun, 28 Nov 2021 14:51:06 +0800 Subject: [PATCH 06/61] update admin setting - change email address --- .../ControllersLogic/AddNewMemberLogic.php | 78 +++++++++++++++++++ .../Companies/AddNewMemberController.php | 22 ++++++ .../settings/forms/EditEmailFormComponent.vue | 2 +- routes/company.php | 2 + 4 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php create mode 100644 app/Http/Controllers/Companies/AddNewMemberController.php diff --git a/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php new file mode 100644 index 00000000..19dc5b59 --- /dev/null +++ b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php @@ -0,0 +1,78 @@ + 'Updated Email', + 'message' => 'Successfully updated email' + ]; + } + + /** + * @var AssignEmployeeProcessor + */ + private $assignEmployeeProcessor; + + /** + * @var GenerateEmailVerificationAttemptProcessor + */ + private $generateEmailVerificationAttemptProcessor; + + /** + * AddNewMemberLogic constructor. + * @param AssignEmployeeProcessor $assignEmployeeProcessor + * @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor + */ + public function __construct(AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor) + { + $this->assignEmployeeProcessor = $assignEmployeeProcessor; + $this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ResourceConflictException + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request): JsonResponse + { + try { + $user = Auth::user()->replicate(); + $user->email = $request->input('email'); + $user->status = ApprovalStatus::PENDING_VERIFICATION; + $user->save(); + } catch (QueryException $exception){ + throw new ResourceConflictException('Unable to change your email address as it already exists'); + } + + if($company = Auth::user()->companyModule()->first()){ + $Object = new EmploymentObject($company, $user); + $this->assignEmployeeProcessor->execute($Object); + } + + $this->generateEmailVerificationAttemptProcessor->execute($user); + + return $this->resourceResponse(new UserResource($user)); + } +} diff --git a/app/Http/Controllers/Companies/AddNewMemberController.php b/app/Http/Controllers/Companies/AddNewMemberController.php new file mode 100644 index 00000000..6307ac37 --- /dev/null +++ b/app/Http/Controllers/Companies/AddNewMemberController.php @@ -0,0 +1,22 @@ +execute($request); + } +} diff --git a/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue index ca60b203..d44cd44f 100644 --- a/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue @@ -43,7 +43,7 @@ return { error: '', parameters: { - email: '' + email: this.data.email, } } }, diff --git a/routes/company.php b/routes/company.php index e964d741..46a43be7 100644 --- a/routes/company.php +++ b/routes/company.php @@ -9,6 +9,8 @@ Route::group(['prefix' => 'company', 'as' => 'company.', 'namespace' => 'Compani Route::put('/update/{id}', 'UpdateCompanyController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteCompanyController@destroy')->name('delete'); + Route::post('/team/create', 'AddNewMemberController@create')->name('team.create'); + Route::group(['prefix' => '{id}/segment', 'as' => 'segment.'], function () { Route::post('/assign', 'AssignCompanyToSegmentController@assign')->name('assign'); Route::delete('/detach/{segment_id}', 'RemoveCompanyFromSegmentController@detach')->name('detach'); From 2c39c66a2d11d1801c9365b1ee1eacc920e7e152 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 30 Nov 2021 17:23:14 +0800 Subject: [PATCH 07/61] update setting page enable team settings --- resources/views/pages/settings.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index 3cb44b17..0ba32f33 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -30,7 +30,7 @@
@@ -165,7 +188,7 @@
- - +
diff --git a/routes/announcement.php b/routes/announcement.php new file mode 100644 index 00000000..b6016706 --- /dev/null +++ b/routes/announcement.php @@ -0,0 +1,15 @@ + 'announcement', 'as' => 'announcement.', 'namespace' => 'Announcements'], function () { + Route::get('/list', 'ListAnnouncementsController@list')->name('list'); + Route::post('/create', 'CreateAnnouncementController@create')->name('create'); + Route::put('/update/{id}', 'UpdateAnnouncementController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteAnnouncementController@delete')->name('delete'); + + Route::group(['prefix' => '{id}/segment', 'as' => 'segment.'], function () { + Route::post('/assign', 'AssignAnnouncementToSegmentController@assign')->name('assign'); + Route::delete('/detach/{segment_id}', 'RemoveSegmentFromAnnouncementController@detach')->name('detach'); + }); +}); \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index b8c43155..3c2583ff 100644 --- a/routes/api.php +++ b/routes/api.php @@ -50,6 +50,10 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/schedule.php'; + require __DIR__ . '/segment.php'; + + require __DIR__ . '/announcement.php'; + Route::get('/report/customer/{marking}/{from?}/{to?}', 'Reports\MonthlyReportController@customerReport')->name('report.customer'); Route::get('/report/sales/{from?}/{to?}', 'Reports\MonthlyReportController@salesReport')->name('report.sales'); Route::get('/report/profit/{model}/{value}/{from?}/{to?}', 'Reports\MonthlyReportController@profitModelReport')->name('report.profit'); diff --git a/routes/segment.php b/routes/segment.php new file mode 100644 index 00000000..b248ea1f --- /dev/null +++ b/routes/segment.php @@ -0,0 +1,17 @@ + 'segment', 'as' => 'segment.', 'namespace' => 'Segments'], function () { + Route::get('/{id}/show', 'FetchSegmentController@fetch')->name('show'); + Route::post('/create', 'CreateSegmentController@create')->name('create'); + Route::put('/update/{id}', 'UpdateSegmentController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteSegmentController@delete')->name('delete'); + Route::get('/list', 'ListSegmentsController@list')->name('list'); + + Route::group(['prefix' => '{id}/constant', 'as' => 'constant.'], function () { + Route::put('/service/update', 'UpdateCustomServiceConstantController@update')->name('service.update'); + Route::put('/update', 'UpdateConstantController@update')->name('update'); + Route::get('/show/{reference}', 'FetchConstantController@fetch')->name('show'); + }); +}); \ No newline at end of file From 012904c522c661844e74dc9ac584614085b8d642 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 4 Jan 2022 20:26:27 +0800 Subject: [PATCH 09/61] yd sync update order address --- .../ApproveChangeOrderAddressProcessor.php | 14 ++- .../UpdateDoFromYDPortalProcessor.php | 85 +++++++++++++++++++ .../UpdatePackingListStatusLogic.php | 16 +++- 3 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php diff --git a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php index c7d17487..b53b6643 100644 --- a/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php @@ -6,7 +6,9 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress; use App\Classes\Modules\Orders\Standards\Rules\CanApproveChangeOrderAddress; use App\Classes\Modules\Orders\Services\UpdatesOrdersAddress; use App\Classes\ValueObjects\Constants\ApprovalStatus; +use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor; +use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor; use Illuminate\Http\Request; @@ -27,12 +29,13 @@ class ApproveChangeOrderAddressProcessor * @param FetchesAddress $fetchesAddress * @param UpdatesOrdersAddress $updatesOrdersAddress */ - public function __construct(CanApproveChangeOrderAddress $canApproveChangeOrderAddress, FetchesAddress $fetchesAddress, UpdatesOrdersAddress $updatesOrdersAddress, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor) + public function __construct(CanApproveChangeOrderAddress $canApproveChangeOrderAddress, FetchesAddress $fetchesAddress, UpdatesOrdersAddress $updatesOrdersAddress, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor) { $this->canApproveChangeOrderAddress = $canApproveChangeOrderAddress; $this->fetchesAddress = $fetchesAddress; $this->updatesOrdersAddress = $updatesOrdersAddress; $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; + $this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor; } @@ -55,7 +58,14 @@ class ApproveChangeOrderAddressProcessor if($status === ApprovalStatus::APPROVED){ $address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]); - $this->updateDoFromVTPortalProcessor->execute($address); + + $appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; + if ($appointee == 2 ) { + $this->updateDoFromYDPortalProcessor->execute($address); + } + elseif ($appointee == 2302 ) { + $this->updateDoFromVTPortalProcessor->execute($address); + } } $address = $this->updatesOrdersAddress->execute($address, $status); diff --git a/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php b/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php new file mode 100644 index 00000000..ca0ced31 --- /dev/null +++ b/app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php @@ -0,0 +1,85 @@ +fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal; + $this->fetchesAddress = $fetchesAddress; + } + + /** + * @param $address + * @return array + * @throws GuzzleException + * @throws InternalServerErrorException + */ + public function execute($address) { + try { + $order = $address->owner()->orderBy('id', 'desc')->first(); + $packing_list = $order->packingLists() + ->where('type', PackingListType::SHIPPING_PACKING_LIST) + ->where('status', '!=', ApprovalStatus::SUSPENDED) + ->orderBy('id', 'desc')->get(); + + foreach ($packing_list as $key => $row) { + $contact = $address->contacts()->first(); + $remark = $address->remarks()->first(); + + $remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.'; + $phone = $contact ? $contact->phone : null; + $reference = $contact ? $contact->reference : null; + + $yd_do_update = $this->fetchesDataFRomYDPortal->clientRequest( + 'http://www.yd-wl.com/api/UpdateOrderAddress.ashx', + 'POST', + [ + 'expressno' => $row->reference, + 'customers_name' => $reference, + 'cellphone' => $phone, + 'postcode' => $address->postcode, + 'streetAddress' => $address->street_one . ' ' . $address->street_two . ' '. $address->district->name.' '. $address->post_code.' '.$address->state->name.' '.$address->country->name + + ], ''); + $yd_do_update = $this->fetchesDataFRomYDPortal->getResponseBody($yd_do_update); + } + + } catch (\Exception $exception){ + throw new InternalServerErrorException('failed to approve address due to an error related to VT portal'); + } + } +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php index 9bf1735a..13141435 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php @@ -10,6 +10,7 @@ use App\Classes\Modules\PackingLists\Services\UpdatesPackingListStatus; use App\Classes\Modules\PackingLists\Standards\Rules\CanUpdatePackingList; use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor; +use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor; use App\Http\Resources\PackingListResource; use ErrorException; use Illuminate\Http\JsonResponse; @@ -38,16 +39,20 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic /** @var UpdateDoFromVTPortalProcessor */ private $updateDoFromVTPortalProcessor; + /** @var UpdateDoFromYDPortalProcessor */ + private $updateDoFromYDPortalProcessor; + /** * UpdatePackingListStatusLogic constructor. * @param FetchesPackingList $fetchesPackingList * @param UpdatesPackingListStatus $updatesPackingListStatus */ - public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor) + public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor) { $this->fetchesPackingList = $fetchesPackingList; $this->updatesPackingListStatus = $updatesPackingListStatus; $this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor; + $this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor; } /** @@ -64,7 +69,14 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic $packing_list = $this->updatesPackingListStatus->execute($packingList, $request->route('status')); $address = $packing_list->owner()->first()->addresses()->first(); - $this->updateDoFromVTPortalProcessor->execute($address); + $appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; + + if ($appointee == 2 ) { + $this->updateDoFromYDPortalProcessor->execute($address); + } + elseif ($appointee == 2302 ) { + $this->updateDoFromVTPortalProcessor->execute($address); + } return $this->resourceResponse(new PackingListResource($packing_list)); } From 9fe86c52bd460591b57bb6d348b0fbf066a6dba5 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 12 Jan 2022 22:26:28 +0800 Subject: [PATCH 10/61] update containers page add days ago --- app/Http/Resources/ScheduleResource.php | 5 +++++ .../containers/elements/ContainerComponent.vue | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/Http/Resources/ScheduleResource.php b/app/Http/Resources/ScheduleResource.php index 64532420..d22386b4 100644 --- a/app/Http/Resources/ScheduleResource.php +++ b/app/Http/Resources/ScheduleResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; +use Carbon\Carbon; class ScheduleResource extends JsonResource { @@ -18,6 +19,10 @@ class ScheduleResource extends JsonResource 'id' => $this->id, 'etd' => $this->etd ? $this->etd->format('d-m-Y') : 'n/a', 'eta' => $this->eta ? $this->eta->format('d-m-Y') : 'n/a', + 'billing_days_left' => [ + 'value' => (Carbon::parse($this->eta)->subDays(7)->gt(Carbon::now())) ? '+' : '-' , + 'duration' => Carbon::parse($this->eta)->subDays(7)->diffInDays(Carbon::now()), + ], 'status' => $this->status, ]; } diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index f894385c..07f43f1a 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -22,10 +22,18 @@

ETD

{{item.transport ? item.transport.current_schedule.etd : 'n/a'}}

-
+

ETA

{{item.transport ? item.transport.current_schedule.eta : 'n/a'}}

+
+

Days Ago

+

+ {{item.transport ? item.transport.current_schedule.billing_days_left.value : 'n/a'}} + {{item.transport ? item.transport.current_schedule.billing_days_left.duration: ''}} + {{item.transport ? 'days' : ''}} +

+

Packages

{{ item.packing_lists.reduce((total, obj) => total + obj.packages.reduce((total, obj) => obj.quantity + total, 0), 0) }}

From fdec05ca45d8ddd8a8e5ab2769466ec2dba9a301 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 12 Jan 2022 22:53:58 +0800 Subject: [PATCH 11/61] update text-color for days ago in container page --- .../vue/components/containers/elements/ContainerComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index 07f43f1a..fdcf4615 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -28,7 +28,7 @@

Days Ago

-

+

{{item.transport ? item.transport.current_schedule.billing_days_left.value : 'n/a'}} {{item.transport ? item.transport.current_schedule.billing_days_left.duration: ''}} {{item.transport ? 'days' : ''}} From 2558e8f4f29e742e48ac0b7d2b194ca9efe7cf5c Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 12 Jan 2022 23:11:42 +0800 Subject: [PATCH 12/61] Revert "update text-color for days ago in container page" This reverts commit fdec05ca45d8ddd8a8e5ab2769466ec2dba9a301. --- .../vue/components/containers/elements/ContainerComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index fdcf4615..07f43f1a 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -28,7 +28,7 @@

Days Ago

-

+

{{item.transport ? item.transport.current_schedule.billing_days_left.value : 'n/a'}} {{item.transport ? item.transport.current_schedule.billing_days_left.duration: ''}} {{item.transport ? 'days' : ''}} From 3ae4b019ced9b7ef76b53a75253daf6469c1a548 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 12 Jan 2022 23:55:05 +0800 Subject: [PATCH 13/61] update text-color for days ago in container page --- .../containers/elements/ContainerComponent.vue | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index 07f43f1a..098a1c90 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -27,12 +27,16 @@

{{item.transport ? item.transport.current_schedule.eta : 'n/a'}}

-

Days Ago

-

- {{item.transport ? item.transport.current_schedule.billing_days_left.value : 'n/a'}} - {{item.transport ? item.transport.current_schedule.billing_days_left.duration: ''}} - {{item.transport ? 'days' : ''}} -

+
+
+

Days Ago

+

+ {{item.transport.current_schedule.billing_days_left.value}} + {{item.transport.current_schedule.billing_days_left.duration}} + days +

+
+

Packages

From 96131c5b33a182f170e43a04555325d63b22ff7d Mon Sep 17 00:00:00 2001 From: glovetleong Date: Fri, 14 Jan 2022 14:03:40 +0800 Subject: [PATCH 14/61] export packing list --- .../Services/ExportsContainerPackingList.php | 92 +++++++++++++++++++ .../ExportContainerPackingListController.php | 19 ++++ .../elements/ContainerComponent.vue | 11 +++ routes/web.php | 2 + 4 files changed, 124 insertions(+) create mode 100644 app/Classes/Modules/Exports/Services/ExportsContainerPackingList.php create mode 100644 app/Http/Controllers/Exports/ExportContainerPackingListController.php diff --git a/app/Classes/Modules/Exports/Services/ExportsContainerPackingList.php b/app/Classes/Modules/Exports/Services/ExportsContainerPackingList.php new file mode 100644 index 00000000..2371962b --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsContainerPackingList.php @@ -0,0 +1,92 @@ +id = $id; + } + + /** + * @return \Illuminate\Support\Collection|mixed + */ + public function query() + { + return Container::find($this->id)->packingLists(); + } + + /** + * @param Company $container + * + * @return array + */ + public function map($packing_list): array + { + $order = $packing_list->owner()->first(); + $address = $order->addresses()->first(); + $company = $order->companyModule()->first(); + $connection = $company->inviters()->withPivot('invitee_reference')->first(); + $marking = $connection ? $connection->pivot->invitee_reference:''; + + $quantity = 0; + $cbm = 0; + foreach ($packing_list->packages()->get() as $key => $row) { + $quantity += $row->quantity; + $cbm += (($row->width / 100) * ($row->height / 100) * ($row->length / 100)) * $row->quantity; + } + + $status = ''; + if ($packing_list->transports()->count() > 0) { + $status = 'Delivery'; + } + elseif ($packing_list->status == ApprovalStatus::SUSPENDED) { + $status = 'On Hold'; + } + elseif ($packing_list->status != ApprovalStatus::SUSPENDED) { + $status = 'Release'; + } + + return [ + $marking, + $order->reference, + $quantity, + $cbm, + $status, + $address->contacts()->first() ? $address->contacts()->first()->phone : 'n/a', + $address->contacts()->first() ? $address->contacts()->first()->reference : 'n/a', + $address->street_one . ' ' . $address->street_two . ' ' . $address->district->name . ' ' . $address->post_code . ' ' . $address->state->name . ' ' . $address->country->name, + $address->remarks()->first() ? $address->remarks()->first()->content : 'n/a', + $packing_list->transports()->first() ? $packing_list->transports()->current_schedule->eta : 'n/a' + ]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Exports/ExportContainerPackingListController.php b/app/Http/Controllers/Exports/ExportContainerPackingListController.php new file mode 100644 index 00000000..6e5d845d --- /dev/null +++ b/app/Http/Controllers/Exports/ExportContainerPackingListController.php @@ -0,0 +1,19 @@ +headers->set('Authorization', 'Bearer '.$token); + $exportsContainerPackingList->setId($request->route('id')); + return $exportsContainerPackingList->download('customer-container-packing-list.csv', Excel::CSV, ['Content-Type' => 'text/csv']); + } +} diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index 098a1c90..0aa0aa45 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -72,6 +72,11 @@
status
Delivery Details
Delivery Date
+
+
+ Export +
+
@@ -131,6 +136,12 @@ }, errorHandler(){ this.index = null; + }, + exportContainer(id) { + console.log(id); + + + window.location.href = (this.route('container.export', $id)); } }, mixins: [componentHandler] diff --git a/routes/web.php b/routes/web.php index d520f721..6b9ae1d0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -184,3 +184,5 @@ Route::get('/yd', function (){ }); Route::get('/export/customer-latest-order-date/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export'); +Route::get('/export/packing-list/{id}', 'Exports\ExportContainerPackingListController@export')->name('container.packaging_list.export'); + From 0a8109ae9e71134bc2dd18af9bede7d594cf3eba Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 26 Jan 2022 17:32:14 +0800 Subject: [PATCH 15/61] null order packing list, assign packing list --- .../AssignPackingListOrderLogic.php | 147 ++++++++++++++++++ .../Processors/CreatePackageProcessor.php | 2 +- .../Processors/CreatePackingListProcessor.php | 6 +- .../FetchOrderListsFromYdPortalProcessor.php | 69 ++++---- .../Services/CreatesNullOrderPackingList.php | 31 ++++ .../UpdatesPackingListContractReference.php | 24 +++ .../Services/UpdatesPackingListOwner.php | 26 ++++ .../Services/UpdatesTransportStatus.php | 24 +++ .../AssignPackingListOrderController.php | 20 +++ routes/packing_list.php | 2 + 10 files changed, 319 insertions(+), 32 deletions(-) create mode 100644 app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php create mode 100644 app/Classes/Modules/PackingLists/Services/CreatesNullOrderPackingList.php create mode 100644 app/Classes/Modules/PackingLists/Services/UpdatesPackingListContractReference.php create mode 100644 app/Classes/Modules/PackingLists/Services/UpdatesPackingListOwner.php create mode 100644 app/Classes/Modules/Transports/Services/UpdatesTransportStatus.php create mode 100644 app/Http/Controllers/PackingLists/AssignPackingListOrderController.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php new file mode 100644 index 00000000..15b852f6 --- /dev/null +++ b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php @@ -0,0 +1,147 @@ + 'Assign Packing List Order', + 'message' => 'You have successfully created a Packing List Order' + ]; + } + + /** @var FetchesPackingList */ + private $fetchesPackingList; + + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** @var UpdatesPackingListOwner */ + private $updatesPackingListOwner; + + /** @var UpdatesTransportStatus */ + private $updatesTransportStatus; + + /** @var CreatesContract */ + private $unityCreateContract; + + /** @var ActivateContractProcessor */ + private $unityActivateContract; + + /** @var CreateContractEntityProcessor */ + private $unityCreateContractEntity; + + /** @var AssignContractEntityProcessor */ + private $unityAssignContractEntity; + + /** @var UpdatesPackingListContractReference */ + private $updatesPackingListContractReference; + + /** @var CreatesStep */ + private $createsStep; + + /** + * CreateRemarkLogic constructor. + * @param CanCreateRemark $canCreateRemark + * @param CreatesPackingListRemark $createsPackingListRemark + */ + public function __construct(FetchesPackingList $fetchesPackingList, FetchesOrder $fetchesOrder, UpdatesPackingListOwner $updatesPackingListOwner, UpdatesTransportStatus $updatesTransportStatus, CreatesContract $unityCreateContract, ActivateContractProcessor $unityActivateContract, CreateContractEntityProcessor $unityCreateContractEntity, AssignContractEntityProcessor $unityAssignContractEntity, UpdatesPackingListContractReference $updatesPackingListContractReference, CreatesStep $createsStep) + { + $this->fetchesPackingList = $fetchesPackingList; + $this->fetchesOrder = $fetchesOrder; + $this->updatesPackingListOwner = $updatesPackingListOwner; + $this->updatesTransportStatus = $updatesTransportStatus; + + $this->unityCreateContract = $unityCreateContract; + $this->unityActivateContract = $unityActivateContract; + $this->unityCreateContractEntity = $unityCreateContractEntity; + $this->unityAssignContractEntity = $unityAssignContractEntity; + + $this->updatesPackingListContractReference = $updatesPackingListContractReference; + $this->createsStep = $createsStep; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $warehouse_packing_list = $this->fetchesPackingList->execute([ + 'id' => $request->route('id'), + 'type' => PackingListType::WAREHOUSE_RECEIVE_LIST, + 'status' => ApprovalStatus::REJECTED + ]); + + $order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]); + + $warehouse_packing_list = $this->updatesPackingListOwner->execute($warehouse_packing_list, $order); + + + $transport = $warehouse_packing_list->transports()->first(); + $transport = $this->updatesTransportStatus->execute($transport, ApprovalStatus::APPROVED); + + $contract = $this->unityCreateContract->execute(); + $contractReference = $contract->hash_id; + $contractObligations = $contract->contract_obligation_list; + + $this->unityActivateContract->execute($contractReference); + $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; + + $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); + + $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + + $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); + + $packing_list = $this->fetchesPackingList->execute([ + 'reference' => $warehouse_packing_list->reference, + 'type' => PackingListType::SHIPPING_PACKING_LIST, + 'status' => ApprovalStatus::PENDING_VERIFICATION + ]); + + $packing_list = $this->updatesPackingListContractReference->execute($packing_list, $contractReference); + + foreach($contractObligations as $obligation) { + $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); + $this->createsStep->execute($packing_list, $stepObject); + } + + return $this->resourceResponse(new PackingListResource($warehouse_packing_list)); + } +} diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php index 13e4a83b..e1d112ed 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackageProcessor.php @@ -49,7 +49,7 @@ class CreatePackageProcessor if($replica) { $modificationValue = 1; $packageObject = new PackageObject($object->getType(), $object->getDescription(), $object->getWidth() + $modificationValue, $object->getHeight() + $modificationValue, $object->getLength() + $modificationValue, $object->getWeight(), $object->getQuantity(), $object->getStatus()); - $this->createsPackage->execute($packageObject, $replica); + $package = $this->createsPackage->execute($packageObject, $replica); } return ; diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php index 3e2a861d..f0eda0cb 100644 --- a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php @@ -48,11 +48,13 @@ class CreatePackingListProcessor /** @var PackingList $packingList */ $packingList = $this->createsPackingList->execute($object, $packable); + $appointee_id = $packingList->owner_id == 1 ? 2037 : $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; + $type = $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? PackingListType::SHIPPING_PACKING_LIST_REPLICA : PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA; /** create packing list replica */ - $object = new PackingListObject($object->getReference().'_01', $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, $type, ApprovalStatus::PENDING_SUBMISSION); + $object = new PackingListObject($object->getReference().'_01', $appointee_id, $type, ApprovalStatus::PENDING_SUBMISSION); $this->createsPackingList->execute($object, $packingList); - + return $packingList; } diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 4ed615eb..e1ab37d8 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -7,6 +7,7 @@ use App\Classes\Modules\Companies\Services\FetchesCompanyModule; use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal; use App\Classes\Modules\Orders\Services\FetchesOrder; + use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject; use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject; use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject; @@ -134,7 +135,6 @@ class FetchOrderListsFromYdPortalProcessor */ public function execute(?Carbon $start = null, ?Carbon $end = null) { - try { $start = $start ? $start : Carbon::now()->subMonths(2); @@ -152,7 +152,7 @@ class FetchOrderListsFromYdPortalProcessor ]); $rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest); - + foreach($rows->data as $row){ DB::beginTransaction(); @@ -195,60 +195,72 @@ class FetchOrderListsFromYdPortalProcessor $orderNumber = $customerno[2]; - + $allow_contract = true; try { $order = $this->fetchesOrder->execute(['reference' => $orderNumber]); } catch (ResourceNotFoundException $exception) { - continue; + $order = $this->fetchesCompanyModule->execute(['id' => 1]); + $allow_contract = false; } - $packingListReference = $row->expressno; try{ - $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); + $packingList = $this->fetchesPackingList->execute(['reference' => 123]); } catch (ResourceNotFoundException $exception){ + $appointee_id = !$allow_contract ? 2037 : $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; + $warehouseReceiveObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::WAREHOUSE_RECEIVE_LIST, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); - $warehouseReceiveObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED); /** @var PackingList $warehouseReceiveList */ $warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order); - $transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED); - $this->createsTransport->execute($transportObject, $warehouseReceiveList); - $contract = $this->unityCreateContract->execute(); + $transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); + $transport = $this->createsTransport->execute($transportObject, $warehouseReceiveList); - $contractReference = $contract->hash_id; - $contractObligations = $contract->contract_obligation_list; + if ($allow_contract) { - $this->unityActivateContract->execute($contractReference); + $contract = $this->unityCreateContract->execute(); - $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; + $contractReference = $contract->hash_id; + $contractObligations = $contract->contract_obligation_list; - $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); + $this->unityActivateContract->execute($contractReference); - $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); - $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id; - $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); + $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]); - $packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , $contractReference); + $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id); + $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]); + + $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations); + } + + $packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION , !$allow_contract ? null : $contractReference); /** @var PackingList $packingList */ $packingList = $this->createPackingListProcessor->execute($packingListObject, $order); - foreach($contractObligations as $obligation) { - $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); - $this->createsStep->execute($packingList, $stepObject); + if ($allow_contract) { + foreach($contractObligations as $obligation) { + $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); + $this->createsStep->execute($packingList, $stepObject); + } } foreach($row->deliverysize as $package) { - $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); - $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); - $this->createPackageProcessor->execute($packageObject, $packingList); + $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); + + $package = $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); + + dd($packageObject); + $package = $this->createPackageProcessor->execute($packageObject, $packingList); } } + dd($row->deliverysize, 'yesss'); + if($containerReference) { try { $container = $this->fetchesContainer->execute(['reference' => $containerReference]); @@ -289,13 +301,12 @@ class FetchOrderListsFromYdPortalProcessor } } } - - } DB::commit(); - dump('added'); + dd('here'); + dump('added'); } } catch (\Exception $exception) { Log::debug($exception); diff --git a/app/Classes/Modules/PackingLists/Services/CreatesNullOrderPackingList.php b/app/Classes/Modules/PackingLists/Services/CreatesNullOrderPackingList.php new file mode 100644 index 00000000..fd955d44 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/CreatesNullOrderPackingList.php @@ -0,0 +1,31 @@ +reference = $object->getReference(); + $model->claimant_id = $object->getClaimantId(); + $model->type = $object->getType(); + $model->status = $object->getStatus(); + $model->reference_contract = $object->getContractReference(); + $model->owner_type = 'App\Models\Order'; + $model->owner_id = 1; + + return $this->handler($model); + } +} diff --git a/app/Classes/Modules/PackingLists/Services/UpdatesPackingListContractReference.php b/app/Classes/Modules/PackingLists/Services/UpdatesPackingListContractReference.php new file mode 100644 index 00000000..dba4dfb3 --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/UpdatesPackingListContractReference.php @@ -0,0 +1,24 @@ +reference_contract = $reference_contract; + + return $this->handler($model); + + } +} diff --git a/app/Classes/Modules/PackingLists/Services/UpdatesPackingListOwner.php b/app/Classes/Modules/PackingLists/Services/UpdatesPackingListOwner.php new file mode 100644 index 00000000..4a6b6dfb --- /dev/null +++ b/app/Classes/Modules/PackingLists/Services/UpdatesPackingListOwner.php @@ -0,0 +1,26 @@ +status = ApprovalStatus::APPROVED; + + return $this->handler($packable->packingLists(), $model); + + } +} diff --git a/app/Classes/Modules/Transports/Services/UpdatesTransportStatus.php b/app/Classes/Modules/Transports/Services/UpdatesTransportStatus.php new file mode 100644 index 00000000..2898156a --- /dev/null +++ b/app/Classes/Modules/Transports/Services/UpdatesTransportStatus.php @@ -0,0 +1,24 @@ +status = $status; + + return $this->handler($model); + + } +} diff --git a/app/Http/Controllers/PackingLists/AssignPackingListOrderController.php b/app/Http/Controllers/PackingLists/AssignPackingListOrderController.php new file mode 100644 index 00000000..7498d863 --- /dev/null +++ b/app/Http/Controllers/PackingLists/AssignPackingListOrderController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} diff --git a/routes/packing_list.php b/routes/packing_list.php index 6716ada9..475613dd 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -17,6 +17,8 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::put('/update-drop-date/{id}', 'UpdateDropDatePackingListController@update')->name('update_drop_date'); Route::put('/complete/{id}', 'CompletePackingListController@complete')->name('complete'); Route::put('/assign-remark/{id}', 'AssignPackingListRemarkController@create')->name('assign.remark'); + Route::put('/assign-order/{id}', 'AssignPackingListOrderController@assign')->name('assign.order'); + Route::group(['namespace' => 'Containers', 'prefix' => 'container', 'as' => 'container.'], function () { Route::get('/{id}/show', 'FetchContainerController@fetch')->name('show'); From d2321a3347795ea662b08cca0fc26b80e19ab1f2 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 26 Jan 2022 17:33:58 +0800 Subject: [PATCH 16/61] out --- .../Processors/FetchOrderListsFromYdPortalProcessor.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index e1ab37d8..10f17a92 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -206,7 +206,7 @@ class FetchOrderListsFromYdPortalProcessor $packingListReference = $row->expressno; try{ - $packingList = $this->fetchesPackingList->execute(['reference' => 123]); + $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); } catch (ResourceNotFoundException $exception){ $appointee_id = !$allow_contract ? 2037 : $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; $warehouseReceiveObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::WAREHOUSE_RECEIVE_LIST, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); @@ -253,14 +253,10 @@ class FetchOrderListsFromYdPortalProcessor $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); $package = $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); - - dd($packageObject); $package = $this->createPackageProcessor->execute($packageObject, $packingList); } } - dd($row->deliverysize, 'yesss'); - if($containerReference) { try { $container = $this->fetchesContainer->execute(['reference' => $containerReference]); @@ -305,7 +301,6 @@ class FetchOrderListsFromYdPortalProcessor DB::commit(); - dd('here'); dump('added'); } } catch (\Exception $exception) { From 642e1b2d5aecd7750c797fbdad2b8f36f212b26a Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 26 Jan 2022 17:44:36 +0800 Subject: [PATCH 17/61] status --- .../Processors/FetchOrderListsFromYdPortalProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index 10f17a92..e4fec5c2 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -250,7 +250,7 @@ class FetchOrderListsFromYdPortalProcessor } foreach($row->deliverysize as $package) { - $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); + $packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED); $package = $this->createPackageProcessor->execute($packageObject, $warehouseReceiveList); $package = $this->createPackageProcessor->execute($packageObject, $packingList); From 3dbcf81cc3668735a14b3ba7cdae81c4e84286dc Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 8 Feb 2022 18:05:01 +0800 Subject: [PATCH 18/61] pull --- .../CreateShippingInvoiceTransactionLogic.php | 176 ++++++++++++++++++ .../Constants/SegmentConstants.php | 12 +- .../Constants/TransactionType.php | 22 ++- ...teShippingInvoiceTransactionController.php | 21 +++ .../seeders/SegmentConstantsTableSeeder.php | 175 +++++++++++++---- database/seeders/SegmentsTableSeeder.php | 24 +-- routes/transaction.php | 10 +- 7 files changed, 367 insertions(+), 73 deletions(-) create mode 100644 app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php create mode 100644 app/Http/Controllers/Transactions/CreateShippingInvoiceTransactionController.php diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php new file mode 100644 index 00000000..e891fddd --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php @@ -0,0 +1,176 @@ + 'Create Supplier Transactions', + 'message' => 'You have successfully created currency supplier transactions' + ]; + } + + /** @var FetchesPackingList */ + private $fetchesPackingList; + + /** @var FetchesTransaction */ + private $fetchesTransaction; + + /** @var UpdatesTransactionStatus */ + private $updatesTransactionStatus; + + /** @var CreatesTransaction */ + private $createsTransaction; + + /** @var CreatesDocument */ + private $createsDocument; + + /** @var CreatesFiles */ + private $createsFile; + + /** @var GeneratesTransactionBillNumber */ + private $generatesTransactionBillNumber; + + /** @var PDF */ + private $pdf; + + /** + * CreateSupplierTransactionLogic constructor. + * @param FetchesPackingList $fetchesPackingList + * @param FetchesTransaction $fetchesTransaction + * @param UpdatesTransactionStatus $updatesTransactionStatus + * @param CreatesTransaction $createsTransaction + * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber + * @param PDF $pdf + */ + public function __construct( + FetchesPackingList $fetchesPackingList, + + + + FetchesTransaction $fetchesTransaction, + UpdatesTransactionStatus $updatesTransactionStatus, + CreatesTransaction $createsTransaction, + CreatesDocument $createsDocument, + CreatesFiles $createsFile, + GeneratesTransactionBillNumber $generatesTransactionBillNumber, + PDF $pdf + ) + { + + $this->fetchesPackingList = $fetchesPackingList; + + + + $this->fetchesTransaction = $fetchesTransaction; + $this->updatesTransactionStatus = $updatesTransactionStatus; + $this->createsTransaction = $createsTransaction; + $this->createsDocument = $createsDocument; + $this->createsFile = $createsFile; + $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; + $this->pdf = $pdf; + } + + public function logic(Request $request) : JsonResponse + { + $packing_list = $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]); + + $cbm = $packing_list->packages->sum(function($package) { + return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); + }); + + dd($packages); + + Transaction::select(DB::raw('sum(jumlah * harga) as total'))->get(); + + + price_per_cbm = base_price + customer_rate + warehouse_rate + state_rate + outstation_rate + +price_cbm = 570 myr + +total cbm * price_cbm = 896.61 + +price_cbm, invoice total + +create transaction invoice +create transaction details + +shipping service (570 per cbm * 1.57 cbm) + + // dd($packing_list); + + + // $rate = $request->input('rate'); + + // $transactions = collect(); + + // foreach($request->input('payments') as $payment){ + + // /** @var Transaction $payment */ + // $payment = $this->fetchesTransaction->execute(['id' => $payment['id']]); + // $this->updatesTransactionStatus->execute($payment, ApprovalStatus::COMPLETED); + // $billNumber = $this->generatesTransactionBillNumber->execute('SPLR-'); + // $object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1, + // $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, + // $payment->original_amount * (1 / $rate), $payment->original_amount, 1, $payment->original_currency_id, + // $rate, 0, 0, null, ApprovalStatus::APPROVED); + + // $transactions[] = $this->createsTransaction->execute($payment->booking, $object); + // } + + // $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $transactions, 'supplier' => $supplier]); + + // $path = Str::studly($supplier->name).'_'.Carbon::now()->format('Y_m_d_h_s_i').'.pdf'; + + // $object = new DocumentObject( + // DocumentType::CURRENCY_VENDOR_ORDER, + // [chunk_split('data:application/pdf;base64,'.base64_encode($pdf->output()))], + // '', + // ApprovalStatus::COMPLETED, + // 'currency_vendor_order' + // ); + + // /** @var Document $document */ + // $document = $this->createsDocument->execute($supplier, $object); + // $this->createsFile->execute($document, $object); + + return $this->response([]); + } +} diff --git a/app/Classes/ValueObjects/Constants/SegmentConstants.php b/app/Classes/ValueObjects/Constants/SegmentConstants.php index 80e9cb71..88be0247 100644 --- a/app/Classes/ValueObjects/Constants/SegmentConstants.php +++ b/app/Classes/ValueObjects/Constants/SegmentConstants.php @@ -5,19 +5,19 @@ namespace App\Classes\ValueObjects\Constants; class SegmentConstants { - public const STANDARD_SEGMENT = 1; public const CUSTOM_SEGMENT = 2; - public const SYSTEM_PRIMARY_CURRENCY = 'SYSTEM_PRIMARY_CURRENCY'; + public const BASE_PRICE = 'BASE_PRICE'; - public const SUPPLIER_CURRENCIES = 'SUPPLIER_CURRENCIES'; + public const WAREHOUSE_RATE = 'WAREHOUSE_RATE'; - public const PAYMENT_ATTEMPT_DURATION_LIMIT = 'PAYMENT_ATTEMPT_DURATION_LIMIT'; + public const STATE_RATE = 'STATE_RATE'; - public const SERVICE_TYPE = 'SERVICE_TYPE'; + public const CENTER_POSTCODE = 'CENTER_POSTCODE'; - public const CUSTOM_SERVICE_TYPE = 'CUSTOM_SERVICE_TYPE'; + public const OUTSTATION_POSTCODE = 'OUTSTATION_POSTCODE'; + public const CUSTOMER_RATE = 'CUSTOMER_RATE'; } \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/TransactionType.php b/app/Classes/ValueObjects/Constants/TransactionType.php index 8a5f1075..d61589fa 100644 --- a/app/Classes/ValueObjects/Constants/TransactionType.php +++ b/app/Classes/ValueObjects/Constants/TransactionType.php @@ -4,24 +4,26 @@ namespace App\Classes\ValueObjects\Constants; final class TransactionType { - public const PAYMENT_ATTEMPT = 0; + public const SHIPPING_INVOICE = 1; + + // public const PAYMENT_ATTEMPT = 0; - public const PAYMENT = 1; + // public const PAYMENT = 1; - public const INVOICE = 2; + // public const INVOICE = 2; - public const BILL = 3; + // public const BILL = 3; - public const PERFORMA = 4; + // public const PERFORMA = 4; - public const TOP_UP = 5; + // public const TOP_UP = 5; - public const REFUND = 6; + // public const REFUND = 6; - public const PURCHASE_ORDER = 7; + // public const PURCHASE_ORDER = 7; - public const SUPPLIER_DELIVER = 8; + // public const SUPPLIER_DELIVER = 8; - public const SHIPPING_COST = 9; + // public const SHIPPING_COST = 9; } diff --git a/app/Http/Controllers/Transactions/CreateShippingInvoiceTransactionController.php b/app/Http/Controllers/Transactions/CreateShippingInvoiceTransactionController.php new file mode 100644 index 00000000..d9f35b7c --- /dev/null +++ b/app/Http/Controllers/Transactions/CreateShippingInvoiceTransactionController.php @@ -0,0 +1,21 @@ +execute($request); + } +} diff --git a/database/seeders/SegmentConstantsTableSeeder.php b/database/seeders/SegmentConstantsTableSeeder.php index 9eb5d50a..f69660cf 100644 --- a/database/seeders/SegmentConstantsTableSeeder.php +++ b/database/seeders/SegmentConstantsTableSeeder.php @@ -1,54 +1,147 @@ fetchesCurrency = $fetchesCurrency; - $this->fetchesSegment = $fetchesSegment; - $this->createsSegmentConstant = $createsSegmentConstant; - } - - - /** - * Run the database seeds. - * - * @return void - * @throws \App\Classes\Exceptions\MalformedRequestException - */ public function run() { + DB::beginTransaction(); - $object = new ConstantObject('System Primary Currency', - SegmentConstants::SYSTEM_PRIMARY_CURRENCY, - ['id' => $this->fetchesCurrency->execute(['name' => country('my')->getName()])->id]); - - $this->createsSegmentConstant->execute($this->fetchesSegment->execute(['Standard Segment']), $object); - + DB::table('segment_constants')->insert( + [ + 'id' => 1, + 'segment_id' => 1, + 'reference' => SegmentConstants::BASE_PRICE, + 'value' => json_encode([ + 'id'=> 1, + 'price' => 500, + ]), + ], + [ + 'id' => 2, + 'segment_id' => 1, + 'reference' => SegmentConstants::WAREHOUSE_RATE, + 'value' => json_encode([ + 'id'=> 1, + 'config' => [ + [ + 'warehouse_name' => WarehouseReferences::VT_GUANG_ZHOU, + 'rate' => 10 + ], + [ + 'warehouse_name' => WarehouseReferences::YD_GUANG_ZHOU, + 'rate' => 10 + ], + [ + 'warehouse_name' => WarehouseReferences::VT_YIWU, + 'rate' => 10 + ], + ] + + ]), + ], + [ + 'id' => 3, + 'segment_id' => 1, + 'reference' => SegmentConstants::STATE_RATE, + 'value' => json_encode([ + 'id'=> 1, + 'config' => [ + [ + 'status_id' => 1, + 'rate' => 10, + ], + [ + 'status_id' => 2, + 'rate' => 10, + ], + [ + 'status_id' => 3, + 'rate' => 10, + ], + [ + 'status_id' => 4, + 'rate' => 10, + ], + [ + 'status_id' => 5, + 'rate' => 10, + ], + [ + 'status_id' => 6, + 'rate' => 10, + ], + [ + 'status_id' => 7, + 'rate' => 10, + ], + [ + 'status_id' => 8, + 'rate' => 10, + ], + [ + 'status_id' => 9, + 'rate' => 10, + ], + [ + 'status_id' => 10, + 'rate' => 10, + ], + [ + 'status_id' => 11, + 'rate' => 10, + ], + [ + 'status_id' => 12, + 'rate' => 10, + ], + [ + 'status_id' => 13, + 'rate' => 20, + ], + [ + 'status_id' => 14, + 'rate' => 20, + ], + [ + 'status_id' => 15, + 'rate' => 10, + ], + [ + 'status_id' => 16, + 'rate' => 10, + ] + ] + ]), + ], + [ + 'id' => 4, + 'segment_id' => 1, + 'reference' => SegmentConstants::CENTER_POSTCODE, + 'value' => json_encode(['80050','80100','80150','80200','80250','80300','80350','80400','80500','80506','80508','80516','80519','80534','80536','80542','80546','80558','80560','80564','80568','80578','80584','80586','80590','80592','80594','80596','80600','80604','80608','80620','80622','80628','80644','80648','80662','80664','80668','80670','80672','80673','80676','80700','80710','80720','80730','80900','80902','80904','80906','80908','80988','80990','81000','81100','81200','81300','81310']), + ], + [ + 'id' => 5, + 'segment_id' => 1, + 'reference' => SegmentConstants::OUTSTATION_POSTCODE, + 'value' => json_encode(['80000']), + ], + [ + 'id' => 6, + 'segment_id' => 2, + 'reference' => SegmentConstants::CUSTOMER_RATE, + 'value' => json_encode([ + 'id'=> 1, + 'price' => 15, + ]), + ], + ); + DB::commit(); } } diff --git a/database/seeders/SegmentsTableSeeder.php b/database/seeders/SegmentsTableSeeder.php index 4c9e19be..e6dd2be2 100644 --- a/database/seeders/SegmentsTableSeeder.php +++ b/database/seeders/SegmentsTableSeeder.php @@ -2,24 +2,24 @@ namespace Database\Seeders; -use App\Classes\Modules\Segments\DataTransferObjects\SegmentObject; -use App\Classes\Modules\Segments\Services\CreatesSegment; -use App\Classes\ValueObjects\Constants\SegmentConstants; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class SegmentsTableSeeder extends Seeder { - - - /** - */ public function run() { - - DB::table('segments')->insert([ - 'name' => 'Standard Segment', - 'type' => SegmentConstants::STANDARD_SEGMENT - ]); + DB::table('segments')->insert( + [ + 'id' => 1, + 'company_module_id' => 1, + 'name' => 'Default Segment', + ], + [ + 'id' => 2, + 'company_module_id' => 2, + 'name' => 'Normal Member', + ], + ); } } diff --git a/routes/transaction.php b/routes/transaction.php index cab4d241..7b4f7fd0 100644 --- a/routes/transaction.php +++ b/routes/transaction.php @@ -5,11 +5,13 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' => 'transaction.'], function () { Route::get('/list', 'ListTransactionsController@list')->name('list'); - Route::delete('/suspend/{id}', 'SuspendTransactionController@suspend')->name('suspend'); + // Route::delete('/suspend/{id}', 'SuspendTransactionController@suspend')->name('suspend'); - route::post('/supplier/{id}/bill/create', 'CreateSupplierTransactionController@create')->name('supplier.create'); - route::post('{id}/bill/verification', 'CreatePaymentProofDocumentController@verify')->name('bill.verification'); + route::post('/shipping-invoice/create', 'CreateShippingInvoiceTransactionController@create')->name('supplier.create'); - Route::post('booking/{id}/details/update', 'CreatePurchaseOrderTransactionController@create')->name('po.create'); + + // route::post('{id}/bill/verification', 'CreatePaymentProofDocumentController@verify')->name('bill.verification'); + + // Route::post('booking/{id}/details/update', 'CreatePurchaseOrderTransactionController@create')->name('po.create'); }); \ No newline at end of file From fdc6a4adc13a1bdc3b7a3ef13fc9ed6f368c15cc Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 8 Feb 2022 22:15:18 +0800 Subject: [PATCH 19/61] bug --- .../FetchOrderListsFromYdPortalProcessor.php | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php index e4fec5c2..4094cedc 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php @@ -208,7 +208,14 @@ class FetchOrderListsFromYdPortalProcessor try{ $packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno]); } catch (ResourceNotFoundException $exception){ - $appointee_id = !$allow_contract ? 2037 : $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; + + if (!$allow_contract) { + $appointee_id = 2037; + } + else { + $appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id; + } + $warehouseReceiveObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::WAREHOUSE_RECEIVE_LIST, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED); /** @var PackingList $warehouseReceiveList */ @@ -261,7 +268,16 @@ class FetchOrderListsFromYdPortalProcessor try { $container = $this->fetchesContainer->execute(['reference' => $containerReference]); } catch (ResourceNotFoundException $exception){ - $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id]); + + if (!$allow_contract) { + $appointee_id = 2037; + } + else { + $appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id; + } + + $originWarehouse = $this->fetchesCompanyModule->execute(['id' => $appointee_id]); + $containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION); /** @var Container $container */ $container = $this->createContainerProcessor->execute($containerObject, $originWarehouse); From 658a669a4d9d8294158074d9d7e55c528eca0e2a Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 8 Feb 2022 22:52:12 +0800 Subject: [PATCH 20/61] bug --- .../ListPackingListsLogic.php | 8 ++++- .../PackingListNullOrderResource.php | 29 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 app/Http/Resources/PackingListNullOrderResource.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php index a1e485ce..7d4a9531 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php @@ -6,6 +6,7 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\PackingLists\Services\ListsPackingLists; use App\Classes\Modules\PackingLists\Standards\Rules\CanListPackingLists; +use App\Http\Resources\PackingListNullOrderResource; use App\Http\Resources\PackingListResource; use ErrorException; use Illuminate\Http\JsonResponse; @@ -55,7 +56,12 @@ class ListPackingListsLogic extends AbstractControllerLogic $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); - return $this->collectionResponse(PackingListResource::collection($query)); + if ($request->input('null_order')) { + return $this->collectionResponse(PackingListNullOrderResource::collection($query)); + } + else { + return $this->collectionResponse(PackingListResource::collection($query)); + } } catch (\Exception $exception){ throw new ErrorException($exception->getMessage(), $exception->getCode()); diff --git a/app/Http/Resources/PackingListNullOrderResource.php b/app/Http/Resources/PackingListNullOrderResource.php new file mode 100644 index 00000000..63af1466 --- /dev/null +++ b/app/Http/Resources/PackingListNullOrderResource.php @@ -0,0 +1,29 @@ +packingLists()->first(); + + return [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'type' => $this->type, + ]; + } +} From c17c29ad06dd5d5c523015edab6754902bb64753 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 9 Feb 2022 19:28:50 +0800 Subject: [PATCH 21/61] add owner id filter --- .../General/Eloquent/Filters/OwnerId.php | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 app/Classes/General/Eloquent/Filters/OwnerId.php diff --git a/app/Classes/General/Eloquent/Filters/OwnerId.php b/app/Classes/General/Eloquent/Filters/OwnerId.php new file mode 100644 index 00000000..eac7e32d --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/OwnerId.php @@ -0,0 +1,20 @@ +where('owner_id', $value); + } + +} \ No newline at end of file From 05b1aedda504805ab2643e0703234d2063ee8203 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Wed, 9 Feb 2022 21:09:17 +0800 Subject: [PATCH 22/61] Merge branch 'admin-settings-ui' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development # Conflicts: # app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php # app/Classes/Modules/Segments/ControllersLogic/CreateSegmentLogic.php # app/Classes/Modules/Segments/ControllersLogic/DeleteSegmentLogic.php # app/Classes/Modules/Segments/DataTransferObjects/SegmentObject.php # app/Classes/Modules/Segments/Services/CreatesSegment.php # app/Classes/Modules/Segments/Standards/Rules/CanCreateSegment.php # app/Classes/Modules/Segments/Standards/Rules/CanDeleteSegment.php # app/Classes/Modules/Segments/Standards/Validators/SegmentValidation.php # app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php # app/Http/Controllers/Announcements/ListAnnouncementsController.php # app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php # app/Http/Controllers/Announcements/UpdateAnnouncementController.php # app/Http/Controllers/Segments/CreateSegmentController.php # app/Http/Controllers/Segments/DeleteSegmentController.php # routes/announcement.php # routes/api.php # routes/segment.php # routes/web.php --- .../ControllersLogic/AddNewMemberLogic.php | 78 +++++ .../ControllersLogic/DeleteSegmentLogic.php | 1 - .../ControllersLogic/FetchConstantLogic.php | 52 +++ .../ControllersLogic/FetchSegmentLogic.php | 59 ++++ .../ControllersLogic/ListSegmentLogic.php | 52 +++ .../ControllersLogic/UpdateConstantLogic.php | 104 ++++++ .../ControllersLogic/UpdateSegmentLogic.php | 87 +++++ .../ConvertsConstantDetailsToResource.php | 38 ++ .../Segments/Services/CreatesSegment.php | 1 - .../Segments/Services/FetchesConstant.php | 33 ++ .../Segments/Services/ListsConstants.php | 33 ++ .../Segments/Services/ListsSegments.php | 33 ++ .../Segments/Services/UpdatesConstant.php | 26 ++ .../Segments/Services/UpdatesSegment.php | 23 ++ .../Standards/Rules/CanCreateConstant.php | 54 +++ .../Standards/Rules/CanFetchSegment.php | 43 +++ .../Standards/Rules/CanListSegments.php | 38 ++ .../Standards/Rules/CanUpdateConstant.php | 54 +++ .../Standards/Rules/CanUpdateSegment.php | 59 ++++ .../Validators/ConstantValidation.php | 44 +++ .../CreateServiceTypeLogic.php | 105 ++++++ .../DeleteServiceTypeLogic.php | 68 ++++ .../FetchServiceTypeLogic.php | 62 ++++ .../ListServiceTypesLogic.php | 62 ++++ .../UpdateCustomServiceConstantLogic.php | 110 ++++++ .../UpdateServiceTypeLogic.php | 112 ++++++ .../UpdateServiceTypeStatusLogic.php | 59 ++++ .../CustomConfigurationsObject.php | 75 ++++ .../ServiceCurrenciesObject.php | 90 +++++ .../ServiceDetailObject.php | 138 ++++++++ .../DataTransferObjects/ServiceTypeObject.php | 33 ++ .../Services/CreatesServiceType.php | 19 + .../CreatesServiceTypeConstantDetails.php | 141 ++++++++ .../Services/DeletesServiceType.php | 15 + .../FetchesServiceBankConfigurations.php | 27 ++ .../Services/FetchesServiceConfigurations.php | 65 ++++ ...FetchesServiceCurrenciesConfigurations.php | 69 ++++ .../Services/FetchesServiceType.php | 33 ++ .../Services/ListsServiceTypes.php | 33 ++ .../Services/UpdatesServiceCurrencyRates.php | 55 +++ .../Services/UpdatesServiceType.php | 19 + .../Services/UpdatesServiceTypeStatus.php | 19 + .../Standards/Rules/CanCreateServiceType.php | 57 +++ .../Standards/Rules/CanDeleteServiceType.php | 43 +++ .../Standards/Rules/CanFetchServiceType.php | 43 +++ .../Standards/Rules/CanListServiceTypes.php | 43 +++ .../Standards/Rules/CanUpdateServiceType.php | 57 +++ .../Validators/ServiceTypeValidation.php | 39 +++ .../ListAnnouncementsController.php | 2 +- .../UpdateAnnouncementController.php | 1 - .../Companies/AddNewMemberController.php | 22 ++ .../Segments/CreateSegmentController.php | 1 - .../Segments/FetchConstantController.php | 20 ++ .../Segments/FetchSegmentController.php | 20 ++ .../Segments/ListSegmentsController.php | 20 ++ .../Segments/UpdateConstantController.php | 20 ++ .../UpdateCustomServiceConstantController.php | 20 ++ .../Segments/UpdateSegmentController.php | 20 ++ app/Http/Resources/ConstantResource.php | 27 ++ .../Resources/CustomServiceTypeResource.php | 27 ++ .../elements/CurrenciesListComponent.vue | 218 ++++++++++++ .../elements/PaymentAttemptComponent.vue | 151 ++++++++ .../elements/UserProfileComponent.vue | 67 ++++ .../forms/AnnouncementFormComponent.vue | 128 +++++++ .../forms/DeleteAnnouncementFormComponent.vue | 33 ++ .../settings/forms/EditEmailFormComponent.vue | 58 ++++ .../EditUserProfileFullnameFormComponent.vue | 51 +++ .../PaymentAttemptLimitFormComponent.vue | 111 ++++++ .../forms/ResetUserPasswordFormComponent.vue | 44 +++ .../settings/forms/SegmentFormComponent.vue | 59 ++++ .../forms/SegmentServiceFormComponent.vue | 293 ++++++++++++++++ .../settings/forms/ServiceFormComponent.vue | 212 ++++++++++++ .../UpdateServiceStatusFormComponent.vue | 33 ++ .../user/elements/UserComponent.vue | 61 ++++ .../user/form/DeleteUserFormComponent.vue | 33 ++ .../user/form/UserFormComponent.vue | 117 +++++++ resources/views/pages/settings.blade.php | 325 ++++++++++++++++++ resources/views/partials/header.blade.php | 9 + resources/views/partials/menu.blade.php | 8 + routes/api.php | 2 + routes/company.php | 2 + routes/segment.php | 11 + routes/web.php | 3 + 83 files changed, 4827 insertions(+), 5 deletions(-) create mode 100644 app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php create mode 100644 app/Classes/Modules/Segments/ControllersLogic/FetchConstantLogic.php create mode 100644 app/Classes/Modules/Segments/ControllersLogic/FetchSegmentLogic.php create mode 100644 app/Classes/Modules/Segments/ControllersLogic/ListSegmentLogic.php create mode 100644 app/Classes/Modules/Segments/ControllersLogic/UpdateConstantLogic.php create mode 100644 app/Classes/Modules/Segments/ControllersLogic/UpdateSegmentLogic.php create mode 100644 app/Classes/Modules/Segments/Services/ConvertsConstantDetailsToResource.php create mode 100644 app/Classes/Modules/Segments/Services/FetchesConstant.php create mode 100644 app/Classes/Modules/Segments/Services/ListsConstants.php create mode 100644 app/Classes/Modules/Segments/Services/ListsSegments.php create mode 100644 app/Classes/Modules/Segments/Services/UpdatesConstant.php create mode 100644 app/Classes/Modules/Segments/Services/UpdatesSegment.php create mode 100644 app/Classes/Modules/Segments/Standards/Rules/CanCreateConstant.php create mode 100644 app/Classes/Modules/Segments/Standards/Rules/CanFetchSegment.php create mode 100644 app/Classes/Modules/Segments/Standards/Rules/CanListSegments.php create mode 100644 app/Classes/Modules/Segments/Standards/Rules/CanUpdateConstant.php create mode 100644 app/Classes/Modules/Segments/Standards/Rules/CanUpdateSegment.php create mode 100644 app/Classes/Modules/Segments/Standards/Validators/ConstantValidation.php create mode 100644 app/Classes/Modules/ServiceTypes/ControllersLogic/CreateServiceTypeLogic.php create mode 100644 app/Classes/Modules/ServiceTypes/ControllersLogic/DeleteServiceTypeLogic.php create mode 100644 app/Classes/Modules/ServiceTypes/ControllersLogic/FetchServiceTypeLogic.php create mode 100644 app/Classes/Modules/ServiceTypes/ControllersLogic/ListServiceTypesLogic.php create mode 100644 app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateCustomServiceConstantLogic.php create mode 100644 app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeLogic.php create mode 100644 app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeStatusLogic.php create mode 100644 app/Classes/Modules/ServiceTypes/DataTransferObjects/CustomConfigurationsObject.php create mode 100644 app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceCurrenciesObject.php create mode 100644 app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceDetailObject.php create mode 100644 app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceTypeObject.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/CreatesServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/CreatesServiceTypeConstantDetails.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/DeletesServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/FetchesServiceBankConfigurations.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/FetchesServiceConfigurations.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/FetchesServiceCurrenciesConfigurations.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/FetchesServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/ListsServiceTypes.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/UpdatesServiceCurrencyRates.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/UpdatesServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Services/UpdatesServiceTypeStatus.php create mode 100644 app/Classes/Modules/ServiceTypes/Standards/Rules/CanCreateServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Standards/Rules/CanDeleteServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Standards/Rules/CanFetchServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Standards/Rules/CanListServiceTypes.php create mode 100644 app/Classes/Modules/ServiceTypes/Standards/Rules/CanUpdateServiceType.php create mode 100644 app/Classes/Modules/ServiceTypes/Standards/Validators/ServiceTypeValidation.php create mode 100644 app/Http/Controllers/Companies/AddNewMemberController.php create mode 100644 app/Http/Controllers/Segments/FetchConstantController.php create mode 100644 app/Http/Controllers/Segments/FetchSegmentController.php create mode 100644 app/Http/Controllers/Segments/ListSegmentsController.php create mode 100644 app/Http/Controllers/Segments/UpdateConstantController.php create mode 100644 app/Http/Controllers/Segments/UpdateCustomServiceConstantController.php create mode 100644 app/Http/Controllers/Segments/UpdateSegmentController.php create mode 100644 app/Http/Resources/ConstantResource.php create mode 100644 app/Http/Resources/CustomServiceTypeResource.php create mode 100644 resources/assets/vue/components/settings/elements/CurrenciesListComponent.vue create mode 100644 resources/assets/vue/components/settings/elements/PaymentAttemptComponent.vue create mode 100644 resources/assets/vue/components/settings/elements/UserProfileComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/PaymentAttemptLimitFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/SegmentFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/ServiceFormComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue create mode 100644 resources/assets/vue/components/user/elements/UserComponent.vue create mode 100644 resources/assets/vue/components/user/form/DeleteUserFormComponent.vue create mode 100644 resources/assets/vue/components/user/form/UserFormComponent.vue create mode 100644 resources/views/pages/settings.blade.php diff --git a/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php new file mode 100644 index 00000000..19dc5b59 --- /dev/null +++ b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php @@ -0,0 +1,78 @@ + 'Updated Email', + 'message' => 'Successfully updated email' + ]; + } + + /** + * @var AssignEmployeeProcessor + */ + private $assignEmployeeProcessor; + + /** + * @var GenerateEmailVerificationAttemptProcessor + */ + private $generateEmailVerificationAttemptProcessor; + + /** + * AddNewMemberLogic constructor. + * @param AssignEmployeeProcessor $assignEmployeeProcessor + * @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor + */ + public function __construct(AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor) + { + $this->assignEmployeeProcessor = $assignEmployeeProcessor; + $this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ResourceConflictException + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request): JsonResponse + { + try { + $user = Auth::user()->replicate(); + $user->email = $request->input('email'); + $user->status = ApprovalStatus::PENDING_VERIFICATION; + $user->save(); + } catch (QueryException $exception){ + throw new ResourceConflictException('Unable to change your email address as it already exists'); + } + + if($company = Auth::user()->companyModule()->first()){ + $Object = new EmploymentObject($company, $user); + $this->assignEmployeeProcessor->execute($Object); + } + + $this->generateEmailVerificationAttemptProcessor->execute($user); + + return $this->resourceResponse(new UserResource($user)); + } +} diff --git a/app/Classes/Modules/Segments/ControllersLogic/DeleteSegmentLogic.php b/app/Classes/Modules/Segments/ControllersLogic/DeleteSegmentLogic.php index 5d2f6c3b..98844819 100644 --- a/app/Classes/Modules/Segments/ControllersLogic/DeleteSegmentLogic.php +++ b/app/Classes/Modules/Segments/ControllersLogic/DeleteSegmentLogic.php @@ -45,7 +45,6 @@ class DeleteSegmentLogic extends AbstractControllerLogic $this->fetchesSegment = $fetchesSegment; } - /** * @param Request $request * @return JsonResponse diff --git a/app/Classes/Modules/Segments/ControllersLogic/FetchConstantLogic.php b/app/Classes/Modules/Segments/ControllersLogic/FetchConstantLogic.php new file mode 100644 index 00000000..6c5c5b0f --- /dev/null +++ b/app/Classes/Modules/Segments/ControllersLogic/FetchConstantLogic.php @@ -0,0 +1,52 @@ + 'Fetch Segment Constant', + 'message' => 'You have successfully retrieved the Segment Constant' + ]; + } + + + /** @var FetchesConstant */ + private $fetchesConstant; + + /** + * FetchConstantLogic constructor. + * @param FetchesConstant $fetchesConstant + */ + public function __construct(FetchesConstant $fetchesConstant) + { + $this->fetchesConstant = $fetchesConstant; + } + + + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + + $constant = $this->fetchesConstant->execute(['segment_id' => $request->route('id'), 'reference' => $request->route('reference')]); + + return $this->resourceResponse(new ConstantResource($constant)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/ControllersLogic/FetchSegmentLogic.php b/app/Classes/Modules/Segments/ControllersLogic/FetchSegmentLogic.php new file mode 100644 index 00000000..d5c35fdc --- /dev/null +++ b/app/Classes/Modules/Segments/ControllersLogic/FetchSegmentLogic.php @@ -0,0 +1,59 @@ + 'Retrieved Segment', + 'message' => 'You have successfully retrieved a segment' + ]; + } + + /** @var CanFetchSegment */ + private $canFetchSegment; + + /** @var FetchesSegment */ + private $fetchesSegment; + + /** + * FetchSegmentLogic constructor. + * @param CanFetchSegment $canFetchSegment + * @param FetchesSegment $fetchesSegment + */ + public function __construct(CanFetchSegment $canFetchSegment, FetchesSegment $fetchesSegment) + { + $this->canFetchSegment = $canFetchSegment; + $this->fetchesSegment = $fetchesSegment; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $this->canFetchSegment->passes(); + + $query = $this->fetchesSegment->execute(['id' => $request->route('id')]); + + return $this->resourceResponse(new SegmentResource($query)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/ControllersLogic/ListSegmentLogic.php b/app/Classes/Modules/Segments/ControllersLogic/ListSegmentLogic.php new file mode 100644 index 00000000..d8299424 --- /dev/null +++ b/app/Classes/Modules/Segments/ControllersLogic/ListSegmentLogic.php @@ -0,0 +1,52 @@ + 'Retrieved Segment', + 'message' => 'You have successfully retrieved a list of Segment' + ]; + } + + + /** @var ListsSegments */ + private $listsSegments; + + /** + * ListSegmentLogic constructor. + * @param ListsSegments $listsSegments + */ + public function __construct(ListsSegments $listsSegments) + { + $this->listsSegments = $listsSegments; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + + $query = $this->listsSegments->execute($this->listsSegments->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(SegmentResource::collection($query)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/ControllersLogic/UpdateConstantLogic.php b/app/Classes/Modules/Segments/ControllersLogic/UpdateConstantLogic.php new file mode 100644 index 00000000..dac04ec7 --- /dev/null +++ b/app/Classes/Modules/Segments/ControllersLogic/UpdateConstantLogic.php @@ -0,0 +1,104 @@ + 'Updated Segment Constant', + 'message' => 'You have successfully updated the Segment Constant' + ]; + } + + /** @var CanUpdateConstant */ + private $canUpdateConstant; + + /** @var UpdatesConstant */ + private $updatesConstant; + + /** @var FetchesSegment */ + private $fetchesSegment; + + /** @var FetchesConstant */ + private $fetchesConstant; + + /** @var CanCreateConstant */ + private $canCreateConstant; + + /** @var CreatesConstant */ + private $createsConstant; + + + /** + * UpdateConstantLogic constructor. + * @param CanUpdateConstant $canUpdateConstant + * @param UpdatesConstant $updatesConstant + * @param FetchesSegment $fetchesSegment + * @param FetchesConstant $fetchesConstant + * @param CanCreateConstant $canCreateConstant + * @param CreatesConstant $createsConstant + */ + public function __construct(CanUpdateConstant $canUpdateConstant, UpdatesConstant $updatesConstant, FetchesSegment $fetchesSegment, FetchesConstant $fetchesConstant, CanCreateConstant $canCreateConstant, CreatesConstant $createsConstant) + { + $this->canUpdateConstant = $canUpdateConstant; + $this->updatesConstant = $updatesConstant; + $this->fetchesSegment = $fetchesSegment; + $this->fetchesConstant = $fetchesConstant; + $this->canCreateConstant = $canCreateConstant; + $this->createsConstant = $createsConstant; + } + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + + $object = new ConstantObject($request->input('name'), $request->input('reference'), $request->input('detail')); + + $segment = $this->fetchesSegment->execute(['id' => $request->route('id')]); + + try { + + $constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $object->getReference()]); + $this->canUpdateConstant->passes($object); + + /** @var SegmentConstant $constant */ + $constant = $this->updatesConstant->execute($constant, $object); + + } catch (ResourceNotFoundException $exception){ + + $this->canCreateConstant->passes($object); + + /** @var SegmentConstant $constant */ + $constant = $this->createsConstant->execute($segment, $object); + + } + + + return $this->resourceResponse(new ConstantResource($constant)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/ControllersLogic/UpdateSegmentLogic.php b/app/Classes/Modules/Segments/ControllersLogic/UpdateSegmentLogic.php new file mode 100644 index 00000000..43eaa54e --- /dev/null +++ b/app/Classes/Modules/Segments/ControllersLogic/UpdateSegmentLogic.php @@ -0,0 +1,87 @@ + 'Updated Segment', + 'message' => 'You have successfully updated the Segment' + ]; + } + + /** @var CanUpdateSegment */ + private $canUpdateSegment; + + /** @var UpdatesSegment */ + private $updatesSegment; + + /** @var FetchesSegment */ + private $fetchesSegment; + + + /** + * UpdateSegmentLogic constructor. + * @param CanUpdateSegment $canUpdateSegment + * @param UpdatesSegment $updatesSegment + * @param FetchesSegment $fetchesSegment + */ + public function __construct( + CanUpdateSegment $canUpdateSegment, + UpdatesSegment $updatesSegment, + FetchesSegment $fetchesSegment + ) + { + $this->canUpdateSegment = $canUpdateSegment; + $this->updatesSegment = $updatesSegment; + $this->fetchesSegment = $fetchesSegment; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws ErrorException + */ + public function logic(Request $request) : JsonResponse + { + try { + DB::beginTransaction(); + + $segment_query = $this->fetchesSegment->execute(['id' => $request->route('id')]); + + $segment_object = new SegmentObject( + $request->input('name', $segment_query->name) + ); + $this->canUpdateSegment->passes($segment_object); + $segment_query = $this->updatesSegment->execute($segment_query, $segment_object); + + DB::commit(); + + return $this->resourceResponse(new SegmentResource($segment_query)); + + } catch (\Exception $exception){ + throw new ErrorException($exception->getMessage(), $exception->getCode()); + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Services/ConvertsConstantDetailsToResource.php b/app/Classes/Modules/Segments/Services/ConvertsConstantDetailsToResource.php new file mode 100644 index 00000000..4489da1f --- /dev/null +++ b/app/Classes/Modules/Segments/Services/ConvertsConstantDetailsToResource.php @@ -0,0 +1,38 @@ +fetchesCurrency = $fetchesCurrency; + } + + + public function execute(SegmentConstant $constant){ + + if($constant->reference === SegmentConstants::SUPPLIER_CURRENCIES) { + return property_exists($constant->detail, 'id') ? new CurrencyResource($this->fetchesCurrency->execute(['id' => $constant->detail->id])) : ''; + } + + return $constant->detail; + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Services/CreatesSegment.php b/app/Classes/Modules/Segments/Services/CreatesSegment.php index 4dff35a7..aea2d87f 100644 --- a/app/Classes/Modules/Segments/Services/CreatesSegment.php +++ b/app/Classes/Modules/Segments/Services/CreatesSegment.php @@ -8,7 +8,6 @@ use App\Models\Segment; class CreatesSegment extends AbstractUpdateRecord { - /** * @param SegmentObject $object * @return \Illuminate\Database\Eloquent\Model diff --git a/app/Classes/Modules/Segments/Services/FetchesConstant.php b/app/Classes/Modules/Segments/Services/FetchesConstant.php new file mode 100644 index 00000000..bfa1b2cb --- /dev/null +++ b/app/Classes/Modules/Segments/Services/FetchesConstant.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Services/ListsConstants.php b/app/Classes/Modules/Segments/Services/ListsConstants.php new file mode 100644 index 00000000..733a6db7 --- /dev/null +++ b/app/Classes/Modules/Segments/Services/ListsConstants.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Services/ListsSegments.php b/app/Classes/Modules/Segments/Services/ListsSegments.php new file mode 100644 index 00000000..af44820d --- /dev/null +++ b/app/Classes/Modules/Segments/Services/ListsSegments.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Services/UpdatesConstant.php b/app/Classes/Modules/Segments/Services/UpdatesConstant.php new file mode 100644 index 00000000..13fb22c1 --- /dev/null +++ b/app/Classes/Modules/Segments/Services/UpdatesConstant.php @@ -0,0 +1,26 @@ +name = $object->getName(); + $model->reference = $object->getReference(); + $model->detail = json_encode($object->getDetail()); + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Services/UpdatesSegment.php b/app/Classes/Modules/Segments/Services/UpdatesSegment.php new file mode 100644 index 00000000..17f13efb --- /dev/null +++ b/app/Classes/Modules/Segments/Services/UpdatesSegment.php @@ -0,0 +1,23 @@ +name = $object->getName(); + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Standards/Rules/CanCreateConstant.php b/app/Classes/Modules/Segments/Standards/Rules/CanCreateConstant.php new file mode 100644 index 00000000..55f9c61a --- /dev/null +++ b/app/Classes/Modules/Segments/Standards/Rules/CanCreateConstant.php @@ -0,0 +1,54 @@ +constantValidation = $constantValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + + + } + + /** + * @param ConstantObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->constantValidation->validate($object, 'POST'); + } + + /** + * @param ConstantObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Standards/Rules/CanFetchSegment.php b/app/Classes/Modules/Segments/Standards/Rules/CanFetchSegment.php new file mode 100644 index 00000000..e6756305 --- /dev/null +++ b/app/Classes/Modules/Segments/Standards/Rules/CanFetchSegment.php @@ -0,0 +1,43 @@ +ConstantValidation = $ConstantValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + } + + /** + * @param ConstantObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->ConstantValidation->validate($object, 'PUT'); + } + + /** + * @param ConstantObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Standards/Rules/CanUpdateSegment.php b/app/Classes/Modules/Segments/Standards/Rules/CanUpdateSegment.php new file mode 100644 index 00000000..58a8c0ca --- /dev/null +++ b/app/Classes/Modules/Segments/Standards/Rules/CanUpdateSegment.php @@ -0,0 +1,59 @@ +segmentValidation = $segmentValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + + if (!\Auth::user()->can('edit segment')) { + return false; + } + + return true; + } + + /** + * @param SegmentObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->segmentValidation->validate($object); + } + + /** + * @param SegmentObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Segments/Standards/Validators/ConstantValidation.php b/app/Classes/Modules/Segments/Standards/Validators/ConstantValidation.php new file mode 100644 index 00000000..d5ac8819 --- /dev/null +++ b/app/Classes/Modules/Segments/Standards/Validators/ConstantValidation.php @@ -0,0 +1,44 @@ + $object->getName(), + 'reference' => $object->getReference(), + 'detail' => $object->getDetail() + ]; + + return $data; + } + + /** + * @return array + */ + protected function rules(): array { + return [ + 'name' => 'required', + 'reference' => 'required', + 'detail' => 'required' + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/ControllersLogic/CreateServiceTypeLogic.php b/app/Classes/Modules/ServiceTypes/ControllersLogic/CreateServiceTypeLogic.php new file mode 100644 index 00000000..07672f85 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/ControllersLogic/CreateServiceTypeLogic.php @@ -0,0 +1,105 @@ + 'Created Service Type', + 'message' => 'You have successfully created a new Service Type' + ]; + } + + /** @var CanCreateServiceType */ + private $canCreateServiceType; + + /** @var CreatesServiceType */ + private $createsServiceType; + + /** @var CreatesServiceTypeConstantDetails */ + private $createsServiceTypeConstantDetails; + + /** @var UpdatesServiceCurrencyRates */ + private $updatesServiceCurrencyRates; + + /** @var FetchesSegment */ + private $fetchesSegment; + + /** @var CreatesConstant */ + private $createsConstant; + + + /** + * CreateServiceTypeLogic constructor. + * @param CanCreateServiceType $canCreateServiceType + * @param CreatesServiceType $createsServiceType + * @param CreatesServiceTypeConstantDetails $createsServiceTypeConstantDetails + * @param UpdatesServiceCurrencyRates $updatesServiceCurrencyRates + * @param FetchesSegment $fetchesSegment + * @param CreatesConstant $createsConstant + */ + public function __construct(CanCreateServiceType $canCreateServiceType, CreatesServiceType $createsServiceType, CreatesServiceTypeConstantDetails $createsServiceTypeConstantDetails, UpdatesServiceCurrencyRates $updatesServiceCurrencyRates, FetchesSegment $fetchesSegment, CreatesConstant $createsConstant) + { + $this->canCreateServiceType = $canCreateServiceType; + $this->createsServiceType = $createsServiceType; + $this->createsServiceTypeConstantDetails = $createsServiceTypeConstantDetails; + $this->updatesServiceCurrencyRates = $updatesServiceCurrencyRates; + $this->fetchesSegment = $fetchesSegment; + $this->createsConstant = $createsConstant; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + + $object = new ServiceTypeObject($request->input('name')); + + $this->canCreateServiceType->passes($object); + + /** @var ServiceType $service */ + $service = $this->createsServiceType->execute($object); + + $object = new ServiceDetailObject($service->id, (int) $request->input('configurations.bank_id'), + $request->input('configurations.service_charge'), $request->input('configurations.minimum_charge'), $request->input('configurations.tax'), + $request->input('configurations.po_limit'), $request->input('configurations.currencies'), false, $request->input('configurations.billable')); + + $this->updatesServiceCurrencyRates->execute($service, $object->getCurrencies()); + + $constantObject = new ConstantObject('Service Type', SegmentConstants::SERVICE_TYPE, $this->createsServiceTypeConstantDetails->execute($object)); + + $this->createsConstant->execute($this->fetchesSegment->execute(['type' => SegmentConstants::STANDARD_SEGMENT]), $constantObject); + + + return $this->resourceResponse(new ServiceTypeResource($service)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/ControllersLogic/DeleteServiceTypeLogic.php b/app/Classes/Modules/ServiceTypes/ControllersLogic/DeleteServiceTypeLogic.php new file mode 100644 index 00000000..c45c49d9 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/ControllersLogic/DeleteServiceTypeLogic.php @@ -0,0 +1,68 @@ + 'Deleted Service Type', + 'message' => 'You have successfully deleted a Service Type' + ]; + } + + + /** @var CanDeleteServiceType */ + private $canDeleteServiceType; + + /** @var DeletesServiceType */ + private $deletesServiceType; + + /** @var FetchesServiceType */ + private $fetchesServiceType; + + /** + * DeleteServiceTypeLogic constructor. + * @param CanDeleteServiceType $canDeleteServiceType + * @param DeletesServiceType $deletesServiceType + * @param FetchesServiceType $fetchesServiceType + */ + public function __construct(CanDeleteServiceType $canDeleteServiceType, DeletesServiceType $deletesServiceType, FetchesServiceType $fetchesServiceType) + { + $this->canDeleteServiceType = $canDeleteServiceType; + $this->deletesServiceType = $deletesServiceType; + $this->fetchesServiceType = $fetchesServiceType; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + + $this->canDeleteServiceType->passes(); + + $query = $this->fetchesServiceType->execute(['id' => $request->route('id')]); + + $this->deletesServiceType->execute($query); + + return $this->response([]); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/ControllersLogic/FetchServiceTypeLogic.php b/app/Classes/Modules/ServiceTypes/ControllersLogic/FetchServiceTypeLogic.php new file mode 100644 index 00000000..f7835d34 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/ControllersLogic/FetchServiceTypeLogic.php @@ -0,0 +1,62 @@ + 'Retrieved Service Type', + 'message' => 'You have successfully retrieved a Service Type' + ]; + } + + /** @var CanFetchServiceType */ + private $canFetchServiceType; + + /** @var FetchesServiceType */ + private $fetchesServiceType; + + /** + * FetchServiceTypeLogic constructor. + * @param CanFetchServiceType $canFetchServiceType + * @param FetchesServiceType $fetchesServiceType + */ + public function __construct(CanFetchServiceType $canFetchServiceType, FetchesServiceType $fetchesServiceType) + { + $this->canFetchServiceType = $canFetchServiceType; + $this->fetchesServiceType = $fetchesServiceType; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $this->canFetchServiceType->passes(); + + $query = $this->fetchesServiceType->execute(['id' => $request->route('id')]); + + return $this->resourceResponse(new ServiceTypeResource($query)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/ControllersLogic/ListServiceTypesLogic.php b/app/Classes/Modules/ServiceTypes/ControllersLogic/ListServiceTypesLogic.php new file mode 100644 index 00000000..10b390ae --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/ControllersLogic/ListServiceTypesLogic.php @@ -0,0 +1,62 @@ + 'Retrieved Service Types', + 'message' => 'You have successfully retrieved a list of Service Types' + ]; + } + + /** @var CanListServiceTypes */ + private $canListServiceTypes; + + /** @var ListsServiceTypes */ + private $listsServiceTypes; + + /** + * ListServiceTypesControllerLogic constructor. + * @param CanListServiceTypes $canListServiceTypes + * @param ListsServiceTypes $listsServiceTypes + */ + public function __construct(CanListServiceTypes $canListServiceTypes, ListsServiceTypes $listsServiceTypes) + { + $this->canListServiceTypes = $canListServiceTypes; + $this->listsServiceTypes = $listsServiceTypes; + } + + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $this->canListServiceTypes->passes(); + + $query = $this->listsServiceTypes->execute($this->listsServiceTypes->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(ServiceTypeResource::collection($query)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateCustomServiceConstantLogic.php b/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateCustomServiceConstantLogic.php new file mode 100644 index 00000000..e08ef598 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateCustomServiceConstantLogic.php @@ -0,0 +1,110 @@ + 'Update Segment Service', + 'message' => 'You have successfully update a segments service configuration' + ]; + } + + /** @var FetchesServiceType */ + private $fetchesServiceType; + + /** @var CreatesServiceTypeConstantDetails */ + private $createsServiceTypeConstantDetails; + + /** @var FetchesSegment */ + private $fetchesSegment; + + /** @var FetchesConstant */ + private $fetchesConstant; + + /** @var UpdatesConstant */ + private $updatesConstant; + + /** @var CreatesConstant */ + private $createsConstant; + + /** + * UpdateCustomServiceConstantLogic constructor. + * @param FetchesServiceType $fetchesServiceType + * @param CreatesServiceTypeConstantDetails $createsServiceTypeConstantDetails + * @param FetchesSegment $fetchesSegment + * @param FetchesConstant $fetchesConstant + * @param UpdatesConstant $updatesConstant + * @param CreatesConstant $createsConstant + */ + public function __construct(FetchesServiceType $fetchesServiceType, CreatesServiceTypeConstantDetails $createsServiceTypeConstantDetails, FetchesSegment $fetchesSegment, FetchesConstant $fetchesConstant, UpdatesConstant $updatesConstant, CreatesConstant $createsConstant) + { + $this->fetchesServiceType = $fetchesServiceType; + $this->createsServiceTypeConstantDetails = $createsServiceTypeConstantDetails; + $this->fetchesSegment = $fetchesSegment; + $this->fetchesConstant = $fetchesConstant; + $this->updatesConstant = $updatesConstant; + $this->createsConstant = $createsConstant; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + + $service = $this->fetchesServiceType->execute(['id' => $request->input('id')]); + + $customFields = $request->input('custom_fields'); + + $object = new ServiceDetailObject($service->id, $customFields['bank_id'], $customFields['service_charge'], + $customFields['minimum_charge'], $customFields['tax'], $customFields['po_limit'], $request->input('configurations.currencies'), + $request->input('configurations.active'), true); + + $constantObject = new ConstantObject('Custom Service Type', SegmentConstants::CUSTOM_SERVICE_TYPE, $this->createsServiceTypeConstantDetails->execute($object, true)); + + /** @var Segment $segment */ + $segment = $this->fetchesSegment->execute(['id' => $request->route('id')]); + + try { + + $constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'custom_service_type' => $object->getId()]); + + $this->updatesConstant->execute($constant, $constantObject); + + } catch (ResourceNotFoundException $exception){ + + $constant = $this->createsConstant->execute($segment, $constantObject); + } + + + return $this->resourceResponse(new CustomServiceTypeResource($constant)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeLogic.php b/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeLogic.php new file mode 100644 index 00000000..51b88051 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeLogic.php @@ -0,0 +1,112 @@ + 'Updated Service Type', + 'message' => 'You have successfully updated the Service Type' + ]; + } + + /** @var CanUpdateServiceType */ + private $canUpdateServiceType; + + /** @var UpdatesServiceType */ + private $updatesServiceType; + + /** @var FetchesServiceType */ + private $fetchesServiceType; + + /** @var CreatesServiceTypeConstantDetails */ + private $createsServiceTypeConstantDetails; + + /** @var UpdatesServiceCurrencyRates */ + private $updatesServiceCurrencyRates; + + /** @var UpdatesConstant */ + private $updatesConstant; + + /** @var FetchesConstant */ + private $fetchesConstant; + + + /** + * UpdateServiceTypeLogic constructor. + * @param CanUpdateServiceType $canUpdateServiceType + * @param UpdatesServiceType $updatesServiceType + * @param FetchesServiceType $fetchesServiceType + * @param CreatesServiceTypeConstantDetails $createsServiceTypeConstantDetails + * @param UpdatesServiceCurrencyRates $updatesServiceCurrencyRates + * @param UpdatesConstant $updatesConstant + * @param FetchesConstant $fetchesConstant + */ + public function __construct(CanUpdateServiceType $canUpdateServiceType, UpdatesServiceType $updatesServiceType, FetchesServiceType $fetchesServiceType, CreatesServiceTypeConstantDetails $createsServiceTypeConstantDetails, UpdatesServiceCurrencyRates $updatesServiceCurrencyRates, UpdatesConstant $updatesConstant, FetchesConstant $fetchesConstant) + { + $this->canUpdateServiceType = $canUpdateServiceType; + $this->updatesServiceType = $updatesServiceType; + $this->fetchesServiceType = $fetchesServiceType; + $this->createsServiceTypeConstantDetails = $createsServiceTypeConstantDetails; + $this->updatesServiceCurrencyRates = $updatesServiceCurrencyRates; + $this->updatesConstant = $updatesConstant; + $this->fetchesConstant = $fetchesConstant; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request) : JsonResponse + { + $object = new ServiceTypeObject($request->input('name')); + + $this->canUpdateServiceType->passes($object); + + $service = $this->fetchesServiceType->execute(['id' => $request->route('id')]); + + /** @var ServiceType $service */ + $service = $this->updatesServiceType->execute($service, $object); + + $object = new ServiceDetailObject($service->id, (int) $request->input('configurations.bank_id'), + $request->input('configurations.service_charge'), $request->input('configurations.minimum_charge'), $request->input('configurations.tax'), + $request->input('configurations.po_limit'), $request->input('configurations.currencies'), $request->input('configurations.active'), $request->input('configurations.billable')); + + $this->updatesServiceCurrencyRates->execute($service, $object->getCurrencies()); + + $constantObject = new ConstantObject('Service Type', SegmentConstants::SERVICE_TYPE, $this->createsServiceTypeConstantDetails->execute($object)); + + $this->updatesConstant->execute($this->fetchesConstant->execute(['service_type' => $service->id]), $constantObject); + + return $this->resourceResponse(new ServiceTypeResource($service)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeStatusLogic.php b/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeStatusLogic.php new file mode 100644 index 00000000..f1d75665 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/ControllersLogic/UpdateServiceTypeStatusLogic.php @@ -0,0 +1,59 @@ + 'Update Service Type', + 'message' => 'You have successfully updated a Service Type status' + ]; + } + + /** @var FetchesServiceType */ + private $fetchesServiceType; + + /** @var UpdatesServiceTypeStatus */ + private $updatesServiceTypeStatus; + + /** + * UpdateServiceTypeStatusLogic constructor. + * @param FetchesServiceType $fetchesServiceType + * @param UpdatesServiceTypeStatus $updatesServiceTypeStatus + */ + public function __construct(FetchesServiceType $fetchesServiceType, UpdatesServiceTypeStatus $updatesServiceTypeStatus) + { + $this->fetchesServiceType = $fetchesServiceType; + $this->updatesServiceTypeStatus = $updatesServiceTypeStatus; + } + + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + + + $query = $this->fetchesServiceType->execute(['id' => $request->route('id')]); + + $this->updatesServiceTypeStatus->execute($query, $request->route('status') === 'active' ? ApprovalStatus::APPROVED : ApprovalStatus::SUSPENDED); + + return $this->response([]); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/DataTransferObjects/CustomConfigurationsObject.php b/app/Classes/Modules/ServiceTypes/DataTransferObjects/CustomConfigurationsObject.php new file mode 100644 index 00000000..b14caa8c --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/DataTransferObjects/CustomConfigurationsObject.php @@ -0,0 +1,75 @@ +configurations = $configurations; + $this->customOptions = $customOptions; + } + + /** + * @return SegmentConstant + */ + public function getConfigurations(): SegmentConstant + { + return $this->configurations; + } + + /** + * @return SegmentConstant + */ + public function getCustomOptions(): SegmentConstant + { + return $this->customOptions; + } + + + /** + * @param string $name + * @return mixed + */ + public function getConfigurationValue(string $name) { + return property_exists($this->getCustomOptions()->detail, $name) ? + $this->getCustomOptions()->detail->$name: $this->configurations->detail->$name; + } + + + /** + * @return mixed + */ + public function calculateServiceCharge(){ + return ($this->getConfigurationValue('service_charge')->value * 0.01) > $this->getConfigurationValue('minimum_charge')->value ? + $this->getConfigurationValue('service_charge')->value : $this->getConfigurationValue('minimum_charge')->value; + } + + /** + * @return float + */ + public function calculateTax(){ + return $this->getConfigurationValue('tax')->value * 0.01; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceCurrenciesObject.php b/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceCurrenciesObject.php new file mode 100644 index 00000000..fa32e5dd --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceCurrenciesObject.php @@ -0,0 +1,90 @@ +id = $id; + $this->isActive = $isActive; + $this->maxLimit = $maxLimit; + $this->minLimit = $minLimit; + $this->rates = $rates; + } + + + /** + * @return int + */ + public function getId(): int + { + return $this->id; + } + + /** + * @return bool + */ + public function isActive(): bool + { + return $this->isActive; + } + + /** + * @return array + */ + public function getMaxLimit(): array + { + return $this->maxLimit; + } + + /** + * @return array + */ + public function getMinLimit(): array + { + return $this->minLimit; + } + + + /** + * @return array + */ + public function getRates(): array + { + return array_map(function($rate){ + return new RateObject($rate['selling'], $rate['payment_method']); + }, $this->rates); + } + + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceDetailObject.php b/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceDetailObject.php new file mode 100644 index 00000000..233d1fb3 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceDetailObject.php @@ -0,0 +1,138 @@ +id = $id; + $this->bankId = $bankId; + $this->serviceCharge = $serviceCharge; + $this->minimumCharge = $minimumCharge; + $this->tax = $tax; + $this->poLimit = $poLimit; + $this->currencies = $currencies; + $this->isActive = $isActive; + $this->isBillable = $isBillable; + } + + /** + * @return int + */ + public function getId(): int + { + return $this->id; + } + + /** + * @return int|null + */ + public function getBankId(): ?int + { + return $this->bankId; + } + + /** + * @return array|null + */ + public function getServiceCharge(): ?array + { + return $this->serviceCharge; + } + + /** + * @return array|null + */ + public function getMinimumCharge(): ?array + { + return $this->minimumCharge; + } + + /** + * @return array|null + */ + public function getTax(): ?array + { + return $this->tax; + } + + /** + * @return array|null + */ + public function getPoLimit(): ?array + { + return $this->poLimit; + } + + /** + * @return bool + */ + public function isActive(): bool + { + return $this->isActive; + } + + /** + * @return bool + */ + public function isBillable(): bool + { + return $this->isBillable; + } + + + /** + * @return array|null + */ + public function getCurrencies(): ?array + { + return array_map(function($currency){ + return new ServiceCurrenciesObject($currency['id'], $currency['active'], $currency['maximum_limit'], $currency['minimum_limit'], $currency['rates']); + }, $this->currencies); + } + + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceTypeObject.php b/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceTypeObject.php new file mode 100644 index 00000000..f65b7262 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/DataTransferObjects/ServiceTypeObject.php @@ -0,0 +1,33 @@ +name = $name; + } + + /** + * @return string + */ + public function getName(): string + { + return $this->name; + } + + + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/CreatesServiceType.php b/app/Classes/Modules/ServiceTypes/Services/CreatesServiceType.php new file mode 100644 index 00000000..e9c05e94 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/CreatesServiceType.php @@ -0,0 +1,19 @@ +name = $object->getName(); + + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/CreatesServiceTypeConstantDetails.php b/app/Classes/Modules/ServiceTypes/Services/CreatesServiceTypeConstantDetails.php new file mode 100644 index 00000000..aacf66f1 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/CreatesServiceTypeConstantDetails.php @@ -0,0 +1,141 @@ +mapCurrencies($object->$methodName(), $isCustomSegment); + + continue; + } + + $this->addToConstantDetails($methodName, $this->cleanValue($object->$methodName())); + + } + + return $this->ConstantDetails; + + } + + /** + * @param array $currencies + * @param bool $isCustomSegment + */ + private function mapCurrencies(array $currencies, bool $isCustomSegment){ + + $isEmpty = true; + foreach ($currencies as $currency){ + + if(!$currency->isActive()) { continue; } + + $currencyObject = []; + + + foreach (Helper::getClassMethodsArray(ServiceCurrenciesObject::class) as $methodName){ + + if($methodName === 'isActive') continue; + if($methodName === 'getRates') { + $currencyObject['rates'] = $this->mapRates($currency->$methodName(), $isCustomSegment); + continue; + } + + $value = $this->cleanValue($currency->$methodName()); + + if($this->isAddable($value)) { + $isEmpty = false; + $currencyObject[Helper::getPropertyName($methodName)] = $value; + } + + } + + $this->addToCurrencyDetails($currencyObject); + + } + + if($isEmpty) $this->ConstantDetails['currencies'] = []; + + } + + private function mapRates(array $rates, bool $isCustomSegment){ + + if(!$isCustomSegment) return []; + + $ratesObject = []; + + /** @var RateObject $rate */ + foreach ($rates as $rate){ + + $selling = $this->cleanValue($rate->getSelling()); + + if(!$selling['value']) continue; + + $ratesObject[] = [ + 'payment_type' => $rate->getPaymentMethodType(), + 'payment_method' => PaymentMethodType::PAYMENT_METHODS_ID[$rate->getPaymentMethodType()], + 'selling' => $rate->getSelling() + ]; + + } + return $ratesObject; + + } + + + /** + * @param string $methodName + * @param $value + */ + private function addToConstantDetails(string $methodName, $value){ + $this->isAddable($value) ? $this->ConstantDetails[Helper::getPropertyName($methodName)] = $value : null; + } + + /** + * @param $value + * @return bool + */ + private function isAddable($value){ + + return $value !== '' && $value !== null; + } + + private function cleanValue($value){ + + if(is_array($value)) { + if(array_key_exists('value', $value)) $value['value'] = floatval(str_replace(',', '', $value['value'])); + } + + return $value; + } + + /** + * @param array $value + */ + private function addToCurrencyDetails(array $value){ + $this->ConstantDetails['currencies'][] = $value; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/DeletesServiceType.php b/app/Classes/Modules/ServiceTypes/Services/DeletesServiceType.php new file mode 100644 index 00000000..3cc4d69d --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/DeletesServiceType.php @@ -0,0 +1,15 @@ +handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/FetchesServiceBankConfigurations.php b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceBankConfigurations.php new file mode 100644 index 00000000..28843e4d --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceBankConfigurations.php @@ -0,0 +1,27 @@ +fetchesBank = $fetchesBank; + } + + public function execute(SegmentConstant $constants) + { + return $this->fetchesBank->execute(['id' => $constants->detail->bank_id]); + } +} diff --git a/app/Classes/Modules/ServiceTypes/Services/FetchesServiceConfigurations.php b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceConfigurations.php new file mode 100644 index 00000000..d641d641 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceConfigurations.php @@ -0,0 +1,65 @@ +fetchesConstant = $fetchesConstant; + $this->fetchesServiceCurrenciesConfigurations = $fetchesServiceCurrenciesConfigurations; + $this->fetchesServiceBankConfigurations = $fetchesServiceBankConfigurations; + } + + + public function execute(SegmentConstant $constant, string $type){ + + return array_merge([ + 'active' => (int) $constant->detail->is_active ?? false, + 'billable' => (int) $constant->detail->is_billable ?? false, + 'bank_id' => property_exists($constant->detail, 'bank_id') ? $constant->detail->bank_id : '', + 'bank_info' => property_exists($constant->detail, 'bank_id') ? $this->fetchesServiceBankConfigurations->execute($constant) : '', + 'currencies' => $this->fetchesServiceCurrenciesConfigurations->execute($constant) + ], $this->addConfigurations($constant)->toArray()); + + } + + private function addConfigurations(SegmentConstant $constant) { + + $configurations = collect(['service_charge', 'minimum_charge', 'tax', 'po_limit']); + + return $configurations->flatMap(function($configuration) use($constant) { + if(!property_exists($constant->detail, $configuration)) return []; + + return [$configuration => [ + 'type' => $constant->detail->$configuration->type, + 'value' => $configuration !== 'po_limit' ? $this->covertToDecimal($constant->detail->$configuration->value) : $constant->detail->$configuration->value + ]]; + + }); + + } + + private function covertToDecimal($value){ + return number_format((float)$value, 2, '.', ''); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/FetchesServiceCurrenciesConfigurations.php b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceCurrenciesConfigurations.php new file mode 100644 index 00000000..7d00225a --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceCurrenciesConfigurations.php @@ -0,0 +1,69 @@ +fetchesCurrency = $fetchesCurrency; + } + + public function execute(SegmentConstant $constants){ + + $currencies = array_map(function($configuration) use($constants){ + + $currency = $this->fetchesCurrency->execute(['id' => $configuration->id]); + + if(! $currency->exists()) return []; + + return json_decode(json_encode([ + 'currency_object' => new CurrencyResource($currency), + 'id' => $configuration->id, + 'active' => true, + 'maximum_limit' => [ + 'type' => $configuration->max_limit->type, + 'value' => number_format((float)$configuration->max_limit->value, 2, '.', ',') + ], + 'minimum_limit' => [ + 'type' => $configuration->min_limit->type, + 'value' => number_format((float)$configuration->min_limit->value, 2, '.', ',') + ], + 'rates' => $constants->reference === SegmentConstants::SERVICE_TYPE ? $this->standardRates($currency->rates->where('service_id', $constants->detail->id)) : $configuration->rates + ])); + + }, $constants->detail->currencies); + + return array_filter($currencies); + + } + + private function standardRates(Collection $rates){ + return $rates->map(function($rate){ + return [ + 'payment_method' => PaymentMethodType::PAYMENT_METHODS_ID[$rate->payment_method_type], + 'selling' => [ + 'type' => 'rate', + 'value' => $rate->selling + ] + ]; + }); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/FetchesServiceType.php b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceType.php new file mode 100644 index 00000000..7b5899fa --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/FetchesServiceType.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/ListsServiceTypes.php b/app/Classes/Modules/ServiceTypes/Services/ListsServiceTypes.php new file mode 100644 index 00000000..344d6c4d --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/ListsServiceTypes.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceCurrencyRates.php b/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceCurrencyRates.php new file mode 100644 index 00000000..019d30b4 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceCurrencyRates.php @@ -0,0 +1,55 @@ +createsRateLog = $createsRateLog; + } + + + /** + * @param ServiceType $service + * @param array $currencies + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function execute(ServiceType $service, array $currencies){ + + /** @var ServiceCurrenciesObject $currency */ + foreach ($currencies as $currency) { + + /** @var RateObject $rate */ + foreach ($currency->getRates() as $rate){ + if($rate->getSelling()['value'] > 0){ + /** @var CurrencyRate $query */ + $query = $service->rates()->updateOrCreate([ + 'currency_id' => $currency->getId(), + 'payment_method_type' => $rate->getPaymentMethodType() + ], ['selling' => $rate->getSelling()['value']]); + + $this->createsRateLog->execute($query); + } + + } + + } + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceType.php b/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceType.php new file mode 100644 index 00000000..06bd1e4f --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceType.php @@ -0,0 +1,19 @@ +name = $object->getName(); + + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceTypeStatus.php b/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceTypeStatus.php new file mode 100644 index 00000000..065b218e --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Services/UpdatesServiceTypeStatus.php @@ -0,0 +1,19 @@ +status = $status; + + return $this->handler($model); + + } +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Standards/Rules/CanCreateServiceType.php b/app/Classes/Modules/ServiceTypes/Standards/Rules/CanCreateServiceType.php new file mode 100644 index 00000000..0fb57c32 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Standards/Rules/CanCreateServiceType.php @@ -0,0 +1,57 @@ +serviceTypeValidation = $serviceTypeValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param ServiceTypeObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->serviceTypeValidation->validate($object); + + } + + + /** + * @param ServiceTypeObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Standards/Rules/CanDeleteServiceType.php b/app/Classes/Modules/ServiceTypes/Standards/Rules/CanDeleteServiceType.php new file mode 100644 index 00000000..1a832257 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Standards/Rules/CanDeleteServiceType.php @@ -0,0 +1,43 @@ +serviceTypeValidation = $serviceTypeValidation; + } + + + /** + * @return bool + */ + protected function authorized(): bool + { + // TODO Set Authorization rules + return true; + + } + + /** + * @param ServiceTypeObject $object + * @return bool + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function validators($object): bool + { + return $this->serviceTypeValidation->validate($object); + + } + + + /** + * @param ServiceTypeObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/ServiceTypes/Standards/Validators/ServiceTypeValidation.php b/app/Classes/Modules/ServiceTypes/Standards/Validators/ServiceTypeValidation.php new file mode 100644 index 00000000..86946a39 --- /dev/null +++ b/app/Classes/Modules/ServiceTypes/Standards/Validators/ServiceTypeValidation.php @@ -0,0 +1,39 @@ + $object->getName() + ]; + } + + /** + * @return array + */ + protected function rules(): array { + return [ + 'name' => 'required' + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Announcements/ListAnnouncementsController.php b/app/Http/Controllers/Announcements/ListAnnouncementsController.php index a69dff50..2dcee4d7 100644 --- a/app/Http/Controllers/Announcements/ListAnnouncementsController.php +++ b/app/Http/Controllers/Announcements/ListAnnouncementsController.php @@ -17,4 +17,4 @@ class ListAnnouncementsController { return $logic->execute($request); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Announcements/UpdateAnnouncementController.php b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php index 72431980..8d406632 100644 --- a/app/Http/Controllers/Announcements/UpdateAnnouncementController.php +++ b/app/Http/Controllers/Announcements/UpdateAnnouncementController.php @@ -18,4 +18,3 @@ class UpdateAnnouncementController return $logic->execute($request); } } - diff --git a/app/Http/Controllers/Companies/AddNewMemberController.php b/app/Http/Controllers/Companies/AddNewMemberController.php new file mode 100644 index 00000000..6307ac37 --- /dev/null +++ b/app/Http/Controllers/Companies/AddNewMemberController.php @@ -0,0 +1,22 @@ +execute($request); + } +} diff --git a/app/Http/Controllers/Segments/CreateSegmentController.php b/app/Http/Controllers/Segments/CreateSegmentController.php index 4e748536..2950bdc3 100644 --- a/app/Http/Controllers/Segments/CreateSegmentController.php +++ b/app/Http/Controllers/Segments/CreateSegmentController.php @@ -16,5 +16,4 @@ class CreateSegmentController public function create(Request $request, CreateSegmentLogic $logic): JsonResponse { return $logic->execute($request); } - } \ No newline at end of file diff --git a/app/Http/Controllers/Segments/FetchConstantController.php b/app/Http/Controllers/Segments/FetchConstantController.php new file mode 100644 index 00000000..e3658802 --- /dev/null +++ b/app/Http/Controllers/Segments/FetchConstantController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Segments/FetchSegmentController.php b/app/Http/Controllers/Segments/FetchSegmentController.php new file mode 100644 index 00000000..91961689 --- /dev/null +++ b/app/Http/Controllers/Segments/FetchSegmentController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Segments/ListSegmentsController.php b/app/Http/Controllers/Segments/ListSegmentsController.php new file mode 100644 index 00000000..3dc14ebd --- /dev/null +++ b/app/Http/Controllers/Segments/ListSegmentsController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Segments/UpdateConstantController.php b/app/Http/Controllers/Segments/UpdateConstantController.php new file mode 100644 index 00000000..47def571 --- /dev/null +++ b/app/Http/Controllers/Segments/UpdateConstantController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Segments/UpdateCustomServiceConstantController.php b/app/Http/Controllers/Segments/UpdateCustomServiceConstantController.php new file mode 100644 index 00000000..29bb6655 --- /dev/null +++ b/app/Http/Controllers/Segments/UpdateCustomServiceConstantController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Segments/UpdateSegmentController.php b/app/Http/Controllers/Segments/UpdateSegmentController.php new file mode 100644 index 00000000..51dfe25e --- /dev/null +++ b/app/Http/Controllers/Segments/UpdateSegmentController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Resources/ConstantResource.php b/app/Http/Resources/ConstantResource.php new file mode 100644 index 00000000..c6bcf344 --- /dev/null +++ b/app/Http/Resources/ConstantResource.php @@ -0,0 +1,27 @@ + $this->id, + 'name' => $this->name, + 'reference' => $this->reference, + 'detail' => (App()->make(ConvertsConstantDetailsToResource::class))->execute($this->resource) + ]; + } +} diff --git a/app/Http/Resources/CustomServiceTypeResource.php b/app/Http/Resources/CustomServiceTypeResource.php new file mode 100644 index 00000000..8ec26e47 --- /dev/null +++ b/app/Http/Resources/CustomServiceTypeResource.php @@ -0,0 +1,27 @@ + $this->detail->id, + 'name' => ServiceType::where('id', $this->detail->id)->first()->name, + 'detail' => $this->detail, + 'configurations' => (App()->make(FetchesServiceConfigurations::class))->execute($this->resource, SegmentConstants::CUSTOM_SERVICE_TYPE) + ]; + } +} diff --git a/resources/assets/vue/components/settings/elements/CurrenciesListComponent.vue b/resources/assets/vue/components/settings/elements/CurrenciesListComponent.vue new file mode 100644 index 00000000..3554a8f2 --- /dev/null +++ b/resources/assets/vue/components/settings/elements/CurrenciesListComponent.vue @@ -0,0 +1,218 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/elements/PaymentAttemptComponent.vue b/resources/assets/vue/components/settings/elements/PaymentAttemptComponent.vue new file mode 100644 index 00000000..6266afbe --- /dev/null +++ b/resources/assets/vue/components/settings/elements/PaymentAttemptComponent.vue @@ -0,0 +1,151 @@ + + + + diff --git a/resources/assets/vue/components/settings/elements/UserProfileComponent.vue b/resources/assets/vue/components/settings/elements/UserProfileComponent.vue new file mode 100644 index 00000000..fd42e9b9 --- /dev/null +++ b/resources/assets/vue/components/settings/elements/UserProfileComponent.vue @@ -0,0 +1,67 @@ + + + diff --git a/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue b/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue new file mode 100644 index 00000000..a29f7572 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/AnnouncementFormComponent.vue @@ -0,0 +1,128 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue b/resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue new file mode 100644 index 00000000..5c59b264 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/DeleteAnnouncementFormComponent.vue @@ -0,0 +1,33 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue new file mode 100644 index 00000000..d44cd44f --- /dev/null +++ b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue @@ -0,0 +1,58 @@ + + diff --git a/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue new file mode 100644 index 00000000..95e79174 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/EditUserProfileFullnameFormComponent.vue @@ -0,0 +1,51 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/PaymentAttemptLimitFormComponent.vue b/resources/assets/vue/components/settings/forms/PaymentAttemptLimitFormComponent.vue new file mode 100644 index 00000000..63be0142 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/PaymentAttemptLimitFormComponent.vue @@ -0,0 +1,111 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue b/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue new file mode 100644 index 00000000..1a735522 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/ResetUserPasswordFormComponent.vue @@ -0,0 +1,44 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/SegmentFormComponent.vue b/resources/assets/vue/components/settings/forms/SegmentFormComponent.vue new file mode 100644 index 00000000..c8f114cf --- /dev/null +++ b/resources/assets/vue/components/settings/forms/SegmentFormComponent.vue @@ -0,0 +1,59 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue b/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue new file mode 100644 index 00000000..5405ae6e --- /dev/null +++ b/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue @@ -0,0 +1,293 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue new file mode 100644 index 00000000..002488cc --- /dev/null +++ b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue @@ -0,0 +1,212 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue b/resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue new file mode 100644 index 00000000..aef5b89f --- /dev/null +++ b/resources/assets/vue/components/settings/forms/UpdateServiceStatusFormComponent.vue @@ -0,0 +1,33 @@ + + \ 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 new file mode 100644 index 00000000..20b57e6f --- /dev/null +++ b/resources/assets/vue/components/user/elements/UserComponent.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/user/form/DeleteUserFormComponent.vue b/resources/assets/vue/components/user/form/DeleteUserFormComponent.vue new file mode 100644 index 00000000..cb8af386 --- /dev/null +++ b/resources/assets/vue/components/user/form/DeleteUserFormComponent.vue @@ -0,0 +1,33 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/user/form/UserFormComponent.vue b/resources/assets/vue/components/user/form/UserFormComponent.vue new file mode 100644 index 00000000..5d283733 --- /dev/null +++ b/resources/assets/vue/components/user/form/UserFormComponent.vue @@ -0,0 +1,117 @@ + + \ No newline at end of file diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php new file mode 100644 index 00000000..56da9e67 --- /dev/null +++ b/resources/views/pages/settings.blade.php @@ -0,0 +1,325 @@ +@extends('layouts.base_portal') +@section('inner_content') +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
User Profile
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ Account Settings +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/header.blade.php index d3a15ad2..685d3f27 100644 --- a/resources/views/partials/header.blade.php +++ b/resources/views/partials/header.blade.php @@ -17,6 +17,15 @@
+
diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index c32eb3df..cf62bda3 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -129,6 +129,14 @@
Shipping Queue
+
+
+ +
+
+
Settings
+
+
diff --git a/routes/api.php b/routes/api.php index b53b1b95..c8f886e1 100644 --- a/routes/api.php +++ b/routes/api.php @@ -52,6 +52,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/segment.php'; + require __DIR__ . '/announcement.php'; + Route::get('/report/customer/{marking}/{from?}/{to?}', 'Reports\MonthlyReportController@customerReport')->name('report.customer'); Route::get('/report/sales/{from?}/{to?}', 'Reports\MonthlyReportController@salesReport')->name('report.sales'); Route::get('/report/profit/{model}/{value}/{from?}/{to?}', 'Reports\MonthlyReportController@profitModelReport')->name('report.profit'); diff --git a/routes/company.php b/routes/company.php index 7d898117..55c731b2 100644 --- a/routes/company.php +++ b/routes/company.php @@ -9,6 +9,8 @@ Route::group(['prefix' => 'company', 'as' => 'company.', 'namespace' => 'Compani Route::put('/update/{id}', 'UpdateCompanyController@update')->name('update'); Route::delete('/delete/{id}', 'DeleteCompanyController@destroy')->name('delete'); + Route::post('/team/create', 'AddNewMemberController@create')->name('team.create'); + Route::group(['prefix' => '{id}/segment', 'as' => 'segment.'], function () { Route::post('/assign', 'AssignCompanyToSegmentController@assign')->name('assign'); Route::delete('/detach/{segment_id}', 'RemoveCompanyFromSegmentController@detach')->name('detach'); diff --git a/routes/segment.php b/routes/segment.php index edde7247..1607b0a6 100644 --- a/routes/segment.php +++ b/routes/segment.php @@ -5,4 +5,15 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'segment', 'as' => 'segment.', 'namespace' => 'Segments'], function () { Route::post('/create', 'CreateSegmentController@create')->name('create'); Route::delete('/delete/{id}', 'DeleteSegmentController@destroy')->name('delete'); + Route::get('/{id}/show', 'FetchSegmentController@fetch')->name('show'); + Route::post('/create', 'CreateSegmentController@create')->name('create'); + Route::put('/update/{id}', 'UpdateSegmentController@update')->name('update'); + Route::delete('/delete/{id}', 'DeleteSegmentController@destroy')->name('delete'); + Route::get('/list', 'ListSegmentsController@list')->name('list'); + + Route::group(['prefix' => '{id}/constant', 'as' => 'constant.'], function () { + Route::put('/service/update', 'UpdateCustomServiceConstantController@update')->name('service.update'); + Route::put('/update', 'UpdateConstantController@update')->name('update'); + Route::get('/show/{reference}', 'FetchConstantController@fetch')->name('show'); + }); }); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index c7654a08..0d789d35 100644 --- a/routes/web.php +++ b/routes/web.php @@ -187,3 +187,6 @@ Route::get('/yd', function (){ Route::get('/export/customer-latest-order-date/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export'); Route::get('/export/packing-list/{id}', 'Exports\ExportContainerPackingListController@export')->name('container.packaging_list.export'); +Route::get('/settings', function () { + return view('pages.settings'); +})->name('settings'); From 556c9352c8f4a9c62ab1d505a06faf3158c7cd8f Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sat, 12 Feb 2022 11:35:12 +0800 Subject: [PATCH 23/61] shipping invoice --- .../General/Interfaces/Transactionable.php | 13 ++ .../Services/FetchesSegmentConstant.php | 34 +++ .../CreateShippingInvoiceTransactionLogic.php | 212 ++++++++++-------- .../DataTransferObjects/TransactionObject.php | 19 +- .../Services/CreatesTransaction.php | 8 +- app/Models/PackingList.php | 12 +- app/Models/SegmentConstant.php | 17 +- .../seeders/SegmentConstantsTableSeeder.php | 21 +- database/seeders/SegmentsTableSeeder.php | 20 +- 9 files changed, 226 insertions(+), 130 deletions(-) create mode 100644 app/Classes/General/Interfaces/Transactionable.php create mode 100644 app/Classes/Modules/SegmentConstants/Services/FetchesSegmentConstant.php diff --git a/app/Classes/General/Interfaces/Transactionable.php b/app/Classes/General/Interfaces/Transactionable.php new file mode 100644 index 00000000..174cb48d --- /dev/null +++ b/app/Classes/General/Interfaces/Transactionable.php @@ -0,0 +1,13 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php index e891fddd..b6edcc5f 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php @@ -5,33 +5,32 @@ namespace App\Classes\Modules\Transactions\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\PackingLists\Services\FetchesPackingList; - - - - -use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; -use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; -use App\Classes\Modules\Transactions\Services\CreatesTransaction; -use App\Classes\Modules\Transactions\Services\FetchesTransaction; +use App\Classes\Modules\SegmentConstants\Services\FetchesSegmentConstant; use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber; -use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; -use App\Classes\Modules\Documents\Services\CreatesDocument; -use App\Classes\Modules\Documents\Services\CreatesFiles; -use App\Classes\ValueObjects\Constants\ApprovalStatus; -use App\Classes\ValueObjects\Constants\PaymentMethodType; +use App\Classes\Modules\Transactions\Services\CreatesTransaction; +use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; +use App\Classes\ValueObjects\Constants\OrderRoleTypes; use App\Classes\ValueObjects\Constants\TransactionType; -use App\Classes\ValueObjects\Constants\DocumentType; -use App\Models\Document; -use App\Models\Transaction; -use Barryvdh\DomPDF\PDF; -use Carbon\Carbon; +use App\Classes\ValueObjects\Constants\PaymentMethodType; +use App\Classes\ValueObjects\Constants\ApprovalStatus; + +// use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject; +// use App\Classes\Modules\Transactions\Services\FetchesTransaction; +// use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus; +// use App\Classes\Modules\Documents\Services\CreatesDocument; +// use App\Classes\Modules\Documents\Services\CreatesFiles; +// use App\Classes\ValueObjects\Constants\DocumentType; +// use App\Models\Document; +// use App\Models\Transaction; +// use Barryvdh\DomPDF\PDF; +// use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; -use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf; -use Meneses\LaravelMpdf\Facades\LaravelMpdf; +// use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf; +// use Meneses\LaravelMpdf\Facades\LaravelMpdf; class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic { @@ -50,62 +49,57 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic /** @var FetchesPackingList */ private $fetchesPackingList; - /** @var FetchesTransaction */ - private $fetchesTransaction; - - /** @var UpdatesTransactionStatus */ - private $updatesTransactionStatus; - - /** @var CreatesTransaction */ - private $createsTransaction; - - /** @var CreatesDocument */ - private $createsDocument; - - /** @var CreatesFiles */ - private $createsFile; + /** @var FetchesSegmentConstant */ + private $fetchesSegmentConstant; /** @var GeneratesTransactionBillNumber */ private $generatesTransactionBillNumber; - /** @var PDF */ - private $pdf; + /** @var CreatesTransaction */ + private $createsTransaction; + + // /** @var FetchesTransaction */ + // private $fetchesTransaction; + // /** @var UpdatesTransactionStatus */ + // private $updatesTransactionStatus; + // /** @var CreatesDocument */ + // private $createsDocument; + // /** @var CreatesFiles */ + // private $createsFile; + // /** @var PDF */ + // private $pdf; /** * CreateSupplierTransactionLogic constructor. * @param FetchesPackingList $fetchesPackingList + * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber + * @param CreatesTransaction $createsTransaction * @param FetchesTransaction $fetchesTransaction * @param UpdatesTransactionStatus $updatesTransactionStatus - * @param CreatesTransaction $createsTransaction - * @param GeneratesTransactionBillNumber $generatesTransactionBillNumber * @param PDF $pdf */ public function __construct( FetchesPackingList $fetchesPackingList, - - - - FetchesTransaction $fetchesTransaction, - UpdatesTransactionStatus $updatesTransactionStatus, - CreatesTransaction $createsTransaction, - CreatesDocument $createsDocument, - CreatesFiles $createsFile, + FetchesSegmentConstant $fetchesSegmentConstant, GeneratesTransactionBillNumber $generatesTransactionBillNumber, - PDF $pdf + CreatesTransaction $createsTransaction + + // UpdatesTransactionStatus $updatesTransactionStatus, + // CreatesDocument $createsDocument, + // CreatesFiles $createsFile, + // PDF $pdf ) { $this->fetchesPackingList = $fetchesPackingList; - - - - $this->fetchesTransaction = $fetchesTransaction; - $this->updatesTransactionStatus = $updatesTransactionStatus; - $this->createsTransaction = $createsTransaction; - $this->createsDocument = $createsDocument; - $this->createsFile = $createsFile; + $this->fetchesSegmentConstant = $fetchesSegmentConstant; $this->generatesTransactionBillNumber = $generatesTransactionBillNumber; - $this->pdf = $pdf; + $this->createsTransaction = $createsTransaction; + + // $this->updatesTransactionStatus = $updatesTransactionStatus; + // $this->createsDocument = $createsDocument; + // $this->createsFile = $createsFile; + // $this->pdf = $pdf; } public function logic(Request $request) : JsonResponse @@ -116,60 +110,82 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity); }); - dd($packages); + $order = $packing_list->owner()->first(); + $address = $order->addresses()->first(); - Transaction::select(DB::raw('sum(jumlah * harga) as total'))->get(); + $base_price_constant = $this->fetchesSegmentConstant->execute(['id' => 1]); + $warehouse_rate_constant = $this->fetchesSegmentConstant->execute(['id' => 2]); + $state_rate_constant = $this->fetchesSegmentConstant->execute(['id' => 3]); + $center_postcode_constant = $this->fetchesSegmentConstant->execute(['id' => 4]); + $outstation_postcode_constant = $this->fetchesSegmentConstant->execute(['id' => 5]); + $base_price = 0; + $warehouse_rate = 0; + $state_rate = 0; + $state_select = []; + $with_out = false; - price_per_cbm = base_price + customer_rate + warehouse_rate + state_rate + outstation_rate + if ($base_price_constant) { + $base_price = $base_price_constant->value->price; + } -price_cbm = 570 myr + if ($warehouse_rate_constant) { + $package_warehouse = $order->OrderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->reference; + foreach ($warehouse_rate_constant->value->config as $key_warehouse => $row_warehouse) { + if ($row_warehouse->warehouse_name == $package_warehouse) { + $warehouse_rate = $row_warehouse->rate; + } + } + } -total cbm * price_cbm = 896.61 + if ($state_rate_constant) { + foreach ($state_rate_constant->value->config as $key_state => $row_state) { + if ($row_state->status_id == $address->state_id) { + $state_select = $row_state; + } + } + } -price_cbm, invoice total + if ($outstation_postcode_constant) { + foreach ($outstation_postcode_constant->value as $key_out => $row_out) { -create transaction invoice -create transaction details + if($row_out == $address->postcode) { + $with_out = true; + } + } + } -shipping service (570 per cbm * 1.57 cbm) + if (!empty($state_select)) { + $state_rate = $state_select->rate; + if ($with_out) { + $state_rate = $state_select->rate + $state_select->outstation_rate; + } + } - // dd($packing_list); + $price_cbm = $base_price + $warehouse_rate + $state_rate; + $total_cbm = $price_cbm * $cbm; + $billNumber = $this->generatesTransactionBillNumber->execute('SHIP-'); - // $rate = $request->input('rate'); + $object = new TransactionObject( + $billNumber, + TransactionType::SHIPPING_INVOICE, + 1, + $order->company_module_id, + 1, + PaymentMethodType::CASH, + $total_cbm, + $total_cbm, + 1, + 1, + 0, + 0, + 0, + null, + ApprovalStatus::PENDING_SUBMISSION + ); - // $transactions = collect(); - - // foreach($request->input('payments') as $payment){ - - // /** @var Transaction $payment */ - // $payment = $this->fetchesTransaction->execute(['id' => $payment['id']]); - // $this->updatesTransactionStatus->execute($payment, ApprovalStatus::COMPLETED); - // $billNumber = $this->generatesTransactionBillNumber->execute('SPLR-'); - // $object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1, - // $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, - // $payment->original_amount * (1 / $rate), $payment->original_amount, 1, $payment->original_currency_id, - // $rate, 0, 0, null, ApprovalStatus::APPROVED); - - // $transactions[] = $this->createsTransaction->execute($payment->booking, $object); - // } - - // $pdf = LaravelMpdf::loadView('pages.pdfs.currency_vendor_order', ['transactions' => $transactions, 'supplier' => $supplier]); - - // $path = Str::studly($supplier->name).'_'.Carbon::now()->format('Y_m_d_h_s_i').'.pdf'; - - // $object = new DocumentObject( - // DocumentType::CURRENCY_VENDOR_ORDER, - // [chunk_split('data:application/pdf;base64,'.base64_encode($pdf->output()))], - // '', - // ApprovalStatus::COMPLETED, - // 'currency_vendor_order' - // ); - - // /** @var Document $document */ - // $document = $this->createsDocument->execute($supplier, $object); - // $this->createsFile->execute($document, $object); + $transactions = $this->createsTransaction->execute($packing_list, $object); return $this->response([]); } diff --git a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php index 8fcf4ece..b4153751 100644 --- a/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php +++ b/app/Classes/Modules/Transactions/DataTransferObjects/TransactionObject.php @@ -76,7 +76,24 @@ class TransactionObject implements DataTransferObject * @param int|null $status * @param array|null $details */ - public function __construct(string $billNo, string $transactionType, int $issuer, int $receiver, int $recipientBankAccountId, int $paymentMethod, float $amount, float $originalAmount, int $currencyId, int $originalCurrencyId, float $currencyRate, float $tax, float $serviceCharge, ?Carbon $expiresOn, ?int $status = ApprovalStatus::PENDING_SUBMISSION, ?array $details = []) + public function __construct( + string $billNo, + string $transactionType, + int $issuer, + int $receiver, + int $recipientBankAccountId, + int $paymentMethod, + float $amount, + float $originalAmount, + int $currencyId, + int $originalCurrencyId, + float $currencyRate, + float $tax, + float $serviceCharge, + ?Carbon $expiresOn, + ?int $status = ApprovalStatus::PENDING_SUBMISSION, + ?array $details = [] + ) { $this->billNo = $billNo; $this->transactionType = $transactionType; diff --git a/app/Classes/Modules/Transactions/Services/CreatesTransaction.php b/app/Classes/Modules/Transactions/Services/CreatesTransaction.php index ddebf0d5..18d57727 100644 --- a/app/Classes/Modules/Transactions/Services/CreatesTransaction.php +++ b/app/Classes/Modules/Transactions/Services/CreatesTransaction.php @@ -5,7 +5,7 @@ namespace App\Classes\Modules\Transactions\Services; use App\Classes\General\Eloquent\AbstractUpdateRecord; use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord; use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject; -use App\Models\Booking; +use App\Models\PackingList; use App\Models\Transaction; class CreatesTransaction extends AbstractUpdateRelationshipRecord @@ -15,7 +15,7 @@ class CreatesTransaction extends AbstractUpdateRelationshipRecord * @return \Illuminate\Database\Eloquent\Model * @throws \App\Classes\Exceptions\MalformedRequestException */ - public function execute(Booking $booking, TransactionObject $object) { + public function execute(PackingList $packing_list, TransactionObject $object) { $model = new Transaction(); $model->bill_no = $object->getBillNo(); $model->type = $object->getTransactionType(); @@ -33,8 +33,6 @@ class CreatesTransaction extends AbstractUpdateRelationshipRecord $model->expires_on = $object->getExpiresOn(); $model->status = $object->getStatus(); - - return $this->handler($booking->transactions(), $model); - + return $this->handler($packing_list->transactions(), $model); } } \ No newline at end of file diff --git a/app/Models/PackingList.php b/app/Models/PackingList.php index 7ef5910a..a6fd95e5 100644 --- a/app/Models/PackingList.php +++ b/app/Models/PackingList.php @@ -5,6 +5,8 @@ namespace App\Models; use App\Classes\General\Interfaces\Steppable; use App\Classes\General\Interfaces\Transportable; use App\Classes\General\Interfaces\Packable; +use App\Classes\General\Interfaces\Transactionable; + use App\Classes\ValueObjects\Constants\ApprovalStatus; use Carbon\Carbon; use Illuminate\Database\Eloquent\Relations\BelongsToMany; @@ -16,7 +18,7 @@ use Staudenmeir\EloquentHasManyDeep\HasManyDeep; use Staudenmeir\EloquentHasManyDeep\HasRelationships; use Staudenmeir\EloquentHasManyDeep\HasTableAlias; -class PackingList extends AbstractModel implements Transportable, Steppable, Packable +class PackingList extends AbstractModel implements Transportable, Steppable, Packable, Transactionable { use HasTableAlias; use HasRelationships; @@ -55,6 +57,14 @@ class PackingList extends AbstractModel implements Transportable, Steppable, Pac return $this->hasMany(Package::class, 'packing_list_id'); } + /** + * @return MorphMany + */ + public function transactions(): MorphMany + { + return $this->MorphMany(Transaction::class, 'owner'); + } + /** * @return HasManyDeep */ diff --git a/app/Models/SegmentConstant.php b/app/Models/SegmentConstant.php index 08c8b2af..42cadb7d 100644 --- a/app/Models/SegmentConstant.php +++ b/app/Models/SegmentConstant.php @@ -15,12 +15,8 @@ use Illuminate\Database\Eloquent\SoftDeletes; */ class SegmentConstant extends AbstractModel { - use SoftDeletes; - protected $table = 'segment_constants'; - protected $dates = ['deleted_at']; - public function getDetailAttribute($value) { return $value ? json_decode($value) : []; @@ -34,14 +30,9 @@ class SegmentConstant extends AbstractModel return $this->BelongsTo(Segment::class, 'segment_id', 'id'); } - /** - * @return mixed - */ - public function service(){ - return $this->hasOne(ServiceType::class, 'id', 'detail->id') - ->whereIn('reference', [SegmentConstants::SERVICE_TYPE, SegmentConstants::CUSTOM_SERVICE_TYPE]); + public function getValueAttribute($value) + { + $value = $value ? json_decode($value) : []; + return $value; } - - - } diff --git a/database/seeders/SegmentConstantsTableSeeder.php b/database/seeders/SegmentConstantsTableSeeder.php index f69660cf..2fc68bf0 100644 --- a/database/seeders/SegmentConstantsTableSeeder.php +++ b/database/seeders/SegmentConstantsTableSeeder.php @@ -13,7 +13,7 @@ class SegmentConstantsTableSeeder extends Seeder { DB::beginTransaction(); - DB::table('segment_constants')->insert( + DB::table('segment_constants')->insert([ [ 'id' => 1, 'segment_id' => 1, @@ -43,7 +43,6 @@ class SegmentConstantsTableSeeder extends Seeder 'rate' => 10 ], ] - ]), ], [ @@ -56,66 +55,82 @@ class SegmentConstantsTableSeeder extends Seeder [ 'status_id' => 1, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 2, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 3, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 4, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 5, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 6, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 7, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 8, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 9, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 10, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 11, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 12, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 13, 'rate' => 20, + 'outstation_rate' => 2 ], [ 'status_id' => 14, 'rate' => 20, + 'outstation_rate' => 2 ], [ 'status_id' => 15, 'rate' => 10, + 'outstation_rate' => 2 ], [ 'status_id' => 16, 'rate' => 10, + 'outstation_rate' => 2 ] ] ]), @@ -141,7 +156,7 @@ class SegmentConstantsTableSeeder extends Seeder 'price' => 15, ]), ], - ); + ]); DB::commit(); } } diff --git a/database/seeders/SegmentsTableSeeder.php b/database/seeders/SegmentsTableSeeder.php index e6dd2be2..72545884 100644 --- a/database/seeders/SegmentsTableSeeder.php +++ b/database/seeders/SegmentsTableSeeder.php @@ -11,15 +11,17 @@ class SegmentsTableSeeder extends Seeder { DB::table('segments')->insert( [ - 'id' => 1, - 'company_module_id' => 1, - 'name' => 'Default Segment', - ], - [ - 'id' => 2, - 'company_module_id' => 2, - 'name' => 'Normal Member', - ], + [ + 'id' => 1, + 'company_module_id' => 1, + 'name' => 'Default Segment', + ], + [ + 'id' => 2, + 'company_module_id' => 2, + 'name' => 'Normal Member', + ], + ] ); } } From c040dfe2c3040073f81683f2e97da44a30108939 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 14 Feb 2022 00:08:37 +0800 Subject: [PATCH 24/61] update null_order_packing_list_ul --- .../General/Eloquent/Filters/OwneId.php | 20 ++++++ .../AssignPackingListOrderLogic.php | 2 +- .../ListPackingListsLogic.php | 18 +----- .../UnclaimedPackinglistComponent.vue | 62 +++++++++++++++++++ .../forms/ClaimPackinglistFormComponent.vue | 58 +++++++++++++++++ .../pages/unclaimed_packinglist.blade.php | 8 +++ routes/packing_list.php | 2 +- routes/web.php | 4 ++ 8 files changed, 157 insertions(+), 17 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/OwneId.php create mode 100644 resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue create mode 100644 resources/assets/vue/components/orders/forms/ClaimPackinglistFormComponent.vue create mode 100644 resources/views/pages/unclaimed_packinglist.blade.php diff --git a/app/Classes/General/Eloquent/Filters/OwneId.php b/app/Classes/General/Eloquent/Filters/OwneId.php new file mode 100644 index 00000000..eac7e32d --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/OwneId.php @@ -0,0 +1,20 @@ +where('owner_id', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php index 15b852f6..64683721 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php @@ -106,7 +106,7 @@ class AssignPackingListOrderLogic extends AbstractControllerLogic 'status' => ApprovalStatus::REJECTED ]); - $order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]); + $order = $this->fetchesOrder->execute(['reference' => $request->route('reference')]); $warehouse_packing_list = $this->updatesPackingListOwner->execute($warehouse_packing_list, $order); diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php index 7d4a9531..b9e3142d 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/ListPackingListsLogic.php @@ -50,23 +50,11 @@ class ListPackingListsLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { - try { + $this->canListPackingLists->passes(); - $this->canListPackingLists->passes(); - - $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); - - if ($request->input('null_order')) { - return $this->collectionResponse(PackingListNullOrderResource::collection($query)); - } - else { - return $this->collectionResponse(PackingListResource::collection($query)); - } - - } catch (\Exception $exception){ - throw new ErrorException($exception->getMessage(), $exception->getCode()); - } + $query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters'))); + return $this->collectionResponse(PackingListResource::collection($query)); } } diff --git a/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue b/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue new file mode 100644 index 00000000..f6dd6d47 --- /dev/null +++ b/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue @@ -0,0 +1,62 @@ + + diff --git a/resources/assets/vue/components/orders/forms/ClaimPackinglistFormComponent.vue b/resources/assets/vue/components/orders/forms/ClaimPackinglistFormComponent.vue new file mode 100644 index 00000000..afa6384c --- /dev/null +++ b/resources/assets/vue/components/orders/forms/ClaimPackinglistFormComponent.vue @@ -0,0 +1,58 @@ + + \ No newline at end of file diff --git a/resources/views/pages/unclaimed_packinglist.blade.php b/resources/views/pages/unclaimed_packinglist.blade.php new file mode 100644 index 00000000..4971569e --- /dev/null +++ b/resources/views/pages/unclaimed_packinglist.blade.php @@ -0,0 +1,8 @@ +@extends('layouts.base_portal') +@section('inner_content') +
+
+ +
+
+@endsection \ No newline at end of file diff --git a/routes/packing_list.php b/routes/packing_list.php index 475613dd..fe889ddb 100644 --- a/routes/packing_list.php +++ b/routes/packing_list.php @@ -17,7 +17,7 @@ Route::group(['namespace' => 'PackingLists', 'as' => 'packing_list.', 'prefix' = Route::put('/update-drop-date/{id}', 'UpdateDropDatePackingListController@update')->name('update_drop_date'); Route::put('/complete/{id}', 'CompletePackingListController@complete')->name('complete'); Route::put('/assign-remark/{id}', 'AssignPackingListRemarkController@create')->name('assign.remark'); - Route::put('/assign-order/{id}', 'AssignPackingListOrderController@assign')->name('assign.order'); + Route::put('/assign-order/{id}/{reference}', 'AssignPackingListOrderController@assign')->name('assign.order'); Route::group(['namespace' => 'Containers', 'prefix' => 'container', 'as' => 'container.'], function () { diff --git a/routes/web.php b/routes/web.php index 6b9ae1d0..118661c3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -73,6 +73,10 @@ Route::get('/warehouse-list', function () { return view('pages.warehouse_list'); })->name('warehouse.list'); +Route::get('/unclaimed-packinglist', function () { + return view('pages.unclaimed_packinglist'); +})->name('warehouse.list'); + Route::get('/containers', function () { return view('pages.containers'); })->name('containers'); From 595df401c255335e2424b060f79f036af6aee3c6 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 14 Feb 2022 12:16:42 +0800 Subject: [PATCH 25/61] update ui --- .../UnclaimedPackinglistComponent.vue | 68 +++++++------------ .../pages/unclaimed_packinglist.blade.php | 7 +- 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue b/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue index f6dd6d47..eef618d7 100644 --- a/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue +++ b/resources/assets/vue/components/orders/elements/UnclaimedPackinglistComponent.vue @@ -1,41 +1,37 @@
From 22ce6b81566ebafcf8e0bb2588843c7ff79a03c5 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 15 Feb 2022 17:04:50 +0800 Subject: [PATCH 28/61] Update admin setting ui icons --- resources/views/pages/settings.blade.php | 25 +++++------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index 23e65388..c82482dd 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -14,10 +14,7 @@
- +
User Profile
@@ -38,10 +35,7 @@
- +
Team
@@ -61,10 +55,7 @@
- +
Service Setup
@@ -84,10 +75,7 @@
- +
Custom Segments
@@ -107,10 +95,7 @@
- +
Announcements
From 6f30884a8cefb541a1830fa2046a7dcb36640442 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sun, 20 Feb 2022 16:38:46 +0800 Subject: [PATCH 29/61] add page orders table --- .../assets/sass/modules/_typography.scss | 4 + .../sections/OrdersTableSectionComponent.vue | 290 ++++++++++++++++++ resources/views/emails/layout/base.blade.php | 3 + resources/views/pages/orders/table.blade.php | 13 + routes/web.php | 4 + 5 files changed, 314 insertions(+) create mode 100644 resources/assets/vue/components/orders/sections/OrdersTableSectionComponent.vue create mode 100644 resources/views/pages/orders/table.blade.php diff --git a/resources/assets/sass/modules/_typography.scss b/resources/assets/sass/modules/_typography.scss index dbc80e6f..a22dc2fc 100644 --- a/resources/assets/sass/modules/_typography.scss +++ b/resources/assets/sass/modules/_typography.scss @@ -643,6 +643,10 @@ hr{ cursor: pointer !important; } +.not-allowed { + cursor: not-allowed !important; +} + /* Labels ------------------------------------ */ diff --git a/resources/assets/vue/components/orders/sections/OrdersTableSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrdersTableSectionComponent.vue new file mode 100644 index 00000000..0175534f --- /dev/null +++ b/resources/assets/vue/components/orders/sections/OrdersTableSectionComponent.vue @@ -0,0 +1,290 @@ + + diff --git a/resources/views/emails/layout/base.blade.php b/resources/views/emails/layout/base.blade.php index 0f58c396..ec9a6f85 100644 --- a/resources/views/emails/layout/base.blade.php +++ b/resources/views/emails/layout/base.blade.php @@ -82,6 +82,9 @@ .pointer { cursor: pointer; } + .not-allowed { + cursor: not-allowed; + } .text-complete { color: #009add; } diff --git a/resources/views/pages/orders/table.blade.php b/resources/views/pages/orders/table.blade.php new file mode 100644 index 00000000..9f42cef6 --- /dev/null +++ b/resources/views/pages/orders/table.blade.php @@ -0,0 +1,13 @@ + + +@extends('layouts.base_portal') +@section('inner_content') + {{--
--}} + {{--
--}} + {{--
--}} + {{--
Refresh Orders
--}} + {{--
--}} + {{--
--}} + {{----}} + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index f01fc716..2f5f245c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -63,6 +63,10 @@ Route::get('/orders', function () { return view('pages.orders.index'); })->name('orders'); +Route::get('/orders-table', function () { + return view('pages.orders.table'); +})->name('ordersTable'); + Route::get('/order/show/{order_number}', function ($orderNumber) { return view('pages.orders.profile', ['id' => $orderNumber]); })->name('order.show'); From 994d7ab4d93654d43992c1a8a04e686ecf3e2696 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 21 Feb 2022 14:42:10 +0800 Subject: [PATCH 30/61] update list postcode component --- .../vue/components/settings/elements/ListPostcodeComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/settings/elements/ListPostcodeComponent.vue b/resources/assets/vue/components/settings/elements/ListPostcodeComponent.vue index 101eca6a..a23f3a7c 100644 --- a/resources/assets/vue/components/settings/elements/ListPostcodeComponent.vue +++ b/resources/assets/vue/components/settings/elements/ListPostcodeComponent.vue @@ -40,7 +40,7 @@ export default { props: { data: { - type: Object, + type: String, required: false }, section: { From 0496851286fae26542a4700971f15c49c4f34653 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 21 Feb 2022 16:11:39 +0800 Subject: [PATCH 31/61] update settings add state charges TAB --- .../ControllersLogic/ListStatesLogic.php | 54 +++++++++++++ .../Addresses/Services/ListsStates.php | 33 ++++++++ .../Addresses/ListStatesController.php | 20 +++++ app/Http/Resources/StateResource.php | 23 ++++++ app/Models/State.php | 8 +- .../elements/StatesChargesComponent.vue | 77 +++++++++++++++++++ .../forms/EditStateChargesFormComponent.vue | 62 +++++++++++++++ .../user/elements/UserComponent.vue | 2 +- resources/views/pages/settings.blade.php | 45 +++++++++++ routes/address.php | 2 + 10 files changed, 321 insertions(+), 5 deletions(-) create mode 100644 app/Classes/Modules/Addresses/ControllersLogic/ListStatesLogic.php create mode 100644 app/Classes/Modules/Addresses/Services/ListsStates.php create mode 100644 app/Http/Controllers/Addresses/ListStatesController.php create mode 100644 app/Http/Resources/StateResource.php create mode 100644 resources/assets/vue/components/settings/elements/StatesChargesComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue diff --git a/app/Classes/Modules/Addresses/ControllersLogic/ListStatesLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/ListStatesLogic.php new file mode 100644 index 00000000..3d6c484f --- /dev/null +++ b/app/Classes/Modules/Addresses/ControllersLogic/ListStatesLogic.php @@ -0,0 +1,54 @@ + 'Retrieved Addresses', + 'message' => 'You have successfully retrieved a list of Addresses' + ]; + } + + /** @var ListsStates */ + private $listStates; + + /** + * ListStatesLogic constructor. + * @param ListsStates $listStates + */ + public function __construct(ListsStates $listStates) + { + $this->listStates = $listStates; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + $query = $this->listStates->execute($this->listStates->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(StateResource::collection($query)); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/ListsStates.php b/app/Classes/Modules/Addresses/Services/ListsStates.php new file mode 100644 index 00000000..5591b823 --- /dev/null +++ b/app/Classes/Modules/Addresses/Services/ListsStates.php @@ -0,0 +1,33 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Addresses/ListStatesController.php b/app/Http/Controllers/Addresses/ListStatesController.php new file mode 100644 index 00000000..dee2d1c6 --- /dev/null +++ b/app/Http/Controllers/Addresses/ListStatesController.php @@ -0,0 +1,20 @@ +execute($request); + } + +} \ No newline at end of file diff --git a/app/Http/Resources/StateResource.php b/app/Http/Resources/StateResource.php new file mode 100644 index 00000000..b9d71dae --- /dev/null +++ b/app/Http/Resources/StateResource.php @@ -0,0 +1,23 @@ + $this->id, + 'name' => $this->name, + 'country' => $this->country, + ]; + } +} diff --git a/app/Models/State.php b/app/Models/State.php index fa920454..3f7036ac 100644 --- a/app/Models/State.php +++ b/app/Models/State.php @@ -2,7 +2,7 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\HasOne; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; /** @@ -21,10 +21,10 @@ class State extends AbstractModel protected $dates = ['deleted_at']; /** - * @return HasOne + * @return BelongsTo */ - public function country(): HasOne + public function country(): BelongsTo { - return $this->hasOne(Country::class, 'country_id', 'id'); + return $this->belongsTo(Country::class, 'country_id', 'id'); } } diff --git a/resources/assets/vue/components/settings/elements/StatesChargesComponent.vue b/resources/assets/vue/components/settings/elements/StatesChargesComponent.vue new file mode 100644 index 00000000..9e58b60d --- /dev/null +++ b/resources/assets/vue/components/settings/elements/StatesChargesComponent.vue @@ -0,0 +1,77 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue b/resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue new file mode 100644 index 00000000..ee32bf93 --- /dev/null +++ b/resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue @@ -0,0 +1,62 @@ + + \ 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 20b57e6f..601c0097 100644 --- a/resources/assets/vue/components/user/elements/UserComponent.vue +++ b/resources/assets/vue/components/user/elements/UserComponent.vue @@ -4,7 +4,7 @@
- +
diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index c82482dd..c23c31b5 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -127,6 +127,26 @@
+
+
+
+
+
+
+
+
+ +
+
+
States Charges
+
+
+
+
+
+
+
+
@@ -347,6 +367,31 @@
+
+
+ +
+
+
+
+
+ State Charges +
+
+
+
+
+ + + +
+
+
+
+
+
diff --git a/routes/address.php b/routes/address.php index 5b3c6a1b..96cfe8ab 100644 --- a/routes/address.php +++ b/routes/address.php @@ -11,6 +11,8 @@ Route::group(['prefix' => 'address', 'as' => 'address.', 'namespace' => 'Address Route::get('district/list', 'ListDistrictsController@list')->name('district.list'); + Route::get('state/list', 'ListStatesController@list')->name('state.list'); + Route::post('/create', 'CreateAddressController@create')->name('create'); Route::put('/update/{id}', 'UpdateAddressController@update')->name('update'); From fa29de775c0fc818ff15695df34d85ba02794f62 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 21 Feb 2022 20:00:09 +0800 Subject: [PATCH 32/61] update bugs --- .../components/settings/forms/EditStateChargesFormComponent.vue | 2 +- routes/web.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue b/resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue index ee32bf93..ac4052c6 100644 --- a/resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/EditStateChargesFormComponent.vue @@ -37,7 +37,7 @@ export default { props: { data: { - type: String, + type: Object, required: false }, section: { diff --git a/routes/web.php b/routes/web.php index 2f5f245c..e29f6333 100644 --- a/routes/web.php +++ b/routes/web.php @@ -81,7 +81,7 @@ Route::get('/warehouse-list', function () { Route::get('/unclaimed-packinglist', function () { return view('pages.unclaimed_packinglist'); -})->name('warehouse.list'); +})->name('unclaimed-packinglist.list'); Route::get('/containers', function () { return view('pages.containers'); From b5b2ba59af8e18c1f0c731730efced8ab915e7dd Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 21 Feb 2022 20:34:25 +0800 Subject: [PATCH 33/61] add warehouse charges in settings --- app/Http/Resources/CompanyResource.php | 6 +- .../elements/WarehouseChargesComponent.vue | 65 +++++++++++++++++++ .../EditWarehouseChargesFormComponent.vue | 54 +++++++++++++++ resources/views/pages/settings.blade.php | 45 +++++++++++++ 4 files changed, 167 insertions(+), 3 deletions(-) create mode 100644 resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue create mode 100644 resources/assets/vue/components/settings/forms/EditWarehouseChargesFormComponent.vue diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index 38459a35..6d16651b 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -28,10 +28,10 @@ class CompanyResource extends JsonResource 'business_type' => (int) $this->business_type, 'status' => (int) $this->status, 'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())), - 'employee' => new UserResource($companyModule->employees()->first()), + 'employee' => (int) $this->business_type == 1 ? new UserResource($companyModule->employees()->first()) : '', 'company_module' => new CompanyModuleResource($companyModule), - 'last_order' => new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null), - 'order_count' => $this->orders()->count(), + 'last_order' => (int) $this->business_type == 1 ? new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null) : '', + 'order_count' => (int) $this->business_type == 1 ? $this->orders()->count() : '', 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED])->first()), 'created_at' => $this->created_at->format('d-m-Y') diff --git a/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue new file mode 100644 index 00000000..59611841 --- /dev/null +++ b/resources/assets/vue/components/settings/elements/WarehouseChargesComponent.vue @@ -0,0 +1,65 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/settings/forms/EditWarehouseChargesFormComponent.vue b/resources/assets/vue/components/settings/forms/EditWarehouseChargesFormComponent.vue new file mode 100644 index 00000000..a078576f --- /dev/null +++ b/resources/assets/vue/components/settings/forms/EditWarehouseChargesFormComponent.vue @@ -0,0 +1,54 @@ + + \ No newline at end of file diff --git a/resources/views/pages/settings.blade.php b/resources/views/pages/settings.blade.php index c23c31b5..b6d89f9f 100644 --- a/resources/views/pages/settings.blade.php +++ b/resources/views/pages/settings.blade.php @@ -147,6 +147,26 @@
+
+
+
+
+
+
+
+
+ +
+
+
Warehouse Charges
+
+
+
+
+
+
+
+
@@ -392,6 +412,31 @@
+
+
+ +
+
+
+
+
+ Warehouse Charges +
+
+
+
+
+ + + +
+
+
+
+
+
From 7146600376e643d29ccd23bda323b3a50904a73c Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 21 Feb 2022 20:53:55 +0800 Subject: [PATCH 34/61] update service configuration form component --- .../settings/forms/ServiceFormComponent.vue | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue index 002488cc..eac2a388 100644 --- a/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue @@ -22,7 +22,7 @@
-
+
@@ -59,11 +59,17 @@
-
+ +
+ + + +
@@ -82,14 +88,14 @@
-
+
-
+
@@ -103,7 +109,7 @@
-
+
** Abandoned PO's limit is only applicable to transfers that have been paid in full.
From 284b21ec51868cf2c59dc6a36e72b92cf816825d Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 23 Feb 2022 13:12:32 +0800 Subject: [PATCH 35/61] fix unclaimed packing lists --- app/Http/Resources/PackingListResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Resources/PackingListResource.php b/app/Http/Resources/PackingListResource.php index 38c568e7..6856e77a 100644 --- a/app/Http/Resources/PackingListResource.php +++ b/app/Http/Resources/PackingListResource.php @@ -26,8 +26,8 @@ class PackingListResource extends JsonResource 'status' => $this->status, 'transport' => new TransportResource($this->transports()->first()), 'type' => $this->type, - 'packages' => PackageResource::collection($packages), $this->mergeWhen($this->owner instanceof Order, [ + 'packages' => PackageResource::collection($packages), 'order' => New OrderResource($this->owner) ]) ]; From c49ebe28360da0e1c224f58fbe32215ded23c521 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 23 Feb 2022 13:17:27 +0800 Subject: [PATCH 36/61] fix unclaimed packing lists --- resources/views/pages/unclaimed_packinglist.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/pages/unclaimed_packinglist.blade.php b/resources/views/pages/unclaimed_packinglist.blade.php index 1bca5098..451ea574 100644 --- a/resources/views/pages/unclaimed_packinglist.blade.php +++ b/resources/views/pages/unclaimed_packinglist.blade.php @@ -4,7 +4,7 @@
From ab37914145a26309854c073845add8c3f0804caf Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 23 Feb 2022 13:20:35 +0800 Subject: [PATCH 37/61] fix unclaimed packing lists --- .../ControllersLogic/AssignPackingListOrderLogic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php index 64683721..0c9deb4e 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php @@ -135,7 +135,7 @@ class AssignPackingListOrderLogic extends AbstractControllerLogic 'status' => ApprovalStatus::PENDING_VERIFICATION ]); - $packing_list = $this->updatesPackingListContractReference->execute($packing_list, $contractReference); + $this->updatesPackingListContractReference->execute($packing_list, $contractReference); foreach($contractObligations as $obligation) { $stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id); From c1faa710b49e6d83d31fa23d755f4533674f9bb1 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 23 Feb 2022 13:24:08 +0800 Subject: [PATCH 38/61] fix unclaimed packing lists --- .../ControllersLogic/AssignPackingListOrderLogic.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php index 0c9deb4e..45f32ad7 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/AssignPackingListOrderLogic.php @@ -94,9 +94,7 @@ class AssignPackingListOrderLogic extends AbstractControllerLogic /** * @param Request $request * @return JsonResponse - * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException - * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request) : JsonResponse { @@ -134,6 +132,8 @@ class AssignPackingListOrderLogic extends AbstractControllerLogic 'type' => PackingListType::SHIPPING_PACKING_LIST, 'status' => ApprovalStatus::PENDING_VERIFICATION ]); + + $warehouse_packing_list = $this->updatesPackingListOwner->execute($packing_list, $order); $this->updatesPackingListContractReference->execute($packing_list, $contractReference); From c7330fd0512d38c79cb6d3a6fe0bd5c039c9c24c Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 23 Feb 2022 13:29:41 +0800 Subject: [PATCH 39/61] fix unclaimed packing lists --- .../components/containers/elements/PackingListComponent.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/assets/vue/components/containers/elements/PackingListComponent.vue b/resources/assets/vue/components/containers/elements/PackingListComponent.vue index edf203c8..2140e241 100644 --- a/resources/assets/vue/components/containers/elements/PackingListComponent.vue +++ b/resources/assets/vue/components/containers/elements/PackingListComponent.vue @@ -1,6 +1,9 @@