From 692789d014a37ea4a6fda7ed97300ade78cfdf3e Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Wed, 3 Jul 2024 18:41:03 +0800 Subject: [PATCH 1/8] Test sending welcome voucher email through server --- app/Classes/Jobs/SendWelcomeVoucherEmail.php | 10 +-- .../OneTimeTestVoucherifyEmailCommand.php | 90 +++++++++++++++++++ 2 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 app/Console/Commands/OneTimeTestVoucherifyEmailCommand.php diff --git a/app/Classes/Jobs/SendWelcomeVoucherEmail.php b/app/Classes/Jobs/SendWelcomeVoucherEmail.php index b6ef687e..77cc4ddb 100644 --- a/app/Classes/Jobs/SendWelcomeVoucherEmail.php +++ b/app/Classes/Jobs/SendWelcomeVoucherEmail.php @@ -46,10 +46,10 @@ class SendWelcomeVoucherEmail implements ShouldQueue { $currentDatetime = Carbon::now(); $dateToCompare = Carbon::parse($this->voucher->end_date); - if (!$this->user->hasAttribute($this->voucher->code."_EMAIL_COUNT") - && $this->user->rewards->where('voucher_id', $this->voucher->id)->count() > 0 - && $currentDatetime->isBefore($dateToCompare)) - { + // if (!$this->user->hasAttribute($this->voucher->code."_EMAIL_COUNT") + // && $this->user->rewards->where('voucher_id', $this->voucher->id)->count() > 0 + // && $currentDatetime->isBefore($dateToCompare)) + // { //Key #1 $keyValuePairObject = new KeyValuePairObject( $this->voucher->code."_EMAIL_COUNT", @@ -65,6 +65,6 @@ class SendWelcomeVoucherEmail implements ShouldQueue (App()->make(CreatesKeyValuePair::class))->execute($this->user, $keyValuePairObject); $this->user->notify(new WelcomeVoucherEmail($this->user, $this->voucher)); - } + //} } } diff --git a/app/Console/Commands/OneTimeTestVoucherifyEmailCommand.php b/app/Console/Commands/OneTimeTestVoucherifyEmailCommand.php new file mode 100644 index 00000000..377bf052 --- /dev/null +++ b/app/Console/Commands/OneTimeTestVoucherifyEmailCommand.php @@ -0,0 +1,90 @@ +fetchesVoucher = $fetchesVoucher; + $this->generatesEmailVerificationAttempt = $generatesEmailVerificationAttempt; + $this->sendUserVerificationEmail = $sendUserVerificationEmail; + $this->generatesPasswordReset = $generatesPasswordReset; + $this->sendResetPasswordEmail = $sendResetPasswordEmail; + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + try{ //In case voucher got deleted unintentionally + $user = User::where('id', 3974)->first(); //5436, 3974 + + Log::info(json_encode($user)); + $voucher = $this->fetchesVoucher->execute(['code' => Vouchers::WELCOME_50_PERCENT_OFF]); + Log::info(json_encode($voucher)); + if($voucher) SendWelcomeVoucherEmail::dispatch($user, $voucher, 1); + + // $attempt = $this->generatesEmailVerificationAttempt->execute($user); + // $this->sendUserVerificationEmail::dispatch($user, $attempt); + + // $attempt = $this->generatesPasswordReset->execute($user); + // $this->sendResetPasswordEmail::dispatch($user, $attempt); + } + catch(\Exception $e){} + + } + +} From 929cb2c0a62fa4cf283e3a0a2f4f7b834afc0f54 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Wed, 3 Jul 2024 19:21:50 +0800 Subject: [PATCH 2/8] Test sending welcome voucher email through server --- app/Classes/Jobs/SendWelcomeVoucherEmail.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Classes/Jobs/SendWelcomeVoucherEmail.php b/app/Classes/Jobs/SendWelcomeVoucherEmail.php index 77cc4ddb..b6ef687e 100644 --- a/app/Classes/Jobs/SendWelcomeVoucherEmail.php +++ b/app/Classes/Jobs/SendWelcomeVoucherEmail.php @@ -46,10 +46,10 @@ class SendWelcomeVoucherEmail implements ShouldQueue { $currentDatetime = Carbon::now(); $dateToCompare = Carbon::parse($this->voucher->end_date); - // if (!$this->user->hasAttribute($this->voucher->code."_EMAIL_COUNT") - // && $this->user->rewards->where('voucher_id', $this->voucher->id)->count() > 0 - // && $currentDatetime->isBefore($dateToCompare)) - // { + if (!$this->user->hasAttribute($this->voucher->code."_EMAIL_COUNT") + && $this->user->rewards->where('voucher_id', $this->voucher->id)->count() > 0 + && $currentDatetime->isBefore($dateToCompare)) + { //Key #1 $keyValuePairObject = new KeyValuePairObject( $this->voucher->code."_EMAIL_COUNT", @@ -65,6 +65,6 @@ class SendWelcomeVoucherEmail implements ShouldQueue (App()->make(CreatesKeyValuePair::class))->execute($this->user, $keyValuePairObject); $this->user->notify(new WelcomeVoucherEmail($this->user, $this->voucher)); - //} + } } } From 77140ec7514fd300d4232a9b55196609a35dd4fc Mon Sep 17 00:00:00 2001 From: Jia Sheng Date: Thu, 4 Jul 2024 22:07:24 +0800 Subject: [PATCH 3/8] -change the heading in pdf from credit note to refund note for those transaction after 02 April 2024 --- resources/views/pages/pdfs/credit_note.blade.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/views/pages/pdfs/credit_note.blade.php b/resources/views/pages/pdfs/credit_note.blade.php index ca6e0a5c..a45263be 100644 --- a/resources/views/pages/pdfs/credit_note.blade.php +++ b/resources/views/pages/pdfs/credit_note.blade.php @@ -24,8 +24,11 @@
+ @php + $credit_title = \Carbon\Carbon::parse($transaction->created_at)->isAfter('2024-04-02') ? 'Refund' : 'Credit' + @endphp - {{ $transaction->type == 9 ? 'Credit' : 'Debit' }} Note + {{ $transaction->type == 9 ? $credit_title : 'Debit' }} Note
From c43c63566107ace8c032fb612deb5e1cfe8144a3 Mon Sep 17 00:00:00 2001 From: Jia Sheng Date: Thu, 4 Jul 2024 22:28:44 +0800 Subject: [PATCH 4/8] update --- resources/views/pages/pdfs/credit_note.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/pages/pdfs/credit_note.blade.php b/resources/views/pages/pdfs/credit_note.blade.php index a45263be..1ad18dc6 100644 --- a/resources/views/pages/pdfs/credit_note.blade.php +++ b/resources/views/pages/pdfs/credit_note.blade.php @@ -25,7 +25,7 @@
@php - $credit_title = \Carbon\Carbon::parse($transaction->created_at)->isAfter('2024-04-02') ? 'Refund' : 'Credit' + $credit_title = \Carbon\Carbon::parse($transaction->created_at)->greaterThanOrEqualTo('2024-04-02') ? 'Refund' : 'Credit' @endphp {{ $transaction->type == 9 ? $credit_title : 'Debit' }} Note From 659a48d7ad20ec10e5c49af54e97ca07fa135c95 Mon Sep 17 00:00:00 2001 From: Jia Sheng Date: Thu, 4 Jul 2024 23:03:43 +0800 Subject: [PATCH 5/8] update export refund --- routes/web.php | 82 +++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/routes/web.php b/routes/web.php index 7017b1b8..a7c87263 100644 --- a/routes/web.php +++ b/routes/web.php @@ -440,26 +440,54 @@ Route::get('/pending_orders', function(){ Route::get('/approve_refunds', function(Request $request){ $type = $request->query('type'); - $payments = Transaction::where('type', TransactionType::PAYMENT)->where('owner_type', Booking::class)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED, ApprovalStatus::REFUNDED]) - ->whereHas('transactions', function ($query) use ($type) { - $query->where('type', TransactionType::REFUND)->where('status', ApprovalStatus::APPROVED); - if (str_contains($type, 'partial')) { - $query->whereColumn('original_amount', '!=','transactions.original_amount'); - } else { - $query->whereColumn('original_amount', 'transactions.original_amount'); - } - }); - if (str_contains($type, 'post')) { - $payments->whereHas('transactions', function($query) { - $query->where('type', TransactionType::SUPPLIER_REFUND); + $approve_refunds = Transaction::where('type', TransactionType::REFUND)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]); + + if (str_contains($type, 'partial')) { + $approve_refunds->whereHas('owner', function ($q) { + $q->whereColumn('original_amount', '!=', 'transactions.original_amount'); }); } else { - $payments->whereDoesntHave('transactions', function($query) { - $query->where('type', TransactionType::SUPPLIER_REFUND); + $approve_refunds->whereHas('owner', function ($q) { + $q->whereColumn('original_amount', 'transactions.original_amount'); }); } + if (str_contains($type, 'post')) { + $approve_refunds->whereHas('owner', function ($q) { + $q->whereHas('transactions', function($query) { + $query->where('type', TransactionType::SUPPLIER_REFUND); + }); + }); + } else { + $approve_refunds->whereHas('owner', function ($q) { + $q->whereDoesntHave('transactions', function($query) { + $query->where('type', TransactionType::SUPPLIER_REFUND); + }); + }); + } + + + // $payments = Transaction::where('type', TransactionType::PAYMENT)->where('owner_type', Booking::class)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED, ApprovalStatus::REFUNDED]) + // ->whereHas('transactions', function ($query) use ($type) { + // $query->where('type', TransactionType::REFUND)->where('status', ApprovalStatus::APPROVED); + // if (str_contains($type, 'partial')) { + // $query->whereColumn('original_amount', '!=','transactions.original_amount'); + // } else { + // $query->whereColumn('original_amount', 'transactions.original_amount'); + // } + // }); + + // if (str_contains($type, 'post')) { + // $payments->whereHas('transactions', function($query) { + // $query->where('type', TransactionType::SUPPLIER_REFUND); + // }); + // } else { + // $payments->whereDoesntHave('transactions', function($query) { + // $query->where('type', TransactionType::SUPPLIER_REFUND); + // }); + // } + echo ''; echo ''; echo ''; @@ -478,12 +506,11 @@ Route::get('/approve_refunds', function(Request $request){ echo ''; echo ''; echo ''; - foreach ($payments->orderBy('created_at', 'DESC')->get() as $index => $payment){ - $booking = $payment->owner; - $original_refunds = floatval((App()->make(CalculatesBookingRefundAmount::class))->calculateRefundAmount($payment, $booking->fix_currency_id)); - $refunds = $original_refunds / $payment->currency_rate; + foreach ($approve_refunds->orderBy('created_at', 'DESC')->get() as $index => $refund){ + $payment = $refund->owner; + $booking = $refund->owner->owner; if(!$booking instanceof Booking){ - dd($payment); + dd($refund); } $bankType = str::length($booking->bank->holder_name) > 4 ? 'Company' : 'Personal'; @@ -492,8 +519,7 @@ Route::get('/approve_refunds', function(Request $request){ $bankType = str_word_count($booking->bank->holder_name) > 4 ? 'Company' : 'Personal'; } - $refundTransaction = $payment->transactions()->refunds()->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->first(); - $remark = $refundTransaction->original_amount === $payment->original_amount ? 'Fully Refund' : 'Partial Refund'; + $remark = $refund->original_amount === $refund->owner->original_amount ? 'Fully Refund' : 'Partial Refund'; if (str_contains($type, 'post')) { $remark = 'Post ' . $remark; @@ -501,25 +527,19 @@ Route::get('/approve_refunds', function(Request $request){ $remark = 'Pre ' . $remark; } - $refundTransactions = $payment->transactions()->refunds()->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->get(); - - $noteRemark = ''; - - foreach ($refundTransactions as $refund) { - $noteRemark .= implode(', ', $refund->remarks->pluck('content')->toArray()) . ' '; - } + $noteRemark = implode(', ', $refund->remarks->pluck('content')->toArray()); echo ''; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; - echo ''; + echo ''; echo ''; echo ''; echo ''; From e8cb4b8f5ac9b5c8fa2eda92df0a9ef3ef3ca765 Mon Sep 17 00:00:00 2001 From: Jia Sheng Date: Fri, 5 Jul 2024 20:46:48 +0800 Subject: [PATCH 6/8] update pdf top header --- resources/views/pages/pdfs/credit_note.blade.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/resources/views/pages/pdfs/credit_note.blade.php b/resources/views/pages/pdfs/credit_note.blade.php index 1ad18dc6..d2b13eb8 100644 --- a/resources/views/pages/pdfs/credit_note.blade.php +++ b/resources/views/pages/pdfs/credit_note.blade.php @@ -3,7 +3,11 @@


-
{{ $transaction->bill_no }}
+ @php + $credit_title = \Carbon\Carbon::parse($transaction->created_at)->greaterThanOrEqualTo('2024-04-02') ? 'Refund' : 'Credit'; + $bill_no = $credit_title === 'Refund' ? str_replace('CREDIT', 'REFUND', $transaction->bill_no) : $transaction->bill_no; + @endphp +
{{ $bill_no }}
No.Bank Holder NameNote Remark
'.($index + 1).'.'.$payment->created_at->format('d-M-y').''.$refund->created_at->format('d-M-y').''.$booking->marking.''.\App\Classes\ValueObjects\Constants\PaymentMethodType::PAYMENT_METHODS_ID[$payment->payment_method].''.$payment->currency->short_code.''.number_format($refunds, 5, '.', '').''.number_format($refund->amount, 5, '.', '').''.$booking->company->reference.''.$payment->original_currency->short_code.''.number_format($original_refunds, 5, '.', '').''.number_format($refund->original_amount, 5, '.', '').''.$remark.''.$booking->service->name.'
@@ -24,9 +28,6 @@
- @php - $credit_title = \Carbon\Carbon::parse($transaction->created_at)->greaterThanOrEqualTo('2024-04-02') ? 'Refund' : 'Credit' - @endphp {{ $transaction->type == 9 ? $credit_title : 'Debit' }} Note From 369054c81d8c46ce75336a42bae7c6fa7a64d27c Mon Sep 17 00:00:00 2001 From: Jia Sheng Date: Mon, 8 Jul 2024 12:09:33 +0800 Subject: [PATCH 7/8] -add note under booking payment history -add additional note when creating booking --- .../components/bookings/forms/BookingFormComponent.vue | 2 ++ .../bookings/sections/BookingDetailsSectionComponent.vue | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue index 5e15867d..74641ebd 100644 --- a/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue +++ b/resources/assets/vue/components/bookings/forms/BookingFormComponent.vue @@ -95,6 +95,8 @@

The recipient can expect to receive the transfer within 3-5 working days. Explore our BANK TRANSFER (SAVER) option for a better rate!

Enjoy a better rate with this option! The recipient will receive the transfer after 5-7 working days..

+

Please ensure is a PERSONAL bank account details. Company bank account details only allow to use as E2E service.

+

Cancellation of E2E service are strictly NO refund on the 2% transfer fee charge.

diff --git a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue index a2762ce7..fb227333 100644 --- a/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue +++ b/resources/assets/vue/components/bookings/sections/BookingDetailsSectionComponent.vue @@ -448,6 +448,15 @@
+
+ +
From 7f16b9ead1d793f7862e21d18f39edb66b8ea63b Mon Sep 17 00:00:00 2001 From: Jia Sheng Date: Mon, 8 Jul 2024 12:30:34 +0800 Subject: [PATCH 8/8] update refund logic where E2E do not refund service charge --- .../ControllersLogic/CreateBookingRefundLogic.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php index 058e4bc7..8c492eb1 100644 --- a/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php +++ b/app/Classes/Modules/Bookings/ControllersLogic/CreateBookingRefundLogic.php @@ -132,8 +132,14 @@ class CreateBookingRefundLogic extends AbstractControllerLogic $service_charges_to_refund = $isFullyRefund ? $quotationBeforeCurrentRefund->getServiceCharge() : $quotationBeforeCurrentRefund->getServiceCharge() - $quotationAfterRefund->getServiceCharge(); - // refund service charges if is fully refund - $refundTotal = $refundAmount + $service_charges_to_refund + $transaction->tax; + // refund service charges if booking is not E2E + $refundTotal = $refundAmount; + + if ($booking->service_id !== 5) { + $refundTotal = $refundTotal + $service_charges_to_refund + $transaction->tax; + } else { + $service_charges_to_refund = 0; + } $object = new TransactionObject($billNumber, TransactionType::REFUND, 1, $booking->company->id, 1, PaymentMethodType::CASH,