diff --git a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php index 3f052352..75516fdf 100644 --- a/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php +++ b/app/Classes/Modules/Transactions/Processors/CreateSupplierTransactionProcessor.php @@ -85,7 +85,7 @@ class CreateSupplierTransactionProcessor $billNumber = $this->generatesTransactionBillNumber->execute('SPLR-'); $constant = SegmentConstant::where('reference', SegmentConstants::SERVICE_CHARGE)->where('detail->id', $supplier->id)->first(); - $serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate, $constant ? (float) $constant->detail->amount : 0); + $serviceCharge = $this->calculatesTransactionServiceCharge->execute($payment->original_amount, $rate, $constant); $object = new TransactionObject($billNumber, TransactionType::BILL, $supplier->id, 1, $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, @@ -97,7 +97,7 @@ class CreateSupplierTransactionProcessor $this->pushBill($billTransaction); $transferFeeNumber = $this->generatesTransactionBillNumber->execute('TRFR-'); - $transferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount); + $transferFee = $this->calculatesTransactionTransferFee->execute($payment->original_amount, $constant); $object = new TransactionObject($transferFeeNumber, TransactionType::TRANSFER_FEE, 1, $supplier->id, $supplier->banks()->where('default', true)->first()->id, PaymentMethodType::CASH, $payment->original_amount, $payment->original_amount, $payment->original_currency_id, $payment->original_currency_id, diff --git a/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php b/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php index 8ddb80c9..e04edee2 100644 --- a/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php +++ b/app/Classes/Modules/Transactions/Services/CalculatesTransactionServiceCharge.php @@ -2,18 +2,38 @@ namespace App\Classes\Modules\Transactions\Services; +use App\Models\SegmentConstant; + class CalculatesTransactionServiceCharge { + /** @var CalculatesTransactionTransferFee */ + private $calculatesTransactionTransferFee; + + /** + * CalculatesTransactionServiceCharge constructor. + * @param CalculatesTransactionTransferFee $calculatesTransactionTransferFee + */ + public function __construct(CalculatesTransactionTransferFee $calculatesTransactionTransferFee) + { + $this->calculatesTransactionTransferFee = $calculatesTransactionTransferFee; + } + /** * @param float $amount * @param float $rate - * @param float $service_charge - * @param float $transfer_fee + * @param SegmentConstant|null $service_charge * @return float */ - public function execute(float $amount, float $rate, ?float $service_charge = 0, ?float $transfer_fee = 0.00) { - return (($amount + $transfer_fee) * (1/$rate)) * $service_charge / 100; + public function execute(float $amount, float $rate, ?SegmentConstant $service_charge) { + + if(!$service_charge) { + return 0; + } + + $transfer_fee = $this->calculatesTransactionTransferFee->execute($amount, $service_charge); + return $service_charge->detail->amount->type === 'percentage' ? (($amount + $transfer_fee) * ( (float) $service_charge->detail->amount->value /100) * (1/$rate)) : (float) $service_charge->detail->amount->value; + } } \ No newline at end of file diff --git a/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php b/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php index b5feb245..5a02a394 100644 --- a/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php +++ b/app/Classes/Modules/Transactions/Services/CalculatesTransactionTransferFee.php @@ -2,16 +2,23 @@ namespace App\Classes\Modules\Transactions\Services; +use App\Models\SegmentConstant; + class CalculatesTransactionTransferFee { /** * @param float $amount - * @param float $transfer_fee + * @param SegmentConstant|null $service_charge * @return float */ - public function execute(float $amount, ?float $transfer_fee = 0) { - return $amount * ($transfer_fee / 100); + public function execute(float $amount, ?SegmentConstant $service_charge) { + + if(!$service_charge) { + return 0; + } + + return $service_charge->detail->transferFee->type === 'percentage' ? $amount * ((float) $service_charge->detail->transferFee->value /100) : (float) $service_charge->detail->transferFee->value; } } \ No newline at end of file diff --git a/database/seeds/UpdateTransactionBillOwnerSeeder.php b/database/seeds/UpdateTransactionBillOwnerSeeder.php index 7f04a0fc..1ced925d 100644 --- a/database/seeds/UpdateTransactionBillOwnerSeeder.php +++ b/database/seeds/UpdateTransactionBillOwnerSeeder.php @@ -1,5 +1,6 @@ get(); + $bookings = Booking::all(); - foreach ($transaction as $key => $row) { - $key = 0; - $bills = $row->booking->transactions()->bills()->where('original_amount', '=', $row->original_amount)->get(); - if(count($bills) > 1){ $key = $bills->search(function($bill)use($row){ return $bill->id === $row->id; }); } - $paymentTransaction = $row->booking->transactions()->payments()->complete()->where('original_amount', '=', $row->original_amount)->skip($key)->first(); + foreach ($bookings as $booking) { - $row->owner_type = Transaction::class; - $row->owner_id = $paymentTransaction->id; - $row->updated_at = $row->updated_at; - $row->update(); + $transactions = $booking->transactions()->bills()->get(); + foreach ($transactions as $row) { + $key = 0; + $bills = $booking->transactions()->bills()->where('original_amount', '=', $row->original_amount)->get(); + if(count($bills) > 1){ $key = $bills->search(function($bill)use($row){ return $bill->id === $row->id; }); } + $paymentTransaction = $booking->transactions()->payments()->complete()->where('original_amount', '=', $row->original_amount)->skip($key)->first(); + + $row->owner_type = Transaction::class; + $row->owner_id = $paymentTransaction->id; + $row->updated_at = $row->updated_at; + $row->update(); + } } DB::commit(); diff --git a/resources/assets/vue/components/companies/elements/SupplierComponent.vue b/resources/assets/vue/components/companies/elements/SupplierComponent.vue index b25e9ae7..f6944c4c 100644 --- a/resources/assets/vue/components/companies/elements/SupplierComponent.vue +++ b/resources/assets/vue/components/companies/elements/SupplierComponent.vue @@ -22,7 +22,7 @@ -