From decb6265eb2ac7ae053e6b4450f2e1b4ada43b9e Mon Sep 17 00:00:00 2001 From: weichien00 Date: Mon, 2 Aug 2021 23:42:51 +0800 Subject: [PATCH 01/12] add: list order api. --- .../ControllersLogic/ListOrdersLogic.php | 55 +++++++++++++++++++ .../Modules/Orders/Services/ListsOrders.php | 31 +++++++++++ .../Orders/Standards/Rules/CanListOrders.php | 40 ++++++++++++++ .../Orders/ListOrdersController.php | 22 ++++++++ 4 files changed, 148 insertions(+) create mode 100644 app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php create mode 100644 app/Classes/Modules/Orders/Services/ListsOrders.php create mode 100644 app/Classes/Modules/Orders/Standards/Rules/CanListOrders.php create mode 100644 app/Http/Controllers/Orders/ListOrdersController.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php b/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php new file mode 100644 index 00000000..bf960049 --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php @@ -0,0 +1,55 @@ + 'Retrieved Orders', + 'message' => 'You have successfully retrieved a list of Orders' + ]; + } + + /** @var CanListOrders */ + private $canListOrders; + + /** @var ListsOrders */ + private $listsOrders; + + /** + * ListOrdersLogic constructor. + * @param CanListOrders $canListOrders + * @param ListsOrders $listsOrders + */ + public function __construct(CanListOrders $canListOrders, ListsOrders $listsOrders) + { + $this->canListOrders = $canListOrders; + $this->listsOrders = $listsOrders; + } + + public function logic(Request $request) : JsonResponse + { + $this->canListOrders->passes(); + + $query = $this->listsOrders->execute($this->listsOrders->deserializeFilters($request->input('filters'))); + + return $this->collectionResponse(OrderResource::collection($query)); + + } + + + +} diff --git a/app/Classes/Modules/Orders/Services/ListsOrders.php b/app/Classes/Modules/Orders/Services/ListsOrders.php new file mode 100644 index 00000000..8b9c835b --- /dev/null +++ b/app/Classes/Modules/Orders/Services/ListsOrders.php @@ -0,0 +1,31 @@ +repository = $repository; + } + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} diff --git a/app/Classes/Modules/Orders/Standards/Rules/CanListOrders.php b/app/Classes/Modules/Orders/Standards/Rules/CanListOrders.php new file mode 100644 index 00000000..b7d48485 --- /dev/null +++ b/app/Classes/Modules/Orders/Standards/Rules/CanListOrders.php @@ -0,0 +1,40 @@ +execute($request); + } +} From 73505b140c9522fcca52b29ad61b18a4f68cf3a4 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 02:45:58 +0800 Subject: [PATCH 02/12] add: eloquent polymorph with companyModule filter. --- .../Filters/HasMorphCompanyModule.php | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 app/Classes/General/Eloquent/Filters/HasMorphCompanyModule.php diff --git a/app/Classes/General/Eloquent/Filters/HasMorphCompanyModule.php b/app/Classes/General/Eloquent/Filters/HasMorphCompanyModule.php new file mode 100644 index 00000000..ad80e9d0 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/HasMorphCompanyModule.php @@ -0,0 +1,23 @@ +whereHasMorph('owner', ['App\Models\CompanyModule'], function ($query) use($value) { + $query->where('id',$value); + }); + } +} From 60210fc6769c651c51ca29d9320857ddc6c345b8 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 02:49:20 +0800 Subject: [PATCH 03/12] fix: save address with companyModule polymorph relationship. --- .../ControllersLogic/CreateAddressLogic.php | 16 ++++----- .../Addresses/Services/CreatesAddress.php | 6 ++-- .../Services/FetchesCompanyModule.php | 34 +++++++++++++++++++ 3 files changed, 45 insertions(+), 11 deletions(-) create mode 100644 app/Classes/Modules/Companies/Services/FetchesCompanyModule.php diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index e8d432b8..d746ac31 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -8,7 +8,7 @@ use App\Classes\Modules\Addresses\Services\CreatesAddress; use App\Classes\Modules\Addresses\Services\FetchesDistrict; use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; -use App\Classes\Modules\Companies\Services\FetchesCompany; +use App\Classes\Modules\Companies\Services\FetchesCompanyModule; use App\Http\Resources\AddressResource; use ErrorException; use Illuminate\Http\JsonResponse; @@ -33,8 +33,8 @@ class CreateAddressLogic extends AbstractControllerLogic /** @var FetchesDistrict */ private $fetchesDistrict; - /** @var FetchesCompany */ - private $fetchesCompany; + /** @var FetchesCompanyModule */ + private $fetchesCompanyModule; /** @var CreatesAddress */ private $createsAddress; @@ -43,14 +43,14 @@ class CreateAddressLogic extends AbstractControllerLogic * CreateAddressLogic constructor. * @param CanCreateAddress $canCreateAddress * @param FetchesDistrict $fetchesDistrict - * @param FetchesCompany $fetchesCompany + * @param FetchesCompanyModule $fetchesCompanyModule * @param CreatesAddress $createsAddress */ - public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompany $fetchesCompany, CreatesAddress $createsAddress) + public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress) { $this->canCreateAddress = $canCreateAddress; $this->fetchesDistrict = $fetchesDistrict; - $this->fetchesCompany = $fetchesCompany; + $this->fetchesCompanyModule = $fetchesCompanyModule; $this->createsAddress = $createsAddress; } @@ -70,10 +70,10 @@ class CreateAddressLogic extends AbstractControllerLogic $this->canCreateAddress->passes($object); - $query = $this->createsAddress->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object); + $query = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object); return $this->resourceResponse(new AddressResource($query)); } -} +} \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/CreatesAddress.php b/app/Classes/Modules/Addresses/Services/CreatesAddress.php index e6a7b8b3..0e650f07 100644 --- a/app/Classes/Modules/Addresses/Services/CreatesAddress.php +++ b/app/Classes/Modules/Addresses/Services/CreatesAddress.php @@ -6,7 +6,7 @@ use App\Classes\General\Eloquent\AbstractUpdateRecord; use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; use App\Models\Address; -use App\Models\Company; +use App\Models\CompanyModule; class CreatesAddress extends AbstractUpdateRelationshipRecord { @@ -17,7 +17,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord * @return \Illuminate\Database\Eloquent\Model * @throws \App\Classes\Exceptions\MalformedRequestException */ - public function execute(Company $company, AddressObject $object) { + public function execute(CompanyModule $companyModule, AddressObject $object) { $model = new Address(); $model->street_one = $object->getStreetOne(); $model->street_two = $object->getStreetTwo(); @@ -26,7 +26,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord $model->district_id = $object->getDistrictId(); $model->postcode = $object->getPostCode(); - return $this->handler($company->addresses(), $model); + return $this->handler($companyModule->addresses(), $model); } } \ No newline at end of file diff --git a/app/Classes/Modules/Companies/Services/FetchesCompanyModule.php b/app/Classes/Modules/Companies/Services/FetchesCompanyModule.php new file mode 100644 index 00000000..f04d39cc --- /dev/null +++ b/app/Classes/Modules/Companies/Services/FetchesCompanyModule.php @@ -0,0 +1,34 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } +} \ No newline at end of file From 96342f6e01a5d4ee923bd14eb44159a821f9b15f Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 02:58:35 +0800 Subject: [PATCH 04/12] add: component of create order. --- .../address/forms/AddressFormComponent.vue | 128 +++++++++++++++ .../elements/orderInstructionComponent.vue | 63 ++++++++ .../orders/elements/orderListComponent.vue | 86 ++++++++++ .../orders/forms/selectAddressComponent.vue | 86 ++++++++++ .../orders/forms/selectWarehouseComponent.vue | 79 +++++++++ .../orders/sections/createOrderComponent.vue | 151 ++++++++++++++++++ .../validation/createOrderFormValidation.js | 14 ++ 7 files changed, 607 insertions(+) create mode 100644 resources/assets/vue/components/address/forms/AddressFormComponent.vue create mode 100644 resources/assets/vue/components/orders/elements/orderInstructionComponent.vue create mode 100644 resources/assets/vue/components/orders/elements/orderListComponent.vue create mode 100644 resources/assets/vue/components/orders/forms/selectAddressComponent.vue create mode 100644 resources/assets/vue/components/orders/forms/selectWarehouseComponent.vue create mode 100644 resources/assets/vue/components/orders/sections/createOrderComponent.vue create mode 100644 resources/assets/vue/general/mixins/accounts/validation/createOrderFormValidation.js diff --git a/resources/assets/vue/components/address/forms/AddressFormComponent.vue b/resources/assets/vue/components/address/forms/AddressFormComponent.vue new file mode 100644 index 00000000..6bd8840d --- /dev/null +++ b/resources/assets/vue/components/address/forms/AddressFormComponent.vue @@ -0,0 +1,128 @@ + + diff --git a/resources/assets/vue/components/orders/elements/orderInstructionComponent.vue b/resources/assets/vue/components/orders/elements/orderInstructionComponent.vue new file mode 100644 index 00000000..1fd8c06d --- /dev/null +++ b/resources/assets/vue/components/orders/elements/orderInstructionComponent.vue @@ -0,0 +1,63 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/elements/orderListComponent.vue b/resources/assets/vue/components/orders/elements/orderListComponent.vue new file mode 100644 index 00000000..384b7943 --- /dev/null +++ b/resources/assets/vue/components/orders/elements/orderListComponent.vue @@ -0,0 +1,86 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/selectAddressComponent.vue b/resources/assets/vue/components/orders/forms/selectAddressComponent.vue new file mode 100644 index 00000000..b17e5c83 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/selectAddressComponent.vue @@ -0,0 +1,86 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/selectWarehouseComponent.vue b/resources/assets/vue/components/orders/forms/selectWarehouseComponent.vue new file mode 100644 index 00000000..1480b515 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/selectWarehouseComponent.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/createOrderComponent.vue b/resources/assets/vue/components/orders/sections/createOrderComponent.vue new file mode 100644 index 00000000..f6fc8196 --- /dev/null +++ b/resources/assets/vue/components/orders/sections/createOrderComponent.vue @@ -0,0 +1,151 @@ + + diff --git a/resources/assets/vue/general/mixins/accounts/validation/createOrderFormValidation.js b/resources/assets/vue/general/mixins/accounts/validation/createOrderFormValidation.js new file mode 100644 index 00000000..99e88049 --- /dev/null +++ b/resources/assets/vue/general/mixins/accounts/validation/createOrderFormValidation.js @@ -0,0 +1,14 @@ +import { required, email, numeric, sameAs, requiredUnless, requiredIf } from "vuelidate/lib/validators"; +import authenticationHandler from '../authenticationHandler' +export default { + validations: { + parameters: { + warehouse_id: { + required: requiredIf(function () { return this.step === 2 }) + }, + address_id: { + required:requiredIf(function () { return this.step === 3}) + }, + } + }, +} \ No newline at end of file From 6d3b4bc4f0fa4248034f1276bea697f334f0fe50 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 02:59:14 +0800 Subject: [PATCH 05/12] update: vuex module for order operation. --- resources/assets/vue/vuex/modules/order.js | 26 ++++++++++++++++++++++ resources/assets/vue/vuex/store.js | 4 +++- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 resources/assets/vue/vuex/modules/order.js diff --git a/resources/assets/vue/vuex/modules/order.js b/resources/assets/vue/vuex/modules/order.js new file mode 100644 index 00000000..93fadf7b --- /dev/null +++ b/resources/assets/vue/vuex/modules/order.js @@ -0,0 +1,26 @@ +export default { + state: { + orderExist:localStorage.getItem('new-order') || 0, + }, + getters: { + orderExist: (state, getters) => getters.getOrder > 0 || state.orderExist, + }, + mutations: { + order(state){ + state.isNewOrder = 0; + }, + }, + actions: { + updateIfCreateNewOrder(store){ + localStorage.setItem('new-order', 1); + store.commit('UPDATE_IF_NEW_ORDER'); + }, + showCreateOrderForm(store){ + store.dispatch('toggleSection', {name: 'createOrderForm', status: true}) + }, + showOrderList(store){ + store.dispatch('toggleSection', {name: 'orderList', status: true}) + store.dispatch('toggleSection', {name: 'createOrderForm', status: false}) + }, + } +} \ No newline at end of file diff --git a/resources/assets/vue/vuex/store.js b/resources/assets/vue/vuex/store.js index 2c3d911b..15339f90 100644 --- a/resources/assets/vue/vuex/store.js +++ b/resources/assets/vue/vuex/store.js @@ -6,6 +6,7 @@ import createNotification from './modules/createNotification' import crudRequest from './modules/crudRequest' import authentication from './modules/authentication' import loadRequestQueue from './modules/loadRequestQueue' +import order from './modules/order' Vue.use(Vuex); @@ -16,6 +17,7 @@ export default new Vuex.Store({ loadRequestQueue, createNotification, crudRequest, - authentication + authentication, + order } }) \ No newline at end of file From 3b1218e1ea9f9853822ee48866d6c27a908467a4 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 02:59:43 +0800 Subject: [PATCH 06/12] style: validation component. - remove border. --- .../vue/components/general/forms/ValidationWrapperComponent.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue b/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue index d30fdbaf..c03f3507 100644 --- a/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue +++ b/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue @@ -2,7 +2,7 @@
-
+
From efae44cfb067bc459c7b91e7a5f9930f795dc3b0 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 03:02:26 +0800 Subject: [PATCH 07/12] update: add onboarding create order flow component. --- resources/views/pages/dashboards/customer.blade.php | 2 +- resources/views/pages/dashboards/index.blade.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/views/pages/dashboards/customer.blade.php b/resources/views/pages/dashboards/customer.blade.php index c5e842c2..134139e5 100644 --- a/resources/views/pages/dashboards/customer.blade.php +++ b/resources/views/pages/dashboards/customer.blade.php @@ -1,5 +1,5 @@
- +
\ No newline at end of file diff --git a/resources/views/pages/dashboards/index.blade.php b/resources/views/pages/dashboards/index.blade.php index 039ab52c..64918d08 100644 --- a/resources/views/pages/dashboards/index.blade.php +++ b/resources/views/pages/dashboards/index.blade.php @@ -1,5 +1,6 @@ @extends('layouts.base_portal') @section('inner_content') + @include('pages.dashboards.customer')

