diff --git a/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php index 280cf188..1744f50c 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/AddNewMemberLogic.php @@ -2,35 +2,22 @@ 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\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\Models\User; +use App\Http\Resources\UserResource; +use Illuminate\Database\QueryException; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Auth; class AddNewMemberLogic extends AbstractControllerLogic { - /** - * @var AssignEmployeeProcessor - */ - private $assignEmployeeProcessor; - - /** @var CreateUserProcessor */ - private $createUserProcessor; - /** - * @var GenerateEmailVerificationAttemptProcessor - */ - private $generateEmailVerificationAttemptProcessor; - public function notification(): array { return [ @@ -39,37 +26,53 @@ class AddNewMemberLogic extends AbstractControllerLogic ]; } + /** + * @var AssignEmployeeProcessor + */ + private $assignEmployeeProcessor; - public function __construct(CreateUserProcessor $createUserProcessor, AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor) + /** + * @var GenerateEmailVerificationAttemptProcessor + */ + private $generateEmailVerificationAttemptProcessor; + + /** + * AddNewMemberLogic constructor. + * @param AssignEmployeeProcessor $assignEmployeeProcessor + * @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor + */ + public function __construct(AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor) { - $this->createUserProcessor = $createUserProcessor; $this->assignEmployeeProcessor = $assignEmployeeProcessor; $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/Classes/Modules/Bookings/Services/CalculatesBookingCurrencyAverageRate.php b/app/Classes/Modules/Bookings/Services/CalculatesBookingCurrencyAverageRate.php index 235d897a..2a6de8d2 100644 --- a/app/Classes/Modules/Bookings/Services/CalculatesBookingCurrencyAverageRate.php +++ b/app/Classes/Modules/Bookings/Services/CalculatesBookingCurrencyAverageRate.php @@ -9,27 +9,29 @@ use Carbon\Carbon; class CalculatesBookingCurrencyAverageRate { + /** @var CalculatesBookingPayableAmount */ + private $calculatesBookingPayableAmount; + + /** + * CalculatesBookingCurrencyAverageRate constructor. + * @param CalculatesBookingPayableAmount $calculatesBookingPayableAmount + */ + public function __construct(CalculatesBookingPayableAmount $calculatesBookingPayableAmount) + { + $this->calculatesBookingPayableAmount = $calculatesBookingPayableAmount; + } + + public function execute(Booking $booking, $type){ if ($type == TransactionType::PAYMENT) { - - $amount_without_service = $booking->transactions() - ->where('type', TransactionType::PAYMENT) - ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) - ->selectRaw('ROUND(amount,2)-ROUND(service_charge,2) AS amount_without_service') - ->get()->sum('amount_without_service'); + $totalPayment = $booking->fix_currency_id === 1 ? $booking->transactions()->payments()->complete()->sum('original_amount') : + $booking->transactions()->payments()->complete()->selectRaw('sum(amount - service_charge - tax) as sub_total')->get()->sum('sub_total'); + return $this->calculatesBookingPayableAmount->execute($booking, $booking->fix_currency_id) / $totalPayment; - return number_format($booking->fix_amount/$amount_without_service,2); } else if ($type == TransactionType::BILL) { - - $amount_without_service = $booking->transactions() - ->where('type', TransactionType::BILL) - ->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]) - ->selectRaw('ROUND(amount,2)-ROUND(service_charge,2) AS amount_without_service') - ->get()->sum('amount_without_service'); - - return number_format($booking->fix_amount/$amount_without_service,2); + return $booking->transactions()->bills()->complete()->sum('original_amount') / $booking->transactions()->bills()->complete()->sum('amount'); } } 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..655cfc98 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('users.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/bookings/forms/BookingFormComponent.vue b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue index 414f1a42..65b355f8 100644 --- a/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue @@ -7,7 +7,7 @@
- +
@@ -21,7 +21,7 @@
- +
diff --git a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue index ca969f3b..013a511e 100644 --- a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue @@ -326,6 +326,9 @@
Payment History
+
+
of {{booking.marking}}
+
diff --git a/resources/assets/vue/components/general/elements/DocumentFileViewerComponent.vue b/resources/assets/vue/components/general/elements/DocumentFileViewerComponent.vue index 7e577da0..8143541c 100644 --- a/resources/assets/vue/components/general/elements/DocumentFileViewerComponent.vue +++ b/resources/assets/vue/components/general/elements/DocumentFileViewerComponent.vue @@ -9,7 +9,8 @@
-
Open in new window
+
Open in new window
+
Download
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 @@
diff --git a/routes/account.php b/routes/account.php index 5b4d45f9..1a05eb0d 100644 --- a/routes/account.php +++ b/routes/account.php @@ -33,13 +33,15 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account Route::post('/verification/resend', 'ResendEmailVerificationController@resend')->name('verification.resend'); }); - - Route::group(['prefix' => 'user', 'as' => 'user.'], function () { + Route::group(['prefix' => 'user', 'as' => 'user.', 'middleware' => 'valid.token'], function () { Route::post('/show', 'FetchUserController@fetch')->name('show'); Route::get('/list', 'ListUsersController@list')->name('list'); Route::put('/update/{id}', 'UpdateUserController@update')->name('update'); - + Route::post('/admin/create', 'CreateAdminUserController@create')->name('admin.create'); Route::delete('/delete/{id}', 'DeleteUserController@delete')->name('delete'); }); + + + }); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 24507191..1578a131 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,10 @@ $marking]); })->name('booking.merge'); -Route::get('/mail', function () { - echo route('login'); -}); - - Route::get('/export/customers/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export'); Route::get('/export/transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@transactions');