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 @@ +