TEWTASE

TEWTASE

TEWTASE

From a18c9afe3e7e1b6b981696a88b3382aa76c76746 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 03:05:51 +0800 Subject: [PATCH 08/12] update: routes and it respective blade files/ --- .../views/pages/addresses/index.blade.php | 4 ++++ resources/views/pages/orders/index.blade.php | 20 +++++++++++++++++++ resources/views/partials/menu.blade.php | 6 +++--- routes/order.php | 2 +- routes/web.php | 8 ++++++++ 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 resources/views/pages/addresses/index.blade.php create mode 100644 resources/views/pages/orders/index.blade.php diff --git a/resources/views/pages/addresses/index.blade.php b/resources/views/pages/addresses/index.blade.php new file mode 100644 index 00000000..5bf256c2 --- /dev/null +++ b/resources/views/pages/addresses/index.blade.php @@ -0,0 +1,4 @@ +@extends('layouts.base_portal') +@section('inner_content') + {{-- @include('pages.dashboards.customer') --}} +@endsection \ No newline at end of file diff --git a/resources/views/pages/orders/index.blade.php b/resources/views/pages/orders/index.blade.php new file mode 100644 index 00000000..3808538d --- /dev/null +++ b/resources/views/pages/orders/index.blade.php @@ -0,0 +1,20 @@ +@extends('layouts.base_portal') +@section('inner_content') + + + + + + +@endsection \ No newline at end of file diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index 7f220dfc..7d319ea0 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -22,7 +22,7 @@ style=" fill:#4a90e2;">
-
Dashboard
+
Dashboard
@@ -33,7 +33,7 @@ style=" fill:#4a90e2;">
-
My Orders
+
My Orders
@@ -55,7 +55,7 @@ style=" fill:#4a90e2;">
-
My Addresses
+
My Addresses
diff --git a/routes/order.php b/routes/order.php index b2e951a6..305633dc 100644 --- a/routes/order.php +++ b/routes/order.php @@ -4,7 +4,7 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], function () { #Route::get('/{id}/show', 'FetchOrderController@fetch')->name('show'); - #Route::get('/list', 'ListOrdersController@list')->name('list'); + Route::get('/list', 'ListOrdersController@list')->name('list'); Route::post('/create', 'CreateOrderController@create')->name('create'); Route::put('/confirm/{id}', 'ConfirmOrderController@confirm')->name('confirm'); #Route::put('/update/{id}', 'UpdateOrderController@update')->name('update'); diff --git a/routes/web.php b/routes/web.php index 6fc5897b..93cf6d4f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -43,3 +43,11 @@ Route::get('/account/password/reset/{token}', function ($token) { Route::get('/dashboard', function () { return view('pages.dashboards.index'); })->name('dashboard'); + +Route::get('/order', function () { + return view('pages.orders.index'); +})->name('order'); + +Route::get('/address', function () { + return view('pages.addresses.index'); +})->name('address'); From e0df8ac524799d117cb031c45cf421bc2e67fc90 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 03:36:57 +0800 Subject: [PATCH 09/12] =?UTF-8?q?fix=EF=BC=9A=20remove=20new-order=20param?= =?UTF-8?q?=20in=20localstorage=20when=20logout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vue/components/accounts/forms/LogOutFormComponent.vue | 1 + resources/assets/vue/vuex/modules/order.js | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/assets/vue/components/accounts/forms/LogOutFormComponent.vue b/resources/assets/vue/components/accounts/forms/LogOutFormComponent.vue index de1c6443..e38ac3bf 100644 --- a/resources/assets/vue/components/accounts/forms/LogOutFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/LogOutFormComponent.vue @@ -53,6 +53,7 @@ }, successHandler(){ this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: this.route('login')}); + this.$store.dispatch('updateIfCreateNewOrder',''); }, errorHandler(){ this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: this.route('login')}); diff --git a/resources/assets/vue/vuex/modules/order.js b/resources/assets/vue/vuex/modules/order.js index 93fadf7b..d03a0722 100644 --- a/resources/assets/vue/vuex/modules/order.js +++ b/resources/assets/vue/vuex/modules/order.js @@ -11,8 +11,8 @@ export default { }, }, actions: { - updateIfCreateNewOrder(store){ - localStorage.setItem('new-order', 1); + updateIfCreateNewOrder(store ,order){ + localStorage.setItem('new-order', order); store.commit('UPDATE_IF_NEW_ORDER'); }, showCreateOrderForm(store){ From 93e5371882df22004599c3a5463e913d40b18b78 Mon Sep 17 00:00:00 2001 From: weichien00 Date: Thu, 5 Aug 2021 03:38:24 +0800 Subject: [PATCH 10/12] fix: order list tab visibility based on condition. --- .../orders/elements/orderListComponent.vue | 18 ++++++++++++++---- .../orders/sections/createOrderComponent.vue | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/resources/assets/vue/components/orders/elements/orderListComponent.vue b/resources/assets/vue/components/orders/elements/orderListComponent.vue index 384b7943..1197fec2 100644 --- a/resources/assets/vue/components/orders/elements/orderListComponent.vue +++ b/resources/assets/vue/components/orders/elements/orderListComponent.vue @@ -20,13 +20,17 @@