diff --git a/src/Services/BankTransferService.php b/src/Services/BankTransferService.php index 5777382..b22b032 100644 --- a/src/Services/BankTransferService.php +++ b/src/Services/BankTransferService.php @@ -196,31 +196,43 @@ public function create(array $inputs = []): ?BaseModel DB::beginTransaction(); try { + $bankTransfer = $this->bankTransferRepository->create($inputs); + DB::commit(); - $userUpdatedBalance = $this->debitTransaction($bankTransfer); - $senderUpdatedAccount = $senderAccount->toArray(); - $senderUpdatedAccount['user_account_data']['spent_amount'] = (float) $senderUpdatedAccount['user_account_data']['spent_amount'] + (float) $userUpdatedBalance['spent_amount']; - if (! $inputs['allow_insufficient_balance']) { - $senderUpdatedAccount['user_account_data']['available_amount'] = (float) $userUpdatedBalance['current_amount']; - } - $inputs['order_data']['previous_amount'] = (float) $senderAccount->user_account_data['available_amount']; - $inputs['order_data']['current_amount'] = ((float) $inputs['order_data']['previous_amount'] + (float) $inputs['converted_amount']); - $inputs['timeline'][] = [ - 'message' => 'Deducted '.currency($userUpdatedBalance['spent_amount'], $inputs['currency']).' from user account successfully', - 'flag' => 'info', - 'timestamp' => now(), - ]; - - $bankTransfer = $this->bankTransferRepository->update($bankTransfer->getKey(), ['order_data' => $inputs['order_data'], 'timeline' => $inputs['timeline']]); - - if (! Transaction::userAccount()->update($senderAccount->getKey(), $senderUpdatedAccount)) { - throw new \Exception('Failed to update user account balance.'); - } + + $accounting = Transaction::accounting($bankTransfer); + + $accounting->debitTransaction(); + + $accounting->debitBalanceFromUserAccount(); + + +// $userUpdatedBalance = $this->debitTransaction($bankTransfer); +// $senderUpdatedAccount = $senderAccount->toArray(); +// $senderUpdatedAccount['user_account_data']['spent_amount'] = (float) $senderUpdatedAccount['user_account_data']['spent_amount'] + (float) $userUpdatedBalance['spent_amount']; +// if (! $inputs['allow_insufficient_balance']) { +// $senderUpdatedAccount['user_account_data']['available_amount'] = (float) $userUpdatedBalance['current_amount']; +// } +// $inputs['order_data']['previous_amount'] = (float) $senderAccount->user_account_data['available_amount']; +// $inputs['order_data']['current_amount'] = ((float) $inputs['order_data']['previous_amount'] + (float) $inputs['converted_amount']); +// $inputs['timeline'][] = [ +// 'message' => 'Deducted '.currency($userUpdatedBalance['spent_amount'], $inputs['currency']).' from user account successfully', +// 'flag' => 'info', +// 'timestamp' => now(), +// ]; +// +// $bankTransfer = $this->bankTransferRepository->update($bankTransfer->getKey(), ['order_data' => $inputs['order_data'], 'timeline' => $inputs['timeline']]); + +// if (! Transaction::userAccount()->update($senderAccount->getKey(), $senderUpdatedAccount)) { +// throw new \Exception('Failed to update user account balance.'); +// } Transaction::orderQueue()->removeFromQueueUserWise($inputs['user_id']); - BankTransferRequested::dispatch($bankTransfer); + event(new BankTransferRequested($bankTransfer)); + + $bankTransfer->refresh(); return $bankTransfer; @@ -231,203 +243,203 @@ public function create(array $inputs = []): ?BaseModel } } - /** - * @return int[] - */ - public function debitTransaction($bankTransfer): array - { - $userAccountData = [ - 'previous_amount' => null, - 'current_amount' => null, - 'spent_amount' => null, - ]; - - //Collect Current Balance as Previous Balance - $userAccountData['previous_amount'] = Transaction::orderDetail()->list([ - 'get_order_detail_amount_sum' => true, - 'user_id' => $bankTransfer->user_id, - 'order_detail_currency' => $bankTransfer->currency, - ]); - - $serviceStatData = $bankTransfer->order_data['service_stat_data']; - $master_user_name = $bankTransfer->order_data['master_user_name']; - $user_name = $bankTransfer->order_data['user_name']; - - $amount = $bankTransfer->amount; - $converted_amount = $bankTransfer->converted_amount; - $bankTransfer->amount = -$amount; - $bankTransfer->converted_amount = -$converted_amount; - $bankTransfer->order_detail_cause_name = 'cash_withdraw'; - $bankTransfer->order_detail_number = $bankTransfer->order_data['purchase_number']; - $bankTransfer->order_detail_response_id = $bankTransfer->order_data['purchase_number']; - $bankTransfer->notes = 'Bank Transfer Payment Send to '.$master_user_name; - $orderDetailStore = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($bankTransfer)); - $orderDetailStore->order_detail_parent_id = $bankTransfer->order_detail_parent_id = $orderDetailStore->getKey(); - $orderDetailStore->save(); - $orderDetailStore->fresh(); - $orderDetailStoreForMaster = $orderDetailStore->replicate(); - $orderDetailStoreForMaster->user_id = $bankTransfer->sender_receiver_id; - $orderDetailStoreForMaster->sender_receiver_id = $bankTransfer->user_id; - $orderDetailStoreForMaster->order_detail_amount = $amount; - $orderDetailStoreForMaster->converted_amount = $converted_amount; - $orderDetailStoreForMaster->step = 2; - $orderDetailStoreForMaster->notes = 'Bank Transfer Payment Receive From'.$user_name; - $orderDetailStoreForMaster->save(); - - //For Charge - $bankTransfer->amount = calculate_flat_percent($amount, $serviceStatData['charge']); - $bankTransfer->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['charge']); - $bankTransfer->order_detail_cause_name = 'charge'; - $bankTransfer->order_detail_parent_id = $orderDetailStore->getKey(); - $bankTransfer->notes = 'Bank Transfer Charge Send to '.$master_user_name; - $bankTransfer->step = 3; - $bankTransfer->order_detail_parent_id = $orderDetailStore->getKey(); - $orderDetailStoreForCharge = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($bankTransfer)); - $orderDetailStoreForChargeForMaster = $orderDetailStoreForCharge->replicate(); - $orderDetailStoreForChargeForMaster->user_id = $bankTransfer->sender_receiver_id; - $orderDetailStoreForChargeForMaster->sender_receiver_id = $bankTransfer->user_id; - $orderDetailStoreForChargeForMaster->order_detail_amount = -calculate_flat_percent($amount, $serviceStatData['charge']); - $orderDetailStoreForChargeForMaster->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['charge']); - $orderDetailStoreForChargeForMaster->order_detail_cause_name = 'charge'; - $orderDetailStoreForChargeForMaster->notes = 'Bank Transfer Charge Receive from '.$user_name; - $orderDetailStoreForChargeForMaster->step = 4; - $orderDetailStoreForChargeForMaster->save(); - - //For Discount - $bankTransfer->amount = -calculate_flat_percent($amount, $serviceStatData['discount']); - $bankTransfer->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['discount']); - $bankTransfer->order_detail_cause_name = 'discount'; - $bankTransfer->notes = 'Bank Transfer Discount form '.$master_user_name; - $bankTransfer->step = 5; - //$data->order_detail_parent_id = $orderDetailStore->getKey(); - //$updateData['order_data']['previous_amount'] = 0; - $orderDetailStoreForDiscount = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($bankTransfer)); - $orderDetailStoreForDiscountForMaster = $orderDetailStoreForCharge->replicate(); - $orderDetailStoreForDiscountForMaster->user_id = $bankTransfer->sender_receiver_id; - $orderDetailStoreForDiscountForMaster->sender_receiver_id = $bankTransfer->user_id; - $orderDetailStoreForDiscountForMaster->order_detail_amount = calculate_flat_percent($amount, $serviceStatData['discount']); - $orderDetailStoreForDiscountForMaster->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['discount']); - $orderDetailStoreForDiscountForMaster->order_detail_cause_name = 'discount'; - $orderDetailStoreForDiscountForMaster->notes = 'Bank Transfer Discount to '.$user_name; - $orderDetailStoreForDiscountForMaster->step = 6; - $orderDetailStoreForDiscountForMaster->save(); - - //'Point Transfer Commission Send to ' . $masterUser->name; - //'Point Transfer Commission Receive from ' . $receiver->name; - - $userAccountData['current_amount'] = Transaction::orderDetail()->list([ - 'get_order_detail_amount_sum' => true, - 'user_id' => $bankTransfer->user_id, - 'order_detail_currency' => $bankTransfer->currency, - ]); - - $userAccountData['spent_amount'] = Transaction::orderDetail()->list([ - 'get_order_detail_amount_sum' => true, - 'user_id' => $bankTransfer->user_id, - 'order_id' => $bankTransfer->getKey(), - 'order_detail_currency' => $bankTransfer->currency, - ]); - - return $userAccountData; - - } - - /** - * @return int[] - */ - private function creditTransaction($data): array - { - $userAccountData = [ - 'previous_amount' => null, - 'current_amount' => null, - 'spent_amount' => null, - ]; - - //Collect Current Balance as Previous Balance - $userAccountData['previous_amount'] = Transaction::orderDetail()->list([ - 'get_order_detail_amount_sum' => true, - 'user_id' => $data->user_id, - 'converted_currency' => $data->converted_currency, - ]); - - $serviceStatData = $data->order_data['service_stat_data']; - $master_user_name = $data->order_data['master_user_name']; - $user_name = $data->order_data['user_name']; - - $data->order_detail_cause_name = 'cash_withdraw'; - $data->order_detail_number = $data->order_data['accepted_number']; - $data->order_detail_response_id = $data->order_data['purchase_number']; - $data->notes = 'Bank Transfer Refund From '.$master_user_name; - $orderDetailStore = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($data)); - $orderDetailStore->order_detail_parent_id = $data->order_detail_parent_id = $orderDetailStore->getKey(); - $orderDetailStore->save(); - $orderDetailStore->fresh(); - $amount = $data->amount; - $converted_amount = $data->converted_amount; - $orderDetailStoreForMaster = $orderDetailStore->replicate(); - $orderDetailStoreForMaster->user_id = $data->sender_receiver_id; - $orderDetailStoreForMaster->sender_receiver_id = $data->user_id; - $orderDetailStoreForMaster->order_detail_amount = -$amount; - $orderDetailStoreForMaster->converted_amount = -$converted_amount; - $orderDetailStoreForMaster->step = 2; - $orderDetailStoreForMaster->notes = 'Bank Transfer Send to '.$user_name; - $orderDetailStoreForMaster->save(); - - //For Charge - $data->amount = -calculate_flat_percent($amount, $serviceStatData['charge']); - $data->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['charge']); - $data->order_detail_cause_name = 'charge'; - $data->order_detail_parent_id = $orderDetailStore->getKey(); - $data->notes = 'Bank Transfer Charge Receive from '.$master_user_name; - $data->step = 3; - $data->order_detail_parent_id = $orderDetailStore->getKey(); - $orderDetailStoreForCharge = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($data)); - $orderDetailStoreForChargeForMaster = $orderDetailStoreForCharge->replicate(); - $orderDetailStoreForChargeForMaster->user_id = $data->sender_receiver_id; - $orderDetailStoreForChargeForMaster->sender_receiver_id = $data->user_id; - $orderDetailStoreForChargeForMaster->order_detail_amount = calculate_flat_percent($amount, $serviceStatData['charge']); - $orderDetailStoreForChargeForMaster->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['charge']); - $orderDetailStoreForChargeForMaster->order_detail_cause_name = 'charge'; - $orderDetailStoreForChargeForMaster->notes = 'Bank Transfer Charge Send to '.$user_name; - $orderDetailStoreForChargeForMaster->step = 4; - $orderDetailStoreForChargeForMaster->save(); - - //For Discount - $data->amount = calculate_flat_percent($amount, $serviceStatData['discount']); - $data->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['discount']); - $data->order_detail_cause_name = 'discount'; - $data->notes = 'Bank Transfer Discount form '.$master_user_name; - $data->step = 5; - //$data->order_detail_parent_id = $orderDetailStore->getKey(); - //$updateData['order_data']['previous_amount'] = 0; - $orderDetailStoreForDiscount = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($data)); - $orderDetailStoreForDiscountForMaster = $orderDetailStoreForCharge->replicate(); - $orderDetailStoreForDiscountForMaster->user_id = $data->sender_receiver_id; - $orderDetailStoreForDiscountForMaster->sender_receiver_id = $data->user_id; - $orderDetailStoreForDiscountForMaster->order_detail_amount = -calculate_flat_percent($amount, $serviceStatData['discount']); - $orderDetailStoreForDiscountForMaster->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['discount']); - $orderDetailStoreForDiscountForMaster->order_detail_cause_name = 'discount'; - $orderDetailStoreForDiscountForMaster->notes = 'Bank Transfer Discount to '.$user_name; - $orderDetailStoreForDiscountForMaster->step = 6; - $orderDetailStoreForDiscountForMaster->save(); - - //'Point Transfer Commission Send to ' . $masterUser->name; - //'Point Transfer Commission Receive from ' . $receiver->name; - - $userAccountData['current_amount'] = Transaction::orderDetail()->list([ - 'get_order_detail_amount_sum' => true, - 'user_id' => $data->user_id, - 'converted_currency' => $data->converted_currency, - ]); - - $userAccountData['spent_amount'] = Transaction::orderDetail()->list([ - 'get_order_detail_amount_sum' => true, - 'user_id' => $data->user_id, - 'order_id' => $data->getKey(), - 'converted_currency' => $data->converted_currency, - ]); - - return $userAccountData; - - } +// /** +// * @return int[] +// */ +// public function debitTransaction($bankTransfer): array +// { +// $userAccountData = [ +// 'previous_amount' => null, +// 'current_amount' => null, +// 'spent_amount' => null, +// ]; +// +// //Collect Current Balance as Previous Balance +// $userAccountData['previous_amount'] = Transaction::orderDetail()->list([ +// 'get_order_detail_amount_sum' => true, +// 'user_id' => $bankTransfer->user_id, +// 'order_detail_currency' => $bankTransfer->currency, +// ]); +// +// $serviceStatData = $bankTransfer->order_data['service_stat_data']; +// $master_user_name = $bankTransfer->order_data['master_user_name']; +// $user_name = $bankTransfer->order_data['user_name']; +// +// $amount = $bankTransfer->amount; +// $converted_amount = $bankTransfer->converted_amount; +// $bankTransfer->amount = -$amount; +// $bankTransfer->converted_amount = -$converted_amount; +// $bankTransfer->order_detail_cause_name = 'cash_withdraw'; +// $bankTransfer->order_detail_number = $bankTransfer->order_data['purchase_number']; +// $bankTransfer->order_detail_response_id = $bankTransfer->order_data['purchase_number']; +// $bankTransfer->notes = 'Bank Transfer Payment Send to '.$master_user_name; +// $orderDetailStore = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($bankTransfer)); +// $orderDetailStore->order_detail_parent_id = $bankTransfer->order_detail_parent_id = $orderDetailStore->getKey(); +// $orderDetailStore->save(); +// $orderDetailStore->fresh(); +// $orderDetailStoreForMaster = $orderDetailStore->replicate(); +// $orderDetailStoreForMaster->user_id = $bankTransfer->sender_receiver_id; +// $orderDetailStoreForMaster->sender_receiver_id = $bankTransfer->user_id; +// $orderDetailStoreForMaster->order_detail_amount = $amount; +// $orderDetailStoreForMaster->converted_amount = $converted_amount; +// $orderDetailStoreForMaster->step = 2; +// $orderDetailStoreForMaster->notes = 'Bank Transfer Payment Receive From'.$user_name; +// $orderDetailStoreForMaster->save(); +// +// //For Charge +// $bankTransfer->amount = calculate_flat_percent($amount, $serviceStatData['charge']); +// $bankTransfer->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['charge']); +// $bankTransfer->order_detail_cause_name = 'charge'; +// $bankTransfer->order_detail_parent_id = $orderDetailStore->getKey(); +// $bankTransfer->notes = 'Bank Transfer Charge Send to '.$master_user_name; +// $bankTransfer->step = 3; +// $bankTransfer->order_detail_parent_id = $orderDetailStore->getKey(); +// $orderDetailStoreForCharge = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($bankTransfer)); +// $orderDetailStoreForChargeForMaster = $orderDetailStoreForCharge->replicate(); +// $orderDetailStoreForChargeForMaster->user_id = $bankTransfer->sender_receiver_id; +// $orderDetailStoreForChargeForMaster->sender_receiver_id = $bankTransfer->user_id; +// $orderDetailStoreForChargeForMaster->order_detail_amount = -calculate_flat_percent($amount, $serviceStatData['charge']); +// $orderDetailStoreForChargeForMaster->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['charge']); +// $orderDetailStoreForChargeForMaster->order_detail_cause_name = 'charge'; +// $orderDetailStoreForChargeForMaster->notes = 'Bank Transfer Charge Receive from '.$user_name; +// $orderDetailStoreForChargeForMaster->step = 4; +// $orderDetailStoreForChargeForMaster->save(); +// +// //For Discount +// $bankTransfer->amount = -calculate_flat_percent($amount, $serviceStatData['discount']); +// $bankTransfer->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['discount']); +// $bankTransfer->order_detail_cause_name = 'discount'; +// $bankTransfer->notes = 'Bank Transfer Discount form '.$master_user_name; +// $bankTransfer->step = 5; +// //$data->order_detail_parent_id = $orderDetailStore->getKey(); +// //$updateData['order_data']['previous_amount'] = 0; +// $orderDetailStoreForDiscount = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($bankTransfer)); +// $orderDetailStoreForDiscountForMaster = $orderDetailStoreForCharge->replicate(); +// $orderDetailStoreForDiscountForMaster->user_id = $bankTransfer->sender_receiver_id; +// $orderDetailStoreForDiscountForMaster->sender_receiver_id = $bankTransfer->user_id; +// $orderDetailStoreForDiscountForMaster->order_detail_amount = calculate_flat_percent($amount, $serviceStatData['discount']); +// $orderDetailStoreForDiscountForMaster->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['discount']); +// $orderDetailStoreForDiscountForMaster->order_detail_cause_name = 'discount'; +// $orderDetailStoreForDiscountForMaster->notes = 'Bank Transfer Discount to '.$user_name; +// $orderDetailStoreForDiscountForMaster->step = 6; +// $orderDetailStoreForDiscountForMaster->save(); +// +// //'Point Transfer Commission Send to ' . $masterUser->name; +// //'Point Transfer Commission Receive from ' . $receiver->name; +// +// $userAccountData['current_amount'] = Transaction::orderDetail()->list([ +// 'get_order_detail_amount_sum' => true, +// 'user_id' => $bankTransfer->user_id, +// 'order_detail_currency' => $bankTransfer->currency, +// ]); +// +// $userAccountData['spent_amount'] = Transaction::orderDetail()->list([ +// 'get_order_detail_amount_sum' => true, +// 'user_id' => $bankTransfer->user_id, +// 'order_id' => $bankTransfer->getKey(), +// 'order_detail_currency' => $bankTransfer->currency, +// ]); +// +// return $userAccountData; +// +// } +// +// /** +// * @return int[] +// */ +// private function creditTransaction($data): array +// { +// $userAccountData = [ +// 'previous_amount' => null, +// 'current_amount' => null, +// 'spent_amount' => null, +// ]; +// +// //Collect Current Balance as Previous Balance +// $userAccountData['previous_amount'] = Transaction::orderDetail()->list([ +// 'get_order_detail_amount_sum' => true, +// 'user_id' => $data->user_id, +// 'converted_currency' => $data->converted_currency, +// ]); +// +// $serviceStatData = $data->order_data['service_stat_data']; +// $master_user_name = $data->order_data['master_user_name']; +// $user_name = $data->order_data['user_name']; +// +// $data->order_detail_cause_name = 'cash_withdraw'; +// $data->order_detail_number = $data->order_data['accepted_number']; +// $data->order_detail_response_id = $data->order_data['purchase_number']; +// $data->notes = 'Bank Transfer Refund From '.$master_user_name; +// $orderDetailStore = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($data)); +// $orderDetailStore->order_detail_parent_id = $data->order_detail_parent_id = $orderDetailStore->getKey(); +// $orderDetailStore->save(); +// $orderDetailStore->fresh(); +// $amount = $data->amount; +// $converted_amount = $data->converted_amount; +// $orderDetailStoreForMaster = $orderDetailStore->replicate(); +// $orderDetailStoreForMaster->user_id = $data->sender_receiver_id; +// $orderDetailStoreForMaster->sender_receiver_id = $data->user_id; +// $orderDetailStoreForMaster->order_detail_amount = -$amount; +// $orderDetailStoreForMaster->converted_amount = -$converted_amount; +// $orderDetailStoreForMaster->step = 2; +// $orderDetailStoreForMaster->notes = 'Bank Transfer Send to '.$user_name; +// $orderDetailStoreForMaster->save(); +// +// //For Charge +// $data->amount = -calculate_flat_percent($amount, $serviceStatData['charge']); +// $data->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['charge']); +// $data->order_detail_cause_name = 'charge'; +// $data->order_detail_parent_id = $orderDetailStore->getKey(); +// $data->notes = 'Bank Transfer Charge Receive from '.$master_user_name; +// $data->step = 3; +// $data->order_detail_parent_id = $orderDetailStore->getKey(); +// $orderDetailStoreForCharge = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($data)); +// $orderDetailStoreForChargeForMaster = $orderDetailStoreForCharge->replicate(); +// $orderDetailStoreForChargeForMaster->user_id = $data->sender_receiver_id; +// $orderDetailStoreForChargeForMaster->sender_receiver_id = $data->user_id; +// $orderDetailStoreForChargeForMaster->order_detail_amount = calculate_flat_percent($amount, $serviceStatData['charge']); +// $orderDetailStoreForChargeForMaster->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['charge']); +// $orderDetailStoreForChargeForMaster->order_detail_cause_name = 'charge'; +// $orderDetailStoreForChargeForMaster->notes = 'Bank Transfer Charge Send to '.$user_name; +// $orderDetailStoreForChargeForMaster->step = 4; +// $orderDetailStoreForChargeForMaster->save(); +// +// //For Discount +// $data->amount = calculate_flat_percent($amount, $serviceStatData['discount']); +// $data->converted_amount = calculate_flat_percent($converted_amount, $serviceStatData['discount']); +// $data->order_detail_cause_name = 'discount'; +// $data->notes = 'Bank Transfer Discount form '.$master_user_name; +// $data->step = 5; +// //$data->order_detail_parent_id = $orderDetailStore->getKey(); +// //$updateData['order_data']['previous_amount'] = 0; +// $orderDetailStoreForDiscount = Transaction::orderDetail()->create(Transaction::orderDetail()->orderDetailsDataArrange($data)); +// $orderDetailStoreForDiscountForMaster = $orderDetailStoreForCharge->replicate(); +// $orderDetailStoreForDiscountForMaster->user_id = $data->sender_receiver_id; +// $orderDetailStoreForDiscountForMaster->sender_receiver_id = $data->user_id; +// $orderDetailStoreForDiscountForMaster->order_detail_amount = -calculate_flat_percent($amount, $serviceStatData['discount']); +// $orderDetailStoreForDiscountForMaster->converted_amount = -calculate_flat_percent($converted_amount, $serviceStatData['discount']); +// $orderDetailStoreForDiscountForMaster->order_detail_cause_name = 'discount'; +// $orderDetailStoreForDiscountForMaster->notes = 'Bank Transfer Discount to '.$user_name; +// $orderDetailStoreForDiscountForMaster->step = 6; +// $orderDetailStoreForDiscountForMaster->save(); +// +// //'Point Transfer Commission Send to ' . $masterUser->name; +// //'Point Transfer Commission Receive from ' . $receiver->name; +// +// $userAccountData['current_amount'] = Transaction::orderDetail()->list([ +// 'get_order_detail_amount_sum' => true, +// 'user_id' => $data->user_id, +// 'converted_currency' => $data->converted_currency, +// ]); +// +// $userAccountData['spent_amount'] = Transaction::orderDetail()->list([ +// 'get_order_detail_amount_sum' => true, +// 'user_id' => $data->user_id, +// 'order_id' => $data->getKey(), +// 'converted_currency' => $data->converted_currency, +// ]); +// +// return $userAccountData; +// +// } } diff --git a/src/Services/CashPickupService.php b/src/Services/CashPickupService.php index 07f9948..63dc157 100644 --- a/src/Services/CashPickupService.php +++ b/src/Services/CashPickupService.php @@ -192,24 +192,30 @@ public function create(array $inputs = []): ?BaseModel try { $cashPickup = $this->cashPickupRepository->create($inputs); DB::commit(); - $userUpdatedBalance = $this->debitTransaction($cashPickup); - $senderUpdatedAccount = $senderAccount->toArray(); - $senderUpdatedAccount['user_account_data']['spent_amount'] = (float) $senderUpdatedAccount['user_account_data']['spent_amount'] + (float) $userUpdatedBalance['spent_amount']; - $senderUpdatedAccount['user_account_data']['available_amount'] = (float) $userUpdatedBalance['current_amount']; - - $inputs['order_data']['previous_amount'] = (float) $senderAccount->user_account_data['available_amount']; - $inputs['order_data']['current_amount'] = ((float) $inputs['order_data']['previous_amount'] + (float) $inputs['converted_currency']); - $inputs['timeline'][] = [ - 'message' => 'Deducted '.currency($userUpdatedBalance['spent_amount'], $inputs['currency']).' from user account successfully', - 'flag' => 'info', - 'timestamp' => now(), - ]; - - $cashPickup = $this->cashPickupRepository->update($cashPickup->getKey(), ['order_data' => $inputs['order_data'], 'timeline' => $inputs['timeline']]); - - if (! Transaction::userAccount()->update($senderAccount->getKey(), $senderUpdatedAccount)) { - throw new \Exception('Failed to update user account balance.'); - } + $accounting = Transaction::accounting($cashPickup); + + $accounting->debitTransaction(); + + $accounting->debitBalanceFromUserAccount(); + +// $userUpdatedBalance = $this->debitTransaction($cashPickup); +// $senderUpdatedAccount = $senderAccount->toArray(); +// $senderUpdatedAccount['user_account_data']['spent_amount'] = (float) $senderUpdatedAccount['user_account_data']['spent_amount'] + (float) $userUpdatedBalance['spent_amount']; +// $senderUpdatedAccount['user_account_data']['available_amount'] = (float) $userUpdatedBalance['current_amount']; +// +// $inputs['order_data']['previous_amount'] = (float) $senderAccount->user_account_data['available_amount']; +// $inputs['order_data']['current_amount'] = ((float) $inputs['order_data']['previous_amount'] + (float) $inputs['converted_currency']); +// $inputs['timeline'][] = [ +// 'message' => 'Deducted '.currency($userUpdatedBalance['spent_amount'], $inputs['currency']).' from user account successfully', +// 'flag' => 'info', +// 'timestamp' => now(), +// ]; +// +// $cashPickup = $this->cashPickupRepository->update($cashPickup->getKey(), ['order_data' => $inputs['order_data'], 'timeline' => $inputs['timeline']]); +// +// if (! Transaction::userAccount()->update($senderAccount->getKey(), $senderUpdatedAccount)) { +// throw new \Exception('Failed to update user account balance.'); +// } Transaction::orderQueue()->removeFromQueueUserWise($inputs['user_id']); diff --git a/src/Services/WalletTransferService.php b/src/Services/WalletTransferService.php index cf71e6f..d278139 100644 --- a/src/Services/WalletTransferService.php +++ b/src/Services/WalletTransferService.php @@ -182,24 +182,30 @@ public function create(array $inputs = []): ?BaseModel try { $walletTransfer = $this->walletTransferRepository->create($inputs); DB::commit(); - $userUpdatedBalance = $this->debitTransaction($walletTransfer); - $senderUpdatedAccount = $senderAccount->toArray(); - $senderUpdatedAccount['user_account_data']['spent_amount'] = (float) $senderUpdatedAccount['user_account_data']['spent_amount'] + (float) $userUpdatedBalance['spent_amount']; - $senderUpdatedAccount['user_account_data']['available_amount'] = (float) $userUpdatedBalance['current_amount']; - - $inputs['order_data']['previous_amount'] = (float) $senderAccount->user_account_data['available_amount']; - $inputs['order_data']['current_amount'] = ((float) $inputs['order_data']['previous_amount'] + (float) $inputs['converted_currency']); - $inputs['timeline'][] = [ - 'message' => 'Deducted '.currency($userUpdatedBalance['spent_amount'], $inputs['currency']).' from user account successfully', - 'flag' => 'info', - 'timestamp' => now(), - ]; - - $walletTransfer = $this->walletTransferRepository->update($walletTransfer->getKey(), ['order_data' => $inputs['order_data'], 'timeline' => $inputs['timeline']]); - - if (! Transaction::userAccount()->update($senderAccount->getKey(), $senderUpdatedAccount)) { - throw new \Exception('Failed to update user account balance.'); - } + $accounting = Transaction::accounting($walletTransfer); + + $accounting->debitTransaction(); + + $accounting->debitBalanceFromUserAccount(); + +// $userUpdatedBalance = $this->debitTransaction($walletTransfer); +// $senderUpdatedAccount = $senderAccount->toArray(); +// $senderUpdatedAccount['user_account_data']['spent_amount'] = (float) $senderUpdatedAccount['user_account_data']['spent_amount'] + (float) $userUpdatedBalance['spent_amount']; +// $senderUpdatedAccount['user_account_data']['available_amount'] = (float) $userUpdatedBalance['current_amount']; +// +// $inputs['order_data']['previous_amount'] = (float) $senderAccount->user_account_data['available_amount']; +// $inputs['order_data']['current_amount'] = ((float) $inputs['order_data']['previous_amount'] + (float) $inputs['converted_currency']); +// $inputs['timeline'][] = [ +// 'message' => 'Deducted '.currency($userUpdatedBalance['spent_amount'], $inputs['currency']).' from user account successfully', +// 'flag' => 'info', +// 'timestamp' => now(), +// ]; +// +// $walletTransfer = $this->walletTransferRepository->update($walletTransfer->getKey(), ['order_data' => $inputs['order_data'], 'timeline' => $inputs['timeline']]); +// +// if (! Transaction::userAccount()->update($senderAccount->getKey(), $senderUpdatedAccount)) { +// throw new \Exception('Failed to update user account balance.'); +// } Transaction::orderQueue()->removeFromQueueUserWise($inputs['user_id']);