Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0 into online-payment-billplz-integration

This commit is contained in:
ahmedsophyudden
2021-10-02 09:40:43 +08:00
10 changed files with 103 additions and 78 deletions
@@ -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));
}
}
@@ -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');
}
}
@@ -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);
}
}
+4 -1
View File
@@ -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)),
@@ -7,7 +7,7 @@
<div class="col">
<div class="row">
<div class="col">
<img src="images/3568950.png" class="w-100">
<img src="/images/3568950.png" class="w-100">
</div>
</div>
<div class="row">
@@ -21,7 +21,7 @@
<div class="row no-margin">
<div class="col bg-white p-t-15 p-b-10 p-l-25 p-r-25">
<div class="absolute w-100 h-100 bg-white hint-text" style="top: 0; left: 0; z-index: 1;" v-if="!data.services.length"></div>
<img src="images/order_form.png" class="w-100" v-if="!data.services.length">
<img src="/images/order_form.png" class="w-100" v-if="!data.services.length">
<div class="row" v-if="data.services.length">
<div class="col">
<div class="row p-t-5 p-b-20">
@@ -326,6 +326,9 @@
<div class="col">
<div class="font-head fs-10 all-caps">Payment History</div>
</div>
<div class="col-auto">
<div class="font-head fs-10 all-caps">of {{booking.marking}}</div>
</div>
</div>
<div class="row ">
<div class="col">
@@ -9,7 +9,8 @@
<div class="row">
<div class="col text-center">
<img :src="src" class="w-100" v-if="type !== 'pdf'">
<div class="btn btn-complete pointer m-b-20" @click="openBase64NewTab()" v-show="type === 'pdf'">Open in new window</div>
<div class="btn btn-info b-rad-none pointer m-b-20" @click="openBase64NewTab()" v-show="type === 'pdf'">Open in new window</div>
<a :href="'data:application/pdf;base64,'+src" :download="file.file.filename" v-show="type === 'pdf'"><div class="btn btn-success b-rad-none pointer m-b-20">Download</div></a>
<iframe v-if="type === 'pdf'" class="pdf-display w-100 scrollable" style="height: 80vh" :src="'data:application/pdf;base64,'+src"></iframe>
</div>
</div>
@@ -5,15 +5,7 @@
<div class="col">
<div class="row m-b-10">
<div class="col">
<h3 class="all-caps m-b-5 bold no-margin">Edit Email Address</h3>
</div>
</div>
<div class="row m-b-10">
<div class="col">
<div class="fs-12">Email Address</div>
<validation-wrapper-component :validator="$v.parameters.name">
<input type="text" class="form-control" v-model="parameters.name">
</validation-wrapper-component>
<h5 class="all-caps m-b-5 bold no-margin">Change Email Address</h5>
</div>
</div>
<div class="row m-b-5 animate__animated animate__fadeInUpBig animate__fast" v-if="error">
@@ -21,12 +13,20 @@
<small class="bold fs-10 text-danger">{{error}}</small>
</div>
</div>
<div class="row m-b-10">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.email">
<label>New Email Address</label>
<input type="text" class="form-control" v-model="parameters.email">
</validation-wrapper-component>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-default bg-master-lightest btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" @click="submit(route('api.company.team.create', $store.getters.getUserId), 'post', section, true, true)">Update</div>
<div class="btn btn-sm btn-success btn-block b-rad-none" @click="submit(route('api.company.team.create'), 'post', section, true, false)">Update</div>
</div>
</div>
</div>
@@ -35,17 +35,24 @@
</div>
</template>
<script>
import updateProfileFormValidation from '../../../general/mixins/accounts/validation/updateProfileFormValidation';
import { required, email } from "vuelidate/lib/validators";
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
data(){
return {
error: '',
parameters: {
name: ''
email: ''
}
}
},
mixins: [updateProfileFormValidation]
validations: {
parameters: {
email: { required, email }
}
},
mixins: [ModalFormHandler]
}
</script>
+5 -3
View File
@@ -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');
});
});
+4 -5
View File
@@ -1,6 +1,10 @@
<?php
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Route;
@@ -65,11 +69,6 @@ Route::get('/transfer/merge/{marking}', function ($marking) {
return view('pages.booking_merge', ['marking' => $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');