diff --git a/app/Classes/Modules/Transactions/ControllersLogic/CancelBillGroupLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/CancelBillGroupLogic.php new file mode 100644 index 00000000..615ae342 --- /dev/null +++ b/app/Classes/Modules/Transactions/ControllersLogic/CancelBillGroupLogic.php @@ -0,0 +1,66 @@ + 'Cancel Bill Group Transaction', + 'message' => 'You have successfully cancelled this Bill Group Transaction' + ]; + } + + /** @var FetchesBillGroup */ + private $fetchesBillGroup; + + /** @var UpdatesTransactionStatus */ + private $updatesTransactionStatus; + + /** + * CancelBillGroupLogic constructor. + * @param FetchesBillGroup $fetchesBillGroup + * @param UpdatesTransactionStatus $updatesTransactionStatus + */ + public function __construct(FetchesBillGroup $fetchesBillGroup, UpdatesTransactionStatus $updatesTransactionStatus) + { + $this->fetchesBillGroup = $fetchesBillGroup; + $this->updatesTransactionStatus = $updatesTransactionStatus; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request) : JsonResponse + { + $billGroup = $this->fetchesBillGroup->execute(['id' => $request->route('id')]); + + $transactions = $billGroup->transactions()->get(); + + foreach($transactions as $transaction) { + if ($transaction->status === ApprovalStatus::APPROVED || $transaction->status === ApprovalStatus::COMPLETED) { + $this->updatesTransactionStatus->execute($transaction, ApprovalStatus::PENDING_VERIFICATION); + } + } + + $billGroup->status = ApprovalStatus::PENDING_VERIFICATION; + $billGroup->save(); + + return $this->resourceResponse(new BillGroupResource($billGroup)); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php b/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php index 8e16233b..b7ca280e 100644 --- a/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php +++ b/app/Classes/Modules/Transactions/ControllersLogic/UpdateGroupLogic.php @@ -26,6 +26,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use ErrorException; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Log; use Mccarlosen\LaravelMpdf\Facades\LaravelMpdf; class UpdateGroupLogic extends AbstractControllerLogic diff --git a/app/Console/Commands/UpdateBillGroupAndGroupToIncludeTransferFee.php b/app/Console/Commands/UpdateBillGroupAndGroupToIncludeTransferFee.php index 3712f8a7..da689d70 100644 --- a/app/Console/Commands/UpdateBillGroupAndGroupToIncludeTransferFee.php +++ b/app/Console/Commands/UpdateBillGroupAndGroupToIncludeTransferFee.php @@ -56,12 +56,21 @@ class UpdateBillGroupAndGroupToIncludeTransferFee extends Command $groups = Group::all(); foreach ($groups as $group) { + $group_transfer_fee = 0; + + $morph_transaction = $group->morphTransactions()->where('type', TransactionType::TRANSFER_FEE)->first(); + + if ($morph_transaction) { + $group_transfer_fee = $morph_transaction->original_amount; + } + + $originalTransferFees = (float)Transaction::where('type', TransactionType::TRANSFER_FEE)->whereIn('owner_id', $group->transactions->pluck('id'))->sum('service_charge'); $correctOriginalAmount = $group->transactions()->sum('original_amount'); - $correctOriginalAmount += $originalTransferFees; + $correctOriginalAmount = $correctOriginalAmount + $originalTransferFees + $group_transfer_fee; $correctAmount = $group->transactions()->sum('amount'); $transferFees = $originalTransferFees / $group->currency_rate; - $correctAmount += $transferFees; + $correctAmount = $correctAmount + $transferFees + ($group_transfer_fee / $group->currency_rate); if ($group->original_amount != $correctOriginalAmount || $group->amount != $correctAmount) { $group->original_amount = $correctOriginalAmount; @@ -73,26 +82,26 @@ class UpdateBillGroupAndGroupToIncludeTransferFee extends Command } // update group calculation to include individual group transfer fee - $groups = Group::whereHas('morphTransactions', function ($q) { - $q->where('type', TransactionType::TRANSFER_FEE); - })->get(); + // $groups = Group::whereHas('morphTransactions', function ($q) { + // $q->where('type', TransactionType::TRANSFER_FEE); + // })->get(); - foreach ($groups as $group) { - $route = FacadesRoute::getRoutes()->getByName('api.transaction.group.update'); - $request = Request::create(route('api.transaction.group.update', $group->id)); - $uri = $route->uri; - $request->setRouteResolver(function () use ($request, $uri) { - // Associate Route to request so we can access route parameters. - return (new Route('PUT', $uri, []))->bind($request); - }); + // foreach ($groups as $group) { + // $route = FacadesRoute::getRoutes()->getByName('api.transaction.group.update'); + // $request = Request::create(route('api.transaction.group.update', $group->id)); + // $uri = $route->uri; + // $request->setRouteResolver(function () use ($request, $uri) { + // // Associate Route to request so we can access route parameters. + // return (new Route('PUT', $uri, []))->bind($request); + // }); - $request['rate'] = $group->currency_rate; - $request['supplier_id'] = $group->issuer; - $this->updateGroupLogic->execute($request); + // $request['rate'] = $group->currency_rate; + // $request['supplier_id'] = $group->issuer; + // $this->updateGroupLogic->execute($request); - $group_transfer_fee = $group->morphTransactions()->where('type', TransactionType::TRANSFER_FEE)->first(); - $this->info("updated group id: {$group->id}, added transfer fee to individual white form CNY {$group_transfer_fee->original_amount}"); - } + // $group_transfer_fee = $group->morphTransactions()->where('type', TransactionType::TRANSFER_FEE)->first(); + // $this->info("updated group id: {$group->id}, added transfer fee to individual white form CNY {$group_transfer_fee->original_amount}"); + // } // update bill group calculation to include individual group transfer fee $billGroups = BillGroup::all(); @@ -103,23 +112,8 @@ class UpdateBillGroupAndGroupToIncludeTransferFee extends Command continue; } - // get the groups - $payments = $billGroup->groups; - - $totalOriginalTransferFee = 0; - $totalTransferFee = 0; - // for each group - foreach ($payments as $group) { - $group_transfer_fee = $group->morphTransactions()->where('type', TransactionType::TRANSFER_FEE)->first(); - - if ($group_transfer_fee) { - $totalOriginalTransferFee += $group_transfer_fee->original_amount; - $totalTransferFee = $totalTransferFee + ($group_transfer_fee->original_amount / $group->currency_rate); - } - } - - $totalOriginal = $billGroup->original_amount + $totalOriginalTransferFee; - $total = $billGroup->amount + $totalTransferFee; + $totalOriginal = $billGroup->groups()->sum('original_amount'); + $total = $billGroup->groups()->sum('amount'); // update bill group payment transaction amount if there is only 1 payment transaction $payment_transactions = $billGroup->transactions()->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->get(); diff --git a/app/Http/Controllers/Transactions/CancelBillGroupController.php b/app/Http/Controllers/Transactions/CancelBillGroupController.php new file mode 100644 index 00000000..2eab79c8 --- /dev/null +++ b/app/Http/Controllers/Transactions/CancelBillGroupController.php @@ -0,0 +1,20 @@ +execute($request); + } +} diff --git a/resources/assets/vue/components/bookings/elements/BillGroupComponent.vue b/resources/assets/vue/components/bookings/elements/BillGroupComponent.vue index 9a309cde..6bde1a01 100644 --- a/resources/assets/vue/components/bookings/elements/BillGroupComponent.vue +++ b/resources/assets/vue/components/bookings/elements/BillGroupComponent.vue @@ -50,6 +50,22 @@ +
+
+ Cancel +
+ + + + +
diff --git a/resources/assets/vue/components/general/forms/GeneralConfirmationFormComponent.vue b/resources/assets/vue/components/general/forms/GeneralConfirmationFormComponent.vue index 6d6ad557..0cb9435b 100644 --- a/resources/assets/vue/components/general/forms/GeneralConfirmationFormComponent.vue +++ b/resources/assets/vue/components/general/forms/GeneralConfirmationFormComponent.vue @@ -61,7 +61,7 @@ successHandler(){ this.closeModal(); this.formHandler(); - if (this.section && (this.section === 'paymentInProgressBillGroupList' || this.section === 'paymentVerificationBillGroupList')) { + if (this.section && (this.section === 'paymentInProgressBillGroupList' || this.section === 'paymentVerificationBillGroupList' || this.section === 'paidBillGroupList')) { this.$store.dispatch('toggleSection', {name: 'paymentInProgressBillGroupList', status: !this.$store.getters.isShowing('paymentInProgressBillGroupList')}); this.$store.dispatch('toggleSection', {name: 'paymentVerificationBillGroupList', status: !this.$store.getters.isShowing('paymentVerificationBillGroupList')}); this.$store.dispatch('toggleSection', {name: 'paidBillGroupList', status: !this.$store.getters.isShowing('paidBillGroupList')}); diff --git a/routes/transaction.php b/routes/transaction.php index 654b3fb8..51e9ab34 100644 --- a/routes/transaction.php +++ b/routes/transaction.php @@ -41,6 +41,7 @@ Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' => Route::post('/transaction/{id}', 'CreateBillGroupPaymentProofDocumentController@create')->name('payment_proof.create'); Route::post('/transaction/{id}/approval/{status}', 'ApproveBillGroupPaymentVerificationController@approve')->where('status', 'approve|reject')->name('payment_proof.approval'); Route::delete('/{id}/delete', 'DeleteBillGroupController@delete')->name('delete'); + Route::put('/{id}/cancel', 'CancelBillGroupController@cancel')->name('cancel'); Route::post('/{id}/pay', 'CreateBillGroupPaymentTransactionController@pay')->name('pay'); // Route::post('/bulk/po', 'CreateBulkPurchaseOrderDocumentController@create')->name('bulk.po'); });