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 @@
+
+ Create Order
+ Select Mode
+
+ Lodge In / Walk In
+
+ Pick Up
+ Please select your Pick Up address
+ Please select your delivery address
+
To keep using the service please sign in with your personal info
+Enter your registered email below to receive the password reset instruction
+orders list
+