diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php index 9cb48b0f..7762dffa 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php @@ -126,7 +126,9 @@ class CreateCustomerLogic extends AbstractControllerLogic /** @var CompanyModule $companyModule */ $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER); - $connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()); + $inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']); + + $connectionObject = new CompanyConnectionObject($companyModule, $inviter, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()); $connection = $this->createsCompanyConnection->execute($connectionObject); diff --git a/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php b/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php index b359108d..1d08a191 100644 --- a/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php +++ b/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php @@ -2,6 +2,7 @@ namespace App\Classes\Modules\Accounts\Services; +use App\Classes\ValueObjects\Constants\BusinessType; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Models\User; @@ -11,6 +12,9 @@ class AuthenticationRedirect public function url(User $user){ if($user->type === RoleTypes::USER){ + if ($user->companyModule()->first()->type === BusinessType::ONLINE_SELLER) { + return route('delivery.dashboard'); + } return route('dashboard'); } diff --git a/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php b/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php index 300d76c5..d74a64c8 100644 --- a/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php +++ b/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php @@ -10,6 +10,9 @@ class CompanyConnectionObject implements DataTransferObject /** @var CompanyModule */ private $invitee; + + /** @var CompanyModule */ + private $inviter; /** @var string */ private $inviterReference; @@ -20,12 +23,14 @@ class CompanyConnectionObject implements DataTransferObject /** * CompanyConnectionObject constructor. * @param CompanyModule $invitee + * @param CompanyModule $inviter * @param string $inviterReference * @param string $inviteeReference */ - public function __construct(CompanyModule $invitee, string $inviterReference, string $inviteeReference) + public function __construct(CompanyModule $invitee, CompanyModule $inviter, string $inviteeReference, string $inviterReference) { $this->invitee = $invitee; + $this->inviter = $inviter; $this->inviterReference = $inviterReference; $this->inviteeReference = $inviteeReference; } @@ -38,6 +43,14 @@ class CompanyConnectionObject implements DataTransferObject return $this->invitee; } + /** + * @return CompanyModule + */ + public function getInviter(): CompanyModule + { + return $this->inviter; + } + /** * @return string */ diff --git a/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php b/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php index d5d11ecc..6095da18 100644 --- a/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php +++ b/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php @@ -30,10 +30,8 @@ class CreatesCompanyConnection extends AbstractUpdateRecord public function execute(CompanyConnectionObject $object) { - $companyModule = $this->fetchesCompany->execute(['id', 1])->companyModules()->first(); - $connection = new CompanyConnection(); - $connection->inviter_id = $companyModule->id; + $connection->inviter_id = $object->getInviter()->id; $connection->invitee_id = $object->getInvitee()->id; $connection->inviter_reference = $object->getInviterReference(); $connection->invitee_reference = $object->getInviteeReference(); diff --git a/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php new file mode 100644 index 00000000..c7368439 --- /dev/null +++ b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php @@ -0,0 +1,149 @@ + 'Created User', + 'message' => 'You have successfully created a new User' + ]; + } + + /** @var CreateUserProcessor */ + private $createUserProcessor; + + /** @var CreateCompanyProcessor */ + private $createCompanyProcessor; + + /** @var CreateCompanyModuleProcessor */ + private $createCompanyModuleProcessor; + + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreatesCompanyConnection */ + private $createsCompanyConnection; + + /** @var ApprovesCompanyConnection */ + private $approvesCompanyConnection; + + /** @var AssignEmployeeProcessor */ + private $assignEmployeeProcessor; + + /** @var UploadIdentityDocumentProcessor */ + private $uploadIdentityDocumentProcessor; + + /** @var AuthenticationProcessor */ + private $authenticationProcessor; + + /** @var GenerateEmailVerificationAttemptProcessor */ + private $generateEmailVerificationAttemptProcessor; + + /** @var FetchesCompanyModule */ + private $fetchesCompanyModule; + + /** + * CreateDeliveryCustomerLogic constructor. + * @param CreateUserProcessor $createUserProcessor + * @param CreateCompanyProcessor $createCompanyProcessor + * @param CreateCompanyModuleProcessor $createCompanyModuleProcessor + * @param CreateContactProcessor $createContactProcessor + * @param CreatesCompanyConnection $createsCompanyConnection + * @param ApprovesCompanyConnection $approvesCompanyConnection + * @param AssignEmployeeProcessor $assignEmployeeProcessor + * @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor + * @param AuthenticationProcessor $authenticationProcessor + * @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor + * @param FetchesCompanyModule $fetchesCompanyModule + */ + public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule) + { + $this->createUserProcessor = $createUserProcessor; + $this->createCompanyProcessor = $createCompanyProcessor; + $this->createCompanyModuleProcessor = $createCompanyModuleProcessor; + $this->createContactProcessor = $createContactProcessor; + $this->createsCompanyConnection = $createsCompanyConnection; + $this->approvesCompanyConnection = $approvesCompanyConnection; + $this->assignEmployeeProcessor = $assignEmployeeProcessor; + $this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor; + $this->authenticationProcessor = $authenticationProcessor; + $this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor; + $this->fetchesCompanyModule = $fetchesCompanyModule; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\AccessUnauthorisedException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request): JsonResponse + { + /** @var User $user */ + $user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION); + + /** @var Company $company */ + $company = $this->createCompanyProcessor->execute($request->input('name'), CompanyType::PERSONAL_BUSINESS, ApprovalStatus::PENDING_SUBMISSION); + + $contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id')); + + $this->createContactProcessor->execute($contactObject, $company); + + /** @var CompanyModule $companyModule */ + $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::ONLINE_SELLER); + + $inviter = $this->fetchesCompanyModule->execute(['reference'=>'EXP']); + + $connectionObject = new CompanyConnectionObject($companyModule, $inviter, 'EXP', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()); + + $connection = $this->createsCompanyConnection->execute($connectionObject); + + $this->approvesCompanyConnection->execute($connection); + + $Object = new EmploymentObject($companyModule, $user); + + $this->assignEmployeeProcessor->execute($Object); + + return $this->response($this->authenticationProcessor->execute($request)); + } +} diff --git a/app/Classes/ValueObjects/Constants/BusinessType.php b/app/Classes/ValueObjects/Constants/BusinessType.php index 41c673c6..ec38450f 100644 --- a/app/Classes/ValueObjects/Constants/BusinessType.php +++ b/app/Classes/ValueObjects/Constants/BusinessType.php @@ -18,4 +18,7 @@ final class BusinessType { public const CURRENCY_VENDOR = 6; + public const ONLINE_SELLER = 7; + + public const LAST_MILE_DELIVERY_AGENT = 8; } diff --git a/app/Http/Controllers/Delivery/CreateDeliveryCustomerController.php b/app/Http/Controllers/Delivery/CreateDeliveryCustomerController.php new file mode 100644 index 00000000..6321d758 --- /dev/null +++ b/app/Http/Controllers/Delivery/CreateDeliveryCustomerController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue b/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue new file mode 100644 index 00000000..abca50db --- /dev/null +++ b/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue @@ -0,0 +1,102 @@ + + diff --git a/resources/assets/vue/components/containers/forms/CreateDeliveryOrderFormComponent.vue b/resources/assets/vue/components/containers/forms/CreateDeliveryOrderFormComponent.vue new file mode 100644 index 00000000..068f7404 --- /dev/null +++ b/resources/assets/vue/components/containers/forms/CreateDeliveryOrderFormComponent.vue @@ -0,0 +1,238 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/general/mixins/accounts/validation/newRegistrationFormValidation.js b/resources/assets/vue/general/mixins/accounts/validation/newRegistrationFormValidation.js new file mode 100644 index 00000000..b311215a --- /dev/null +++ b/resources/assets/vue/general/mixins/accounts/validation/newRegistrationFormValidation.js @@ -0,0 +1,27 @@ +import { required, email, numeric, sameAs, requiredUnless, requiredIf } from "vuelidate/lib/validators"; +import authenticationHandler from '../authenticationHandler' +export default { + validations: { + parameters: { + name: { + required + }, + email: { + required, + email + }, + phone: { + required, + numeric + }, + password: { + required + }, + password_confirmation: { + required, + sameAs: sameAs('password') + }, + } + }, + mixins: [authenticationHandler] +} \ No newline at end of file diff --git a/resources/views/pages/accounts/signup.blade.php b/resources/views/pages/accounts/signup.blade.php index 226cd994..a8f49cf8 100644 --- a/resources/views/pages/accounts/signup.blade.php +++ b/resources/views/pages/accounts/signup.blade.php @@ -42,12 +42,60 @@
-
+
+
+
+
+ +
+
+
+
+
+
Sign In
+

