diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateInvitedCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateInvitedCustomerLogic.php
new file mode 100644
index 00000000..ebd4587e
--- /dev/null
+++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateInvitedCustomerLogic.php
@@ -0,0 +1,105 @@
+ 'Created User',
+ 'message' => 'You have successfully created a new User'
+ ];
+ }
+
+ /** @var CreateUserProcessor */
+ private $createUserProcessor;
+
+ /** @var CreateContactProcessor */
+ private $createContactProcessor;
+
+ /** @var FetchesCompany */
+ private $fetchesCompany;
+
+ /** @var AssignEmployeeProcessor */
+ private $assignEmployeeProcessor;
+
+ /** @var AuthenticationProcessor */
+ private $authenticationProcessor;
+
+
+ /**
+ * CreateInvitedCustomerLogic constructor.
+ * @param CreateUserProcessor $createUserProcessor
+ * @param CreateContactProcessor $createContactProcessor
+ * @param FetchesCompany $fetchesCompany
+ * @param AssignEmployeeProcessor $assignEmployeeProcessor
+ * @param AuthenticationProcessor $authenticationProcessor
+ */
+ public function __construct(CreateUserProcessor $createUserProcessor, CreateContactProcessor $createContactProcessor, FetchesCompany $fetchesCompany, AssignEmployeeProcessor $assignEmployeeProcessor, AuthenticationProcessor $authenticationProcessor)
+ {
+ $this->createUserProcessor = $createUserProcessor;
+ $this->createContactProcessor = $createContactProcessor;
+ $this->fetchesCompany = $fetchesCompany;
+ $this->assignEmployeeProcessor = $assignEmployeeProcessor;
+ $this->authenticationProcessor = $authenticationProcessor;
+ }
+
+ /**
+ * @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 Company $company */
+ $company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
+
+ /** @var CompanyModule $companyModule */
+ $companyModule = $company->companyModules()->first();
+
+ if($companyModule->employees()->exists()){
+ throw new AccessForbiddenException('This company\'s account has been claimed by another user already!');
+ }
+
+ /** @var User $user */
+ $user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
+
+ $contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
+
+ $this->createContactProcessor->execute($contactObject, $company);
+
+ $Object = new EmploymentObject($companyModule, $user);
+
+ $this->assignEmployeeProcessor->execute($Object);
+
+ return $this->response($this->authenticationProcessor->execute($request));
+ }
+}
diff --git a/app/Http/Controllers/Accounts/CreateInvitedCustomerController.php b/app/Http/Controllers/Accounts/CreateInvitedCustomerController.php
new file mode 100644
index 00000000..dce70e1e
--- /dev/null
+++ b/app/Http/Controllers/Accounts/CreateInvitedCustomerController.php
@@ -0,0 +1,20 @@
+execute($request);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php
index 702319aa..cae286b9 100644
--- a/app/Http/Resources/CompanyResource.php
+++ b/app/Http/Resources/CompanyResource.php
@@ -11,6 +11,7 @@ use App\Models\CompanyModule;
use App\Models\Currency;
use App\Models\SegmentConstant;
use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Support\Facades\Crypt;
class CompanyResource extends JsonResource
{
@@ -25,6 +26,7 @@ class CompanyResource extends JsonResource
$companyModule = $this->companyModules()->where('type', '=', BusinessType::IMPORTER)->first();
return [
'id' => $this->id,
+ 'hash_id' => Crypt::encryptString($this->id),
'name' => $this->name,
'reference' => $this->reference,
'type' => (int) $this->type,
diff --git a/app/Http/Resources/ContainerResource.php b/app/Http/Resources/ContainerResource.php
index 774ada84..bc6337cc 100644
--- a/app/Http/Resources/ContainerResource.php
+++ b/app/Http/Resources/ContainerResource.php
@@ -2,6 +2,7 @@
namespace App\Http\Resources;
+use App\Classes\ValueObjects\Constants\ContainerTypes;
use Illuminate\Http\Resources\Json\JsonResource;
class ContainerResource extends JsonResource
@@ -17,7 +18,7 @@ class ContainerResource extends JsonResource
return [
'id' => $this->id,
'container_reference' => $this->reference,
- 'container_type' => $this->container_type,
+ 'container_specification' => ContainerTypes::CONTAINER_SPECIFICATION[$this->container_type],
'container_number' => $this->container_number,
'seal_reference' => $this->seal_reference,
'transport' => new TransportResource($this->transports()->first()),
diff --git a/resources/assets/vue/components/accounts/forms/InviteRegistrationFormComponent.vue b/resources/assets/vue/components/accounts/forms/InviteRegistrationFormComponent.vue
new file mode 100644
index 00000000..9b8af5ea
--- /dev/null
+++ b/resources/assets/vue/components/accounts/forms/InviteRegistrationFormComponent.vue
@@ -0,0 +1,101 @@
+
+ Personal Information
ETA
{{item.transport ? item.transport.current_schedule.eta : 'n/a'}}
+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) }}
+Status
{{item.status === 3 ? 'Un-stuffed' : 'In Progress'}}
diff --git a/resources/assets/vue/general/mixins/accounts/validation/inviteRegistrationFormValidation.js b/resources/assets/vue/general/mixins/accounts/validation/inviteRegistrationFormValidation.js new file mode 100644 index 00000000..7879ff6d --- /dev/null +++ b/resources/assets/vue/general/mixins/accounts/validation/inviteRegistrationFormValidation.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: required + }, + email: { + required: required, + email + }, + phone: { + required: required, + numeric + }, + password: { + required: required, + }, + password_confirmation: { + required: required, + sameAs: sameAs('password') + } + } + }, + mixins: [authenticationHandler] +} \ No newline at end of file diff --git a/resources/assets/vue/general/mixins/guards.js b/resources/assets/vue/general/mixins/guards.js index 18681e5d..ffa96e7d 100644 --- a/resources/assets/vue/general/mixins/guards.js +++ b/resources/assets/vue/general/mixins/guards.js @@ -5,7 +5,10 @@ export default { (this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = this.route('dashboard') : ''; }, isProtectedRoute(){ - const unprotectedRoutes = [this.route('login'), this.route('account.email.verification')]; + const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim')]; + if(window.location.href.indexOf(this.route('company.claim')) === 0) { + return false; + } return !unprotectedRoutes.includes(window.location.href); }, isWithTokenRoute(){ diff --git a/resources/assets/vue/general/mixins/stepNavi.js b/resources/assets/vue/general/mixins/stepNavi.js deleted file mode 100644 index a3c05a0d..00000000 --- a/resources/assets/vue/general/mixins/stepNavi.js +++ /dev/null @@ -1,22 +0,0 @@ -export default { - methods: { - changeStep(direction) { - this.status.direction = direction; - - if (direction === 'next') { - - if (this.validate()) { - //this.step += 1; - this.status.email = this.parameters.email; - this.$emit('updateStatus', this.status); - } - return; - } - this.$emit('updateStatus', this.status); - this.$v.$reset(); - }, - }, - beforeDestroy: function (event) { - }, - -} \ No newline at end of file diff --git a/resources/views/pages/accounts/claim_business.blade.php b/resources/views/pages/accounts/claim_business.blade.php new file mode 100644 index 00000000..645b8e5f --- /dev/null +++ b/resources/views/pages/accounts/claim_business.blade.php @@ -0,0 +1,23 @@ +@extends('layouts.base_login') + +@section('inner_content') +
+