From 2095c18871d22647ff025a002cc0e29792275d38 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sun, 22 Aug 2021 13:55:51 +0800 Subject: [PATCH 01/69] cross login --- .../forms/CrossPlatformLoginFormComponent.vue | 48 +++++++++++++++++++ .../views/pages/accounts/login.blade.php | 1 + 2 files changed, 49 insertions(+) create mode 100644 resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue diff --git a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue new file mode 100644 index 00000000..93634ed4 --- /dev/null +++ b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue @@ -0,0 +1,48 @@ + + \ No newline at end of file diff --git a/resources/views/pages/accounts/login.blade.php b/resources/views/pages/accounts/login.blade.php index 789d3a68..863e7523 100644 --- a/resources/views/pages/accounts/login.blade.php +++ b/resources/views/pages/accounts/login.blade.php @@ -26,6 +26,7 @@
+
From 2d49f4aabf8dcf180b4197fc3ad3e30e2a81d1cf Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 25 Aug 2021 10:01:32 +0800 Subject: [PATCH 02/69] cross login --- .../accounts/forms/CrossPlatformLoginFormComponent.vue | 4 ++-- routes/web.php | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue index 93634ed4..6cd0b199 100644 --- a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue @@ -12,7 +12,7 @@
- +
@@ -36,7 +36,7 @@ }, methods:{ iframeEvent(event) { - if(event.origin !== 'http://unity.test') return; + if(event.origin !== 'http://exchange-2.0.test') return; console.log(event.data); } }, diff --git a/routes/web.php b/routes/web.php index da4792e8..6781c3f3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -64,6 +64,4 @@ Route::get('/customer/{marking}', function ($marking) { return view('pages.customers.profile', ['id' => $id]); })->name('customer.profile'); -Route::get('/order/{id}/download', 'Orders\DownloadOrderQrPdfController@download')->name('order.qr.download'); - -Route::get('/test', 'TestController@test')->name('test'); \ No newline at end of file +Route::get('/order/{id}/download', 'Orders\DownloadOrderQrPdfController@download')->name('order.qr.download'); \ No newline at end of file From 0554cc895f29d33b32c2a1990a39bf14040e6101 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Sun, 5 Sep 2021 12:55:11 +0800 Subject: [PATCH 03/69] checkout --- .../CrossAuthenticateUserLogic.php | 44 ++++++++++++ .../CrossAuthenticationCredentialsObject.php | 43 ++++++++++++ .../CrossAuthenticationProcessor.php | 70 +++++++++++++++++++ .../Services/CrossAuthenticatesUser.php | 44 ++++++++++++ .../Rules/CanCrossAuthenticateUser.php | 54 ++++++++++++++ .../UserCrossAuthenticationValidation.php | 43 ++++++++++++ .../ValueObjects/Constants/PlatformType.php | 9 +++ .../UserCrossAuthenticationController.php | 21 ++++++ app/Models/UserSocialAccount.php | 11 +++ ...2235_create_user_social_accounts_table.php | 35 ++++++++++ database/seeders/DatabaseSeeder.php | 4 +- .../forms/CrossPlatformLoginFormComponent.vue | 5 +- routes/account.php | 5 ++ 13 files changed, 385 insertions(+), 3 deletions(-) create mode 100644 app/Classes/Modules/Accounts/ControllersLogic/CrossAuthenticateUserLogic.php create mode 100644 app/Classes/Modules/Accounts/DataTransferObjects/CrossAuthenticationCredentialsObject.php create mode 100644 app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php create mode 100644 app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php create mode 100644 app/Classes/Modules/Accounts/Standards/Rules/CanCrossAuthenticateUser.php create mode 100644 app/Classes/Modules/Accounts/Standards/Validators/UserCrossAuthenticationValidation.php create mode 100644 app/Classes/ValueObjects/Constants/PlatformType.php create mode 100644 app/Http/Controllers/Accounts/UserCrossAuthenticationController.php create mode 100644 app/Models/UserSocialAccount.php create mode 100644 database/migrations/2021_09_01_212235_create_user_social_accounts_table.php diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CrossAuthenticateUserLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CrossAuthenticateUserLogic.php new file mode 100644 index 00000000..5819a4f0 --- /dev/null +++ b/app/Classes/Modules/Accounts/ControllersLogic/CrossAuthenticateUserLogic.php @@ -0,0 +1,44 @@ + 'Cross Authentication', + 'message' => 'You have successfully logged in to your account' + ]; + } + + /** @var CrossAuthenticationProcessor */ + private $cressAuthenticationProcessor; + + + /** + * CrossAuthenticateUserLogic constructor. + * @param CrossAuthenticationProcessor $authenticationProcessor + */ + public function __construct(CrossAuthenticationProcessor $cressAuthenticationProcessor) + { + $this->cressAuthenticationProcessor = $cressAuthenticationProcessor; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\AccessUnauthorisedException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + protected function logic(Request $request): JsonResponse { + return $this->response($this->cressAuthenticationProcessor->execute($request)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/DataTransferObjects/CrossAuthenticationCredentialsObject.php b/app/Classes/Modules/Accounts/DataTransferObjects/CrossAuthenticationCredentialsObject.php new file mode 100644 index 00000000..67abf905 --- /dev/null +++ b/app/Classes/Modules/Accounts/DataTransferObjects/CrossAuthenticationCredentialsObject.php @@ -0,0 +1,43 @@ +access_token = $access_token; + $this->platform = $platform; + } + + /** + * @return string + */ + public function getAccessToken(): string + { + return $this->access_token; + } + + /** + * @return string + */ + public function getPlatform(): int + { + return $this->platform; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php b/app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php new file mode 100644 index 00000000..1f976a42 --- /dev/null +++ b/app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php @@ -0,0 +1,70 @@ +canCrossAuthenticateUser = $canCrossAuthenticateUser; + $this->crossAuthenticatesUser = $crossAuthenticatesUser; + $this->generatesAuthenticationToken = $generatesAuthenticationToken; + $this->fetchesUser = $fetchesUser; + $this->authenticationRedirect = $authenticationRedirect; + } + + + /** + * @param Request $request + * @return array + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\AccessUnauthorisedException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function execute(Request $request): array { + + $object = new CrossAuthenticationCredentialsObject($request->input('access_token'), $request->input('platform')); + + $this->canCrossAuthenticateUser->passes($object); + + $this->crossAuthenticatesUser->execute($object); + + $user = $this->fetchesUser->execute(['email' => $object->getEmail()]); + + return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)]; + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php new file mode 100644 index 00000000..e76b9197 --- /dev/null +++ b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php @@ -0,0 +1,44 @@ +getPlatform() == PlatformType::EXCHANGE) { + + // $headers = [ + // 'Content-Type' => 'application/json', + // 'Authorization' => 'Bearer ' . $object->getAccessToken(), + // ]; + // $client = new \GuzzleHttp\Client(['headers' => $headers]); + + // $response = $client->get('http://exchange-2.0.test/api/v1/account/user/list'); + + $response = Http::withToken($object->getAccessToken())->get('http://shipping-portal.test/api/v1/account/user/list')->object(); + dd($response); + + } + + if (! auth()->validate(['email' => $object->getEmail(), 'password' => $object->getPassword()])) { + throw new AccessUnauthorisedException('These credentials do not match our records.'); + } + + return true; + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Standards/Rules/CanCrossAuthenticateUser.php b/app/Classes/Modules/Accounts/Standards/Rules/CanCrossAuthenticateUser.php new file mode 100644 index 00000000..115a7ea6 --- /dev/null +++ b/app/Classes/Modules/Accounts/Standards/Rules/CanCrossAuthenticateUser.php @@ -0,0 +1,54 @@ +userCrossAuthenticationValidation = $userCrossAuthenticationValidation; + } + + /** + * @return bool + */ + protected function authorized(): bool + { + return true; + + } + + + /** + * @param AuthenticationCredentialsObject $object + * @return bool + * @throws RequestValidationException + */ + protected function validators($object): bool + { + return $this->userCrossAuthenticationValidation->validate($object); + } + + /** + * @param AuthenticationCredentialsObject $object + * @return bool + */ + protected function criteria($object): bool + { + return true; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Standards/Validators/UserCrossAuthenticationValidation.php b/app/Classes/Modules/Accounts/Standards/Validators/UserCrossAuthenticationValidation.php new file mode 100644 index 00000000..ec170dc7 --- /dev/null +++ b/app/Classes/Modules/Accounts/Standards/Validators/UserCrossAuthenticationValidation.php @@ -0,0 +1,43 @@ + $object->getAccesstoken(), + 'platform' => $object->getPlatform() + ]; + } + + /** + * @return array + */ + protected function rules(): array { + return [ + 'access_token' => 'required', + 'platform' => 'required' + ]; + } + + /** + * @return array + */ + protected function messages(): array { + return []; + } + + + + +} \ No newline at end of file diff --git a/app/Classes/ValueObjects/Constants/PlatformType.php b/app/Classes/ValueObjects/Constants/PlatformType.php new file mode 100644 index 00000000..d9ddd0e3 --- /dev/null +++ b/app/Classes/ValueObjects/Constants/PlatformType.php @@ -0,0 +1,9 @@ +execute($request); + } + +} diff --git a/app/Models/UserSocialAccount.php b/app/Models/UserSocialAccount.php new file mode 100644 index 00000000..b8f01866 --- /dev/null +++ b/app/Models/UserSocialAccount.php @@ -0,0 +1,11 @@ +id(); + $table->foreignId('user_id'); + $table->string('app_id')->nullable(); + $table->integer('platform')->default(0); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_social_accounts'); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index bba317e6..983c7aad 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -23,7 +23,7 @@ class DatabaseSeeder extends Seeder $this->call(CountriesTableSeeder::class); $this->call(CurrenciesTableSeeder::class); - $this->call(CompaniesTableSeeder::class); - $this->call(OrdersTableSeeder::class); + // $this->call(CompaniesTableSeeder::class); + // $this->call(OrdersTableSeeder::class); } } \ No newline at end of file diff --git a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue index 6cd0b199..6b44f6ba 100644 --- a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue @@ -37,7 +37,10 @@ methods:{ iframeEvent(event) { if(event.origin !== 'http://exchange-2.0.test') return; - console.log(event.data); + if (event.data.data) { + console.log(event.data.data.payload.access_token); + + } } }, mounted() { diff --git a/routes/account.php b/routes/account.php index 7a9e08df..cd4e33ae 100644 --- a/routes/account.php +++ b/routes/account.php @@ -6,9 +6,14 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account Route::post('/registration', 'CreateCustomerController@create')->name('registration.register'); + + Route::group(['prefix' => 'authentication', 'as' => 'authentication.'], function () { Route::group(['prefix' => 'login', 'as' => 'authenticate.'], function () { Route::post('/attempt', 'UserAuthenticationController@authenticate')->name('attempt'); + + Route::post('/cross-attempt', 'UserCrossAuthenticationController@authenticate')->name('cross.attempt'); + Route::post('/check_email', 'CheckEmailController@check')->name('email.check'); }); From f3854078042bfa925260babda0c5c9e6570cf4d4 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 28 Sep 2021 12:07:05 +0800 Subject: [PATCH 04/69] debug --- .../Accounts/Services/CrossAuthenticatesUser.php | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php index e76b9197..acf1f15e 100644 --- a/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php +++ b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php @@ -6,6 +6,7 @@ use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\AccessUnauthorisedException; use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject; use App\Classes\ValueObjects\Constants\PlatformType; + use Tymon\JWTAuth\Facades\JWTAuth; class CrossAuthenticatesUser { @@ -20,16 +21,12 @@ class CrossAuthenticatesUser if ($object->getPlatform() == PlatformType::EXCHANGE) { - // $headers = [ - // 'Content-Type' => 'application/json', - // 'Authorization' => 'Bearer ' . $object->getAccessToken(), - // ]; - // $client = new \GuzzleHttp\Client(['headers' => $headers]); - // $response = $client->get('http://exchange-2.0.test/api/v1/account/user/list'); - $response = Http::withToken($object->getAccessToken())->get('http://shipping-portal.test/api/v1/account/user/list')->object(); - dd($response); + $response = Http::withToken('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9leGNoYW5nZS0yLjAudGVzdFwvYXBpXC92MVwvYWNjb3VudFwvYXV0aGVudGljYXRpb25cL2xvZ2luXC9hdHRlbXB0IiwiaWF0IjoxNjMyODAwMzE1LCJleHAiOjk5NjA2MDAzMjE1LCJuYmYiOjE2MzI4MDAzMTUsImp0aSI6Ilo2cGpNMExRbWM5Q1BQQ0YiLCJ1c2VyIjp7ImlkIjo3LCJuYW1lIjoiTGVvbmcgQ2hlZSBTaW9uZyIsImVtYWlsIjoiZ2xvdmV0bGVvbmdAZ21haWwuY29tIiwidHlwZSI6Mywic3RhdHVzIjoyLCJjb21wYW55X2lkIjo5fSwic3ViIjo3LCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.j_Zr9r6W7gE7zM66NQQk9eHbzHPIz-BYbsVOE7ARukI')->get('http://exchange-2.0.test/api/v1/account/user/list')->object(); + + + dd($response, $object->getAccessToken()); } From 5d34201579db23cc54b0d2477c4cf230e2a16588 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 28 Sep 2021 22:07:19 +0800 Subject: [PATCH 05/69] pull --- .../Services/CrossAuthenticatesUser.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php index acf1f15e..e80bef3d 100644 --- a/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php +++ b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php @@ -6,7 +6,6 @@ use Illuminate\Support\Facades\Http; use App\Classes\Exceptions\AccessUnauthorisedException; use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject; use App\Classes\ValueObjects\Constants\PlatformType; - use Tymon\JWTAuth\Facades\JWTAuth; class CrossAuthenticatesUser { @@ -21,20 +20,21 @@ class CrossAuthenticatesUser if ($object->getPlatform() == PlatformType::EXCHANGE) { + $token = $object->getAccessToken(); + $tokenParts = explode(".", $token); + $tokenHeader = base64_decode($tokenParts[0]); + $tokenPayload = base64_decode($tokenParts[1]); + $jwtHeader = json_decode($tokenHeader); + $jwtPayload = json_decode($tokenPayload); + dd($jwtPayload); - $response = Http::withToken('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9leGNoYW5nZS0yLjAudGVzdFwvYXBpXC92MVwvYWNjb3VudFwvYXV0aGVudGljYXRpb25cL2xvZ2luXC9hdHRlbXB0IiwiaWF0IjoxNjMyODAwMzE1LCJleHAiOjk5NjA2MDAzMjE1LCJuYmYiOjE2MzI4MDAzMTUsImp0aSI6Ilo2cGpNMExRbWM5Q1BQQ0YiLCJ1c2VyIjp7ImlkIjo3LCJuYW1lIjoiTGVvbmcgQ2hlZSBTaW9uZyIsImVtYWlsIjoiZ2xvdmV0bGVvbmdAZ21haWwuY29tIiwidHlwZSI6Mywic3RhdHVzIjoyLCJjb21wYW55X2lkIjo5fSwic3ViIjo3LCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.j_Zr9r6W7gE7zM66NQQk9eHbzHPIz-BYbsVOE7ARukI')->get('http://exchange-2.0.test/api/v1/account/user/list')->object(); - + $response = Http::withToken($object->getAccessToken())->post('https://dev.exchange.cief-malaysia.com/api/v1/account/authentication/user/show')->object(); dd($response, $object->getAccessToken()); - } - if (! auth()->validate(['email' => $object->getEmail(), 'password' => $object->getPassword()])) { - throw new AccessUnauthorisedException('These credentials do not match our records.'); - } - - return true; + return $response; } From ee87443ca45b08cb1bd26e2325c9da35d5b61ea2 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Tue, 28 Sep 2021 22:23:51 +0800 Subject: [PATCH 06/69] pull --- .../accounts/forms/CrossPlatformLoginFormComponent.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue index 6b44f6ba..6eb111db 100644 --- a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue @@ -31,6 +31,10 @@ export default { data(){ return { + parameters: { + access_token: this.email, + platform: 1 + }, loading: false } }, @@ -38,8 +42,8 @@ iframeEvent(event) { if(event.origin !== 'http://exchange-2.0.test') return; if (event.data.data) { - console.log(event.data.data.payload.access_token); - + this.parameters.access_token = event.data.data.payload.access_token; + this.submit(this.route('api.account.authentication.authenticate.cross.attempt'), 'post', this.section, false, false) } } }, From ee77fd236ab717ed39cc4e79c55e9ca46e072d37 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 29 Sep 2021 14:23:50 +0800 Subject: [PATCH 07/69] cross login --- .../Accounts/Processors/CrossAuthenticationProcessor.php | 7 ++----- .../Modules/Accounts/Services/CrossAuthenticatesUser.php | 7 +------ .../accounts/forms/CrossPlatformLoginFormComponent.vue | 5 +++-- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php b/app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php index 1f976a42..7d77aa05 100644 --- a/app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php +++ b/app/Classes/Modules/Accounts/Processors/CrossAuthenticationProcessor.php @@ -59,12 +59,9 @@ class CrossAuthenticationProcessor $this->canCrossAuthenticateUser->passes($object); - $this->crossAuthenticatesUser->execute($object); - - $user = $this->fetchesUser->execute(['email' => $object->getEmail()]); + $cross = $this->crossAuthenticatesUser->execute($object); + dd($cross); return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)]; - } - } \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php index e80bef3d..93b2b200 100644 --- a/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php +++ b/app/Classes/Modules/Accounts/Services/CrossAuthenticatesUser.php @@ -23,15 +23,10 @@ class CrossAuthenticatesUser $token = $object->getAccessToken(); $tokenParts = explode(".", $token); - $tokenHeader = base64_decode($tokenParts[0]); $tokenPayload = base64_decode($tokenParts[1]); - $jwtHeader = json_decode($tokenHeader); $jwtPayload = json_decode($tokenPayload); - dd($jwtPayload); - $response = Http::withToken($object->getAccessToken())->post('https://dev.exchange.cief-malaysia.com/api/v1/account/authentication/user/show')->object(); - - dd($response, $object->getAccessToken()); + $response = Http::withToken($object->getAccessToken())->get(env('EXCHANGE_URL') . 'api/v1/company/' . $jwtPayload->user->company_id . '/show')->object(); } return $response; diff --git a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue index 6eb111db..e9a38a4f 100644 --- a/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/CrossPlatformLoginFormComponent.vue @@ -12,7 +12,7 @@
- +
@@ -35,12 +35,13 @@ access_token: this.email, platform: 1 }, + exchange_url: process.env.MIX_EXCHANGE_URL, loading: false } }, methods:{ iframeEvent(event) { - if(event.origin !== 'http://exchange-2.0.test') return; + if(event.origin !== this.exchange_url) return; if (event.data.data) { this.parameters.access_token = event.data.data.payload.access_token; this.submit(this.route('api.account.authentication.authenticate.cross.attempt'), 'post', this.section, false, false) From 592e8c489b29543c96f841f5b5f57129233f19c4 Mon Sep 17 00:00:00 2001 From: glovetleong Date: Wed, 29 Sep 2021 14:24:37 +0800 Subject: [PATCH 08/69] env --- .env.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.env.example b/.env.example index 696b7171..a75778c8 100644 --- a/.env.example +++ b/.env.example @@ -51,3 +51,5 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" UNITY_APP_URL="https://unity.izyim.com" +EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/ +MIX_EXCHANGE_URL="${EXCHANGE_URL}" From 6d0e7dd51de8c208d570cf16342d94aefb9c350e Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 5 Oct 2021 17:00:00 +0800 Subject: [PATCH 09/69] delivery-packing-list-ui --- .../assets/sass/modules/_typography.scss | 2 +- .../ContainerProfileSectionComponent.vue | 333 ++++++++++++------ ...CreateDeliveryPackinglistFormComponent.vue | 241 +++++++++++++ .../elements/ListPackagelistFormComponent.vue | 59 ++++ .../CreateLoadContainerFormComponent.vue | 2 +- 5 files changed, 531 insertions(+), 106 deletions(-) create mode 100644 resources/assets/vue/components/containers/elements/CreateDeliveryPackinglistFormComponent.vue create mode 100644 resources/assets/vue/components/containers/elements/ListPackagelistFormComponent.vue diff --git a/resources/assets/sass/modules/_typography.scss b/resources/assets/sass/modules/_typography.scss index f72c91ce..dbc80e6f 100644 --- a/resources/assets/sass/modules/_typography.scss +++ b/resources/assets/sass/modules/_typography.scss @@ -231,7 +231,7 @@ hr{ font-weight: normal; } .semi-bold { - font-weight: 400 !important; + font-weight: 600 !important; } .bold { font-weight: bold !important; diff --git a/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue b/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue index e4859da8..a6c22ef1 100644 --- a/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue @@ -420,122 +420,238 @@ + +
+
+
Create Delivery Packing List
+
+
+
+
+
+
+
+
+
+
+ +
+
+
Order No
+
+
+
Customer Marking
+
+
+
No. Packgaes
+
+
+
CBM
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
Next
+
+
+
+ +
+ +
+ +
+
+
+
+
+
Summary
+
+
+
+
+
{{selectedPackageList.length}} Packing List Selected
+
+
+
+
+
+
+
{{selectedPackageList.order.reference}}
+
+
+
noPackages
+
+
+
Total Cbm
+
+
+
+
+
+
Total Packages
+
+
+
RM 212.15
+
+
+
+
+
Total Address
+
+
+
RM 41.25
+
+
+
+
+
Total Cbm
+
+
+
RM 0.00
+
+
+
+
+
+
Total Payments
+
+
+
RM 3300.00
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
Activity Timeline
-
-
-
Comments
+
+
+
Activity Timeline
+
+
+
Comments
+
+
+
+
+
+
+
    +
  • +
    +
    +

    Item Returned

    +
    +
    +

    5 September 2021

    +
    +
    +

    Item has been returned due to mismatch

    +
  • +
  • +
    +
    +

    Client Report

    +
    +
    +

    21 August 2021

    +
    +
    +

    Client report order number #012AS12W

    +
  • +
  • +
    +
    +

    Item Cancelled

    +
    +
    +

    8 May 2021

    +
    +
    +

    Item has been cancelled by clients number #012ASJ21

    +
  • +
  • +
    +
    +

    Item Cancelled

    +
    +
    +

    8 May 2021

    +
    +
    +

    Item has been cancelled by clients number #012ASJ21

    +
  • +
  • +
    +
    +

    Client Report

    +
    +
    +

    21 August 2021

    +
    +
    +

    Client report order number #012AS12W

    +
  • +
-
-
-
+
+
+
-
    -
  • -
    -
    -

    Item Returned

    -
    -
    -

    5 September 2021

    -
    -
    -

    Item has been returned due to mismatch

    -
  • -
  • -
    -
    -

    Client Report

    -
    -
    -

    21 August 2021

    -
    -
    -

    Client report order number #012AS12W

    -
  • -
  • -
    -
    -

    Item Cancelled

    -
    -
    -

    8 May 2021

    -
    -
    -

    Item has been cancelled by clients number #012ASJ21

    -
  • -
  • -
    -
    -

    Item Cancelled

    -
    -
    -

    8 May 2021

    -
    -
    -

    Item has been cancelled by clients number #012ASJ21

    -
  • -
  • -
    -
    -

    Client Report

    -
    -
    -

    21 August 2021

    -
    -
    -

    Client report order number #012AS12W

    -
  • -
+
+
+ +
+
+

Jacob Arlington

+
+
+
+
+

Adipisicing occaecat pariatur id sunt ullamco quis laborum irure ea excepteur enim dolore est. Deserunt do consectetur ex in dolor labore ad reprehenderit velit laboris officia ut.

+
+
-
+
-
+
+
+ +
-
-
- -
-
-

Jacob Arlington

-
-
-
-
-

Adipisicing occaecat pariatur id sunt ullamco quis laborum irure ea excepteur enim dolore est. Deserunt do consectetur ex in dolor labore ad reprehenderit velit laboris officia ut.

-
-
+

Jacob Arlington

-
+
-
-
- -
-
-

Jacob Arlington

-
-
-
-
-

Adipisicing occaecat pariatur id sunt ullamco quis laborum irure ea excepteur enim dolore est. Deserunt do consectetur ex in dolor labore ad reprehenderit velit laboris officia ut.

-
-
+

Adipisicing occaecat pariatur id sunt ullamco quis laborum irure ea excepteur enim dolore est. Deserunt do consectetur ex in dolor labore ad reprehenderit velit laboris officia ut.

- -
+
-
+ +
@@ -545,9 +661,9 @@
\ No newline at end of file diff --git a/resources/assets/vue/components/containers/elements/CreateDeliveryPackinglistFormComponent.vue b/resources/assets/vue/components/containers/elements/CreateDeliveryPackinglistFormComponent.vue new file mode 100644 index 00000000..95437774 --- /dev/null +++ b/resources/assets/vue/components/containers/elements/CreateDeliveryPackinglistFormComponent.vue @@ -0,0 +1,241 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/containers/elements/ListPackagelistFormComponent.vue b/resources/assets/vue/components/containers/elements/ListPackagelistFormComponent.vue new file mode 100644 index 00000000..7f7722d0 --- /dev/null +++ b/resources/assets/vue/components/containers/elements/ListPackagelistFormComponent.vue @@ -0,0 +1,59 @@ + + diff --git a/resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue b/resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue index d3f03b07..f4ecee0d 100644 --- a/resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue +++ b/resources/assets/vue/components/containers/forms/CreateLoadContainerFormComponent.vue @@ -81,7 +81,7 @@
-
+
Cancel
From 0d53a61f187703fba3bd5ac901a390b57ff184d3 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 5 Oct 2021 20:40:48 +0800 Subject: [PATCH 10/69] update select all packing list funtion --- .../elements/ContainerProfileSectionComponent.vue | 8 ++++++-- .../containers/elements/ListPackagelistFormComponent.vue | 9 +-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue b/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue index a6c22ef1..e63f607d 100644 --- a/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue @@ -150,7 +150,7 @@ } \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 973fc0f6..b8c43155 100644 --- a/routes/api.php +++ b/routes/api.php @@ -52,6 +52,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function 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'); Route::get('/report/service', 'Reports\MonthlyReportController@serviceReport')->name('report.service'); }); From e7afc0bc10f2851985b33cf9374c8021e2f6a7b9 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Fri, 22 Oct 2021 14:28:30 +0800 Subject: [PATCH 34/69] profit model calculator --- resources/views/pages/admin/dashboard.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/pages/admin/dashboard.blade.php b/resources/views/pages/admin/dashboard.blade.php index 3c937472..dacdc07c 100644 --- a/resources/views/pages/admin/dashboard.blade.php +++ b/resources/views/pages/admin/dashboard.blade.php @@ -43,8 +43,8 @@
-
-
+
+
From ad9b983325800655f18a906367212d4a2c005c8f Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 25 Oct 2021 14:29:24 +0800 Subject: [PATCH 35/69] optimise order queries --- app/Models/Order.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Models/Order.php b/app/Models/Order.php index 401da1db..9ed13a01 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -74,9 +74,9 @@ class Order extends AbstractModel implements Addressable, Packable protected static function booted() { -// if (auth()->user()->type === RoleTypes::USER) { -// static::addGlobalScope(new CustomerOrdersScope); -// } + if (auth()->user()->type === RoleTypes::USER) { + static::addGlobalScope(new CustomerOrdersScope); + } } public function addressesPendingVerification() From ef1759379eb9c45692376c4b5315440f2142e474 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Mon, 25 Oct 2021 14:54:46 +0800 Subject: [PATCH 36/69] disable customer order scope to temp fix pdf download issue --- app/Models/Order.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Models/Order.php b/app/Models/Order.php index 9ed13a01..401da1db 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -74,9 +74,9 @@ class Order extends AbstractModel implements Addressable, Packable protected static function booted() { - if (auth()->user()->type === RoleTypes::USER) { - static::addGlobalScope(new CustomerOrdersScope); - } +// if (auth()->user()->type === RoleTypes::USER) { +// static::addGlobalScope(new CustomerOrdersScope); +// } } public function addressesPendingVerification() From a846028919037114173d4f9afe57bc201a5d17f4 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Mon, 25 Oct 2021 22:49:42 +0800 Subject: [PATCH 37/69] wip --- .../CreateOrderRemarkLogic.php | 67 +++++++++++++++++++ .../Containers/CreateContainerRemarkLogic.php | 1 + .../Orders/CreateOrderRemarkController.php | 14 ++++ app/Models/Order.php | 11 ++- routes/web.php | 10 +++ 5 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php create mode 100644 app/Http/Controllers/Orders/CreateOrderRemarkController.php diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php new file mode 100644 index 00000000..97c91a96 --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php @@ -0,0 +1,67 @@ + 'Created Order', + 'message' => 'You have successfully created a new Order' + ]; + } + + /** @var CreatesRemark */ + private $createsRemark; + + /** + * CreateContainerRemarkLogic constructor. + * @param CreatesRemark $createsRemark + */ + public function __construct(CreatesRemark $createsRemark) + { + $this->createsRemark = $createsRemark; + } + /** + * @param Request $request + * @return JsonResponse + */ + public function logic(Request $request) : JsonResponse + { + // get the order + // $order = Order::findOrFail($request->input('order_id')); + + // $object = new RemarkObject( + // $request->input('content'), + // // commenter_id is hardcoded + // 1 + // ); + + // $this->createsRemark->passes($object); + + // $remark = $this->createsRemark->execute($order, $object); + // return $remark; + + // $query = $this->createsRemark->execute($order, $object); + return $this->response(['nihao']); + + // return $query; + + // return $this->resourceResponse(new RemarkResource($query)); + + + + + } +} diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php index 8186a034..847704ea 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php @@ -46,6 +46,7 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic { // get the container + $container = Container::findOrFail($request->input('container_id')); $object = new RemarkObject($request->input('content'), 1); diff --git a/app/Http/Controllers/Orders/CreateOrderRemarkController.php b/app/Http/Controllers/Orders/CreateOrderRemarkController.php new file mode 100644 index 00000000..12cfbf8a --- /dev/null +++ b/app/Http/Controllers/Orders/CreateOrderRemarkController.php @@ -0,0 +1,14 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Models/Order.php b/app/Models/Order.php index 9d3099a5..999c04cf 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -5,6 +5,7 @@ namespace App\Models; use App\Classes\General\Interfaces\Addressable; use App\Classes\General\Interfaces\Contactable; use App\Classes\General\Interfaces\Packable; +use App\Classes\General\Interfaces\Remarkable; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Scopes\CustomerOrdersScope; @@ -14,7 +15,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphMany; -class Order extends AbstractModel implements Addressable, Packable +class Order extends AbstractModel implements Addressable, Packable, Remarkable { use SoftDeletes; @@ -88,4 +89,12 @@ class Order extends AbstractModel implements Addressable, Packable { return $this->addresses()->where('status','=',ApprovalStatus::APPROVED); } + + /** + * @return MorphMany + */ + public function remarks(): morphMany + { + return $this->morphMany(Remark::class, 'owner'); + } } diff --git a/routes/web.php b/routes/web.php index 6c3097e4..9f5b61a3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -150,3 +150,13 @@ Route::get('/debug', function (){ dd($issues); }); + +// http://localhost/cief/shipping-portal/public/order/remark/create +Route::post('/order/remark/create', 'orders\CreateOrderRemarkController@create')->name('orderRemarks.create'); +Route::get('/order/remark/update', 'remarks\UpdateRemarkController@update')->name('orderRemarks.update'); +// http://localhost/cief/shipping-portal/public/order/remark/list +Route::get('/order/remark/list', 'remarks\ListRemarksController@list')->name('orderRemarks.list'); +// http://localhost/cief/shipping-portal/public/order/remark/4/show +Route::get('/order/remark/{id}/show', 'remarks\FetchRemarkController@fetch')->name('orderRemarks.fetch'); +// http://localhost/cief/shipping-portal/public/order/remark/4/delete +Route::get('/order/remark/{id}/delete', 'remarks\DeleteRemarkController@delete')->name('orderRemarks.delete'); From 2cb8f9f4075357a25383abff79c2853a2f79edc2 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 26 Oct 2021 10:51:06 +0800 Subject: [PATCH 38/69] show change ratio for profit model calculator --- .../ProfitModelReportSectionComponent.vue | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue b/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue index fa680d86..f7405ba3 100644 --- a/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue +++ b/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue @@ -96,31 +96,22 @@
-
-
-
-
-
-
- Projected CBM -
-
+
+
+
+
+ Projected CBM
-
-
-
-

{{(Math.ceil(report.projected_cbm * 1000) / 1000).toFixed(3)}}

- {{((report.projected_cbm / 800) * 100).toFixed(2)}}% - Goal: 800 CBM -
-
+
+

{{(Math.ceil(report.projected_cbm * 1000) / 1000).toFixed(3)}}

+ + {{(((report.projected_cbm - report.total_cbm) / report.total_cbm) * 100).toFixed(2)}}% +
-
-
-
-
-
+
+
+
From cf03a032e57234c959648ed0eabffaaea478a250 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Wed, 27 Oct 2021 21:20:01 +0800 Subject: [PATCH 39/69] create container remark --- .../Containers/CreateContainerRemarkLogic.php | 33 ++++++++----- .../Processors/CreateRemarkProcessor.php | 47 +++++++++++++++++++ 2 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php index 8186a034..175575cf 100644 --- a/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php +++ b/app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php @@ -4,16 +4,17 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; -use App\Classes\Modules\Remarks\Services\CreatesRemark; -use App\Models\Container; -use App\Models\Remark; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; +use App\Http\Resources\ContainerResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class CreateContainerRemarkLogic extends AbstractControllerLogic { + /** * @return array */ @@ -24,35 +25,41 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic ]; } - /** @var CreatesRemark */ - private $createsRemark; + + /** @var FetchesContainer */ + private $fetchesContainer; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; /** * CreateContainerRemarkLogic constructor. - * @param CreatesRemark $createsRemark + * @param FetchesContainer $fetchesContainer + * @param CreateRemarkProcessor $createRemarkProcessor */ - public function __construct(CreatesRemark $createsRemark) + public function __construct(FetchesContainer $fetchesContainer, CreateRemarkProcessor $createRemarkProcessor) { - $this->createsRemark = $createsRemark; + $this->fetchesContainer = $fetchesContainer; + $this->createRemarkProcessor = $createRemarkProcessor; } - /** * @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 { - // get the container - $container = Container::findOrFail($request->input('container_id')); + $container = $this->fetchesContainer->execute(['id' => $request->input('container_id')]); $object = new RemarkObject($request->input('content'), 1); - $remark = $this->createsRemark->execute($container, $object); + $this->createRemarkProcessor->execute($container, $object); - return $remark; + return $this->resourceResponse(new ContainerResource($container)); } diff --git a/app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php b/app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php new file mode 100644 index 00000000..aadbe502 --- /dev/null +++ b/app/Classes/Modules/Remarks/Processors/CreateRemarkProcessor.php @@ -0,0 +1,47 @@ +createsRemark = $createsRemark; + $this->canCreateRemark = $canCreateRemark; + } + + + /** + * @param Remarkable $remarkable + * @param RemarkObject $object + * @return \Illuminate\Database\Eloquent\Model + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function execute(Remarkable $remarkable, RemarkObject $object){ + + $this->canCreateRemark->passes($object); + return $this->createsRemark->execute($remarkable, $object); + + } + +} \ No newline at end of file From 02c6825c4a02b936f48bdda902093096f7cb8c26 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sat, 30 Oct 2021 12:24:44 +0800 Subject: [PATCH 40/69] Merge branch 'create-new-filter-to-order-by-arrival-dates' # Conflicts: # routes/api.php --- routes/api.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/routes/api.php b/routes/api.php index 1dbe987f..7af38f07 100644 --- a/routes/api.php +++ b/routes/api.php @@ -50,11 +50,9 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/schedule.php'; -<<<<<<< HEAD require __DIR__ . '/segment.php'; Route::get('/report/sales', 'Reports\MonthlyReportController@salesReport')->name('report.sales'); -======= 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'); From 2675fd870404f2e5cb83953c42f78469354e3bde Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sat, 30 Oct 2021 12:30:58 +0800 Subject: [PATCH 41/69] Merge branch 'create-new-filter-to-order-by-arrival-dates' # Conflicts: # routes/api.php --- app/Http/Resources/CompanyResource.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index d995e951..38459a35 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -28,16 +28,11 @@ 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 ? $companyModule->employees()->first() : null), + 'employee' => new UserResource($companyModule->employees()->first()), 'company_module' => new CompanyModuleResource($companyModule), 'last_order' => new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null), -<<<<<<< HEAD - // 'order_count' => $this->orders()->count(), - 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()), -======= 'order_count' => $this->orders()->count(), 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED])->first()), ->>>>>>> origin/master 'created_at' => $this->created_at->format('d-m-Y') ]; From c9131b3c3d2d177a70b74d119430003bf911fbe1 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sat, 30 Oct 2021 12:37:52 +0800 Subject: [PATCH 42/69] order warehouse parcels by arrival date --- resources/views/pages/warehouse_list.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/pages/warehouse_list.blade.php b/resources/views/pages/warehouse_list.blade.php index a57fc834..270f2ec4 100644 --- a/resources/views/pages/warehouse_list.blade.php +++ b/resources/views/pages/warehouse_list.blade.php @@ -2,7 +2,7 @@ @section('inner_content')
- + From 9977d516e166bdf08908d5712f39dcf630a97423 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Sat, 30 Oct 2021 12:49:22 +0800 Subject: [PATCH 43/69] fix order by arrival date --- .../Eloquent/Filters/PackingListStatus.php | 20 +++++++++++++++++++ .../Eloquent/Filters/PackingListType.php | 20 +++++++++++++++++++ .../Eloquent/Filters/WithArrivalDate.php | 2 +- .../views/pages/warehouse_list.blade.php | 2 +- 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/PackingListStatus.php create mode 100644 app/Classes/General/Eloquent/Filters/PackingListType.php diff --git a/app/Classes/General/Eloquent/Filters/PackingListStatus.php b/app/Classes/General/Eloquent/Filters/PackingListStatus.php new file mode 100644 index 00000000..1e20f147 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/PackingListStatus.php @@ -0,0 +1,20 @@ +where('packing_lists.status', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/PackingListType.php b/app/Classes/General/Eloquent/Filters/PackingListType.php new file mode 100644 index 00000000..941d6493 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/PackingListType.php @@ -0,0 +1,20 @@ +where('packing_lists.type', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/General/Eloquent/Filters/WithArrivalDate.php b/app/Classes/General/Eloquent/Filters/WithArrivalDate.php index 34cab837..3acb02c4 100644 --- a/app/Classes/General/Eloquent/Filters/WithArrivalDate.php +++ b/app/Classes/General/Eloquent/Filters/WithArrivalDate.php @@ -17,6 +17,6 @@ class WithArrivalDate implements Filter { return $builder->leftJoin('transport_arrangements', function ($join) { $join->on('packing_lists.id', '=', 'transport_arrangements.owner_id')->where('transport_arrangements.owner_type', 'App\Models\PackingList'); - })->addSelect([DB::raw('transport_arrangements.drop_date as arrival_date')]); + })->addSelect(['packing_lists.*', DB::raw('transport_arrangements.drop_date as arrival_date')]); } } \ No newline at end of file diff --git a/resources/views/pages/warehouse_list.blade.php b/resources/views/pages/warehouse_list.blade.php index 270f2ec4..67441c1e 100644 --- a/resources/views/pages/warehouse_list.blade.php +++ b/resources/views/pages/warehouse_list.blade.php @@ -2,7 +2,7 @@ @section('inner_content')
- + From 5e7cfd4da0bbcb83bde8922008d5f1300fe2a554 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Sun, 31 Oct 2021 15:43:57 +0800 Subject: [PATCH 44/69] tidy up the order remark backend api --- .../CreateOrderRemarkLogic.php | 51 ++++++++----------- .../Orders/CreateOrderRemarkController.php | 2 +- app/Http/Resources/OrderResource.php | 1 + app/Models/Order.php | 8 +++ routes/order.php | 2 + routes/web.php | 10 ---- 6 files changed, 34 insertions(+), 40 deletions(-) diff --git a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php index 97c91a96..e134bcc7 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/CreateOrderRemarkLogic.php @@ -3,10 +3,10 @@ namespace App\Classes\Modules\Orders\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\Orders\Services\FetchesOrder; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; -use App\Classes\Modules\Remarks\Services\CreatesRemark; -use App\Models\Order; -use App\Models\Remark; +use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; +use App\Http\Resources\OrderResource; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -22,46 +22,39 @@ class CreateOrderRemarkLogic extends AbstractControllerLogic ]; } - /** @var CreatesRemark */ - private $createsRemark; + /** @var FetchesOrder */ + private $fetchesOrder; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; /** - * CreateContainerRemarkLogic constructor. - * @param CreatesRemark $createsRemark + * CreateOrderRemarkLogic constructor. + * @param FetchesOrder $fetchesOrder + * @param CreateRemarkProcessor $createRemarkProcessor */ - public function __construct(CreatesRemark $createsRemark) + public function __construct(FetchesOrder $fetchesOrder, CreateRemarkProcessor $createRemarkProcessor) { - $this->createsRemark = $createsRemark; + $this->fetchesOrder = $fetchesOrder; + $this->createRemarkProcessor = $createRemarkProcessor; } + /** * @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 { - // get the order - // $order = Order::findOrFail($request->input('order_id')); - - // $object = new RemarkObject( - // $request->input('content'), - // // commenter_id is hardcoded - // 1 - // ); - - // $this->createsRemark->passes($object); - - // $remark = $this->createsRemark->execute($order, $object); - // return $remark; - - // $query = $this->createsRemark->execute($order, $object); - return $this->response(['nihao']); - - // return $query; - - // return $this->resourceResponse(new RemarkResource($query)); + $order = $this->fetchesOrder->execute(['id' => $request->route('id')]); + $object = new RemarkObject($request->input('content'), auth()->user()->id); + $this->createRemarkProcessor->execute($order, $object); + return $this->resourceResponse(new OrderResource($order)); } } diff --git a/app/Http/Controllers/Orders/CreateOrderRemarkController.php b/app/Http/Controllers/Orders/CreateOrderRemarkController.php index 12cfbf8a..3464566a 100644 --- a/app/Http/Controllers/Orders/CreateOrderRemarkController.php +++ b/app/Http/Controllers/Orders/CreateOrderRemarkController.php @@ -6,7 +6,7 @@ use App\Classes\Modules\Orders\ControllersLogic\CreateOrderRemarkLogic; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -class OrderRemarksController +class CreateOrderRemarkController { public function create(Request $request, CreateOrderRemarkLogic $logic): JsonResponse{ return $logic->execute($request); diff --git a/app/Http/Resources/OrderResource.php b/app/Http/Resources/OrderResource.php index 06e31b6f..0c30bb62 100644 --- a/app/Http/Resources/OrderResource.php +++ b/app/Http/Resources/OrderResource.php @@ -46,6 +46,7 @@ class OrderResource extends JsonResource 'received_packages' => PackageResource::collection($this->parcels()->warehouseReceiveList()->get()), ]; }), + 'remarks' => RemarkResource::collection($this->remarks), 'created_at' => $this->created_at->format('d-m-Y') ]; diff --git a/app/Models/Order.php b/app/Models/Order.php index 3d7bdcab..3923d913 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -148,4 +148,12 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable { return $this->morphMany(Transaction::class, 'owner'); } + + /** + * @return MorphMany + */ + public function remarks(): morphMany + { + return $this->morphMany(Remark::class, 'owner'); + } } diff --git a/routes/order.php b/routes/order.php index 2da8880f..ea7bc389 100644 --- a/routes/order.php +++ b/routes/order.php @@ -17,4 +17,6 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f // Route::post('/create', 'CreateOrderController@create')->name('create'); Route::get('/{id}/shipping-cost', 'ShippingCostController@calculate')->name('shipping.cost'); + + Route::post('/{id}/remark/create', 'CreateOrderRemarkController@create')->name('remark.create'); }); diff --git a/routes/web.php b/routes/web.php index 9f5b61a3..6c3097e4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -150,13 +150,3 @@ Route::get('/debug', function (){ dd($issues); }); - -// http://localhost/cief/shipping-portal/public/order/remark/create -Route::post('/order/remark/create', 'orders\CreateOrderRemarkController@create')->name('orderRemarks.create'); -Route::get('/order/remark/update', 'remarks\UpdateRemarkController@update')->name('orderRemarks.update'); -// http://localhost/cief/shipping-portal/public/order/remark/list -Route::get('/order/remark/list', 'remarks\ListRemarksController@list')->name('orderRemarks.list'); -// http://localhost/cief/shipping-portal/public/order/remark/4/show -Route::get('/order/remark/{id}/show', 'remarks\FetchRemarkController@fetch')->name('orderRemarks.fetch'); -// http://localhost/cief/shipping-portal/public/order/remark/4/delete -Route::get('/order/remark/{id}/delete', 'remarks\DeleteRemarkController@delete')->name('orderRemarks.delete'); From 6fcf952967d845093bbd9e74ab3c78699a276d38 Mon Sep 17 00:00:00 2001 From: edmondlang Date: Tue, 2 Nov 2021 00:00:31 +0800 Subject: [PATCH 45/69] update order remark ui --- .../ControllersLogic/UpdateRemarkLogic.php | 2 +- .../orders/elements/OrderComponent.vue | 15 +++++- .../forms/DeleteOrderRemarkFormComponent.vue | 32 ++++++++++++ .../orders/forms/OrderRemarkFormComponent.vue | 49 +++++++++++++++++++ .../sections/OrderProfileSectionComponent.vue | 45 ++++++++++++++++- 5 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue create mode 100644 resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue diff --git a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php index e9c0738f..5b3af8f8 100644 --- a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php +++ b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php @@ -55,7 +55,7 @@ class UpdateRemarkLogic extends AbstractControllerLogic */ public function logic(Request $request) : JsonResponse { - $object = new RemarkObject($request->input('content'), $request->input('commenter_id')); + $object = new RemarkObject($request->input('content'), auth()->user()->id); $this->canUpdateRemark->passes($object); diff --git a/resources/assets/vue/components/orders/elements/OrderComponent.vue b/resources/assets/vue/components/orders/elements/OrderComponent.vue index 31cc56af..e1f1db48 100644 --- a/resources/assets/vue/components/orders/elements/OrderComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderComponent.vue @@ -16,8 +16,19 @@
- Order No. -
{{item.reference}}
+
+
+ Order No +
+
+
+
+
{{item.reference}}
+
+
+ +
+
diff --git a/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue new file mode 100644 index 00000000..a23d077f --- /dev/null +++ b/resources/assets/vue/components/orders/forms/DeleteOrderRemarkFormComponent.vue @@ -0,0 +1,32 @@ + + diff --git a/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue new file mode 100644 index 00000000..79273650 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/OrderRemarkFormComponent.vue @@ -0,0 +1,49 @@ + + diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 5e4a5732..2ebb27ce 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -21,6 +21,47 @@

Order No. {{order.reference}}

+
+
+
+
+
Remark:
+
+
+
Add a Remark
+
+
+
{{order.remarks[0].content}}
+ + + + + + + + + +
+
+
+
+ +
+
+
+
+ Cancel +
+
+
+
+
+
+ +
+
+
+
Order Date: {{order.created_at}}
@@ -412,7 +453,9 @@ return { section: 'orderProfileSection', isLoading: true, - order: null + order: null, + isEditRemark: false, + addComment: false, } }, computed: { From f5ea06e3fec0e6aec7a8ecd15cbf626cc8940b02 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 2 Nov 2021 21:32:20 +0800 Subject: [PATCH 46/69] show packages quantity loaded into container --- .../Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php | 4 +++- .../vue/components/containers/elements/ContainerComponent.vue | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php index e9c0738f..ffd7a701 100644 --- a/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php +++ b/app/Classes/Modules/Remarks/ControllersLogic/UpdateRemarkLogic.php @@ -51,7 +51,9 @@ class UpdateRemarkLogic extends AbstractControllerLogic /** * @param Request $request * @return JsonResponse - * @throws ErrorException + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request) : JsonResponse { diff --git a/resources/assets/vue/components/containers/elements/ContainerComponent.vue b/resources/assets/vue/components/containers/elements/ContainerComponent.vue index 721e690f..899085d8 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -26,6 +26,10 @@

ETA

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

+
+

Packages

+

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

+

Loaded CBM

{{ (Math.ceil((item.packing_lists.reduce((total, obj) => total + obj.packages.reduce((total, obj) => obj.cbm + total, 0), 0)) * 1000) / 1000).toFixed(3) }}

From c15f67e3040140beb60a2ce2e4e0e1311e511216 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 2 Nov 2021 21:40:35 +0800 Subject: [PATCH 47/69] order container by loading date --- resources/views/pages/containers.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/pages/containers.blade.php b/resources/views/pages/containers.blade.php index 5baa8161..78186eef 100644 --- a/resources/views/pages/containers.blade.php +++ b/resources/views/pages/containers.blade.php @@ -16,7 +16,7 @@
- + From 884f4b33d13503eb87817f560c22e9feeb0d1c42 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 2 Nov 2021 22:20:47 +0800 Subject: [PATCH 48/69] categorise containers --- .../Eloquent/Filters/HasPendingDelivery.php | 22 ++++ resources/views/pages/containers.blade.php | 113 +++++++++++++++++- 2 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 app/Classes/General/Eloquent/Filters/HasPendingDelivery.php diff --git a/app/Classes/General/Eloquent/Filters/HasPendingDelivery.php b/app/Classes/General/Eloquent/Filters/HasPendingDelivery.php new file mode 100644 index 00000000..be63a958 --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/HasPendingDelivery.php @@ -0,0 +1,22 @@ +whereDoesntHave('packingLists', function (Builder $query) use($value) { + $value ? $query->whereHas('transports') : $query->whereDoesntHave('transports'); + }); + } + +} \ No newline at end of file diff --git a/resources/views/pages/containers.blade.php b/resources/views/pages/containers.blade.php index 78186eef..ddfe9c8b 100644 --- a/resources/views/pages/containers.blade.php +++ b/resources/views/pages/containers.blade.php @@ -15,10 +15,111 @@
- - - - + +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
Active
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
Complete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
Cancelled
+
+
+
+
+
+
+
+
+
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+
+
@endsection \ No newline at end of file From d2468769dfa67085f4dbcd9dffaa401ac873c336 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 2 Nov 2021 22:24:39 +0800 Subject: [PATCH 49/69] categorise containers --- resources/views/pages/containers.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/pages/containers.blade.php b/resources/views/pages/containers.blade.php index ddfe9c8b..4874cfb0 100644 --- a/resources/views/pages/containers.blade.php +++ b/resources/views/pages/containers.blade.php @@ -102,7 +102,7 @@
- + @@ -111,7 +111,7 @@
- + From 8cec7b436f15c4fb19d1f44138846e6fa9089d63 Mon Sep 17 00:00:00 2001 From: omair saleh Date: Tue, 2 Nov 2021 22:25:59 +0800 Subject: [PATCH 50/69] categorise containers --- .../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 899085d8..c90fb26f 100644 --- a/resources/assets/vue/components/containers/elements/ContainerComponent.vue +++ b/resources/assets/vue/components/containers/elements/ContainerComponent.vue @@ -1,6 +1,6 @@