diff --git a/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php index 280cf188..5b15b689 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php @@ -3,14 +3,19 @@ namespace App\Classes\Modules\Accounts\ControllersLogic; use App\Classes\Exceptions\ErrorException; +use App\Classes\Exceptions\ResourceConflictException; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject; use App\Classes\Modules\Accounts\Processors\CreateUserProcessor; use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor; use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject; use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\RoleTypes; +use App\Http\Resources\UserResource; use App\Models\User; +use Carbon\Carbon; +use Illuminate\Database\QueryException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; @@ -19,6 +24,14 @@ use Illuminate\Support\Facades\Auth; class AddNewMemberLogic extends AbstractControllerLogic { + public function notification(): array + { + return [ + 'title' => 'Updated Email', + 'message' => 'Successfully updated email' + ]; + } + /** * @var AssignEmployeeProcessor */ @@ -31,14 +44,6 @@ class AddNewMemberLogic extends AbstractControllerLogic */ private $generateEmailVerificationAttemptProcessor; - public function notification(): array - { - return [ - 'title' => 'Updated Email', - 'message' => 'Successfully updated email' - ]; - } - public function __construct(CreateUserProcessor $createUserProcessor, AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor) { @@ -47,29 +52,32 @@ class AddNewMemberLogic extends AbstractControllerLogic $this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor; } + /** + * @param Request $request + * @return JsonResponse + * @throws ResourceConflictException + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ public function logic(Request $request): JsonResponse { - $new_email = $request->input('name'); - $user = Auth::user(); - $company = $user->company()->first(); - $user->email = $new_email; + try { + $user = Auth::user()->replicate(); + $user->email = $request->input('email'); + $user->status = ApprovalStatus::PENDING_VERIFICATION; + $user->save(); + } catch (QueryException $exception){ + throw new ResourceConflictException('Unable to change your email address as it already exists'); + } - request()->request->add([ - 'name' => $user->name, - 'email' => $new_email, - 'password' => $user->getAuthPassword(), - 'password_confirmation' => $user->getAuthPassword() - ]); - - /** @var User $user */ - $user = $this->createUserProcessor->execute($request, RoleTypes::USER, ApprovalStatus::PENDING_VERIFICATION); - - $Object = new EmploymentObject($company, $user); - $this->assignEmployeeProcessor->execute($Object); + if($company = Auth::user()->company()->first()){ + $Object = new EmploymentObject($company, $user); + $this->assignEmployeeProcessor->execute($Object); + } $this->generateEmailVerificationAttemptProcessor->execute($user); - return $this->response([ - 'message' => 'test' - ]); + + return $this->resourceResponse(new UserResource($user)); } } diff --git a/app/Http/Controllers/Companies/AddNewMemberController.php b/app/Http/Controllers/Companies/AddNewMemberController.php index e55f46b9..6307ac37 100644 --- a/app/Http/Controllers/Companies/AddNewMemberController.php +++ b/app/Http/Controllers/Companies/AddNewMemberController.php @@ -10,8 +10,13 @@ use Illuminate\Support\Facades\Auth; class AddNewMemberController { + /** + * @param Request $request + * @param AddNewMemberLogic $execute + * @return JsonResponse + */ public function create(Request $request, AddNewMemberLogic $execute) : JsonResponse { - return $execute->logic($request); + return $execute->execute($request); } } diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index 00ca7624..d6c2ed9e 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -3,13 +3,16 @@ namespace App\Http\Resources; use App\Classes\Modules\Companies\Services\FetchesCompanyServices; +use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\BankAccountType; use App\Classes\ValueObjects\Constants\BusinessType; use App\Classes\ValueObjects\Constants\DocumentType; +use App\Classes\ValueObjects\Constants\RoleTypes; use App\Classes\ValueObjects\Constants\SegmentConstants; use App\Models\Currency; use App\Models\SegmentConstant; use Illuminate\Http\Resources\Json\JsonResource; +use Illuminate\Support\Facades\Auth; class CompanyResource extends JsonResource { @@ -30,7 +33,7 @@ class CompanyResource extends JsonResource 'status' => (int) $this->status, 'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())), 'address' => new AddressResource($this->when($this->has('addresses'), $this->addresses->where('billing', true)->first())), - 'employee' => new UserResource($this->employees->first()), + 'employee' => new UserResource(Auth::user()->type === RoleTypes::USER ? $this->employees()->where('email', '=', Auth::user()->email)->first() : $this->employees()->where('status', '=', ApprovalStatus::APPROVED)->orderBy('id', 'DESC')->first()), 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()), 'bookings' => $this->whenLoaded('bookings', $this->bookings()->orderBy('id', 'DESC')->get(), []), 'personal_banks' => BankResource::collection($this->banks->where('type', BankAccountType::PERSONAL)), diff --git a/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue index 9fb3ae21..ca60b203 100644 --- a/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/EditEmailFormComponent.vue @@ -5,15 +5,7 @@
-

Edit Email Address

-
-
-
-
-
Email Address
- - - +
Change Email Address
@@ -21,12 +13,20 @@ {{error}}
+
+
+ + + + +
+
Cancel
-
Update
+
Update
@@ -35,17 +35,24 @@