To keep using the service please sign in with your personal info

+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
Forget Password
+

Enter your registered email below to receive the password reset instruction

+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
- +
diff --git a/resources/views/pages/delivery/admin.blade.php b/resources/views/pages/delivery/admin.blade.php new file mode 100644 index 00000000..b435a520 --- /dev/null +++ b/resources/views/pages/delivery/admin.blade.php @@ -0,0 +1,43 @@ +
+
+
+
+
+
+
Orders List
+
+
+
+
+ + + + + + +
+
+
+
+
+
+
Customers List
+
+
+
+
+ + + +
+
+
+
+
+
\ No newline at end of file diff --git a/resources/views/pages/delivery/customers.blade.php b/resources/views/pages/delivery/customers.blade.php new file mode 100644 index 00000000..1cf41bb6 --- /dev/null +++ b/resources/views/pages/delivery/customers.blade.php @@ -0,0 +1,16 @@ +
+
+
+
+
+
+
Create Order
+
+
+ +
+
+ +

orders list

+
+
\ No newline at end of file diff --git a/resources/views/pages/delivery/dashboard.blade.php b/resources/views/pages/delivery/dashboard.blade.php new file mode 100644 index 00000000..c4a2362c --- /dev/null +++ b/resources/views/pages/delivery/dashboard.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.base_portal') +@section('inner_content') + @include('pages.delivery.customers') + @include('pages.delivery.admin') +@endsection \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index a9383a2b..04094f78 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,6 +22,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/account.php'; + require __DIR__ . '/delivery.php'; + Route::group(['middleware' => 'valid.token'], function () { Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file'); diff --git a/routes/delivery.php b/routes/delivery.php new file mode 100644 index 00000000..7370f146 --- /dev/null +++ b/routes/delivery.php @@ -0,0 +1,7 @@ + 'delivery', 'namespace' => 'Delivery', 'as' => 'delivery.'], function () { + Route::post('/delivery/registration', 'CreateDeliveryCustomerController@create')->name('account.registration.register'); +}); diff --git a/routes/web.php b/routes/web.php index b99ae38f..8a727a21 100644 --- a/routes/web.php +++ b/routes/web.php @@ -31,10 +31,14 @@ Route::get('', function () { return view('pages.accounts.login'); })->name('login'); -Route::get('/signup', function () { +Route::get('/delivery', function () { return view('pages.accounts.signup'); })->name('signup'); +Route::get('/delivery/dashboard', function () { + return view('pages.delivery.dashboard'); +})->name('delivery.dashboard'); + Route::group(['prefix' => 'swagger'], function () { Route::get('/', function () { return view('swagger.index');