From d83f5d26330beba2e2ef6008bb975435c3ed51f5 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 15 Mar 2017 17:24:01 +0200 Subject: [PATCH] Working on gateway fees --- app/Models/Traits/ChargesFees.php | 104 ++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 app/Models/Traits/ChargesFees.php diff --git a/app/Models/Traits/ChargesFees.php b/app/Models/Traits/ChargesFees.php new file mode 100644 index 000000000000..7fd8c9f4647a --- /dev/null +++ b/app/Models/Traits/ChargesFees.php @@ -0,0 +1,104 @@ +account->getGatewaySettings($gatewayTypeId); + $fee = 0; + + if (! $settings) { + return false; + } + + if ($settings->fee_amount) { + $fee += $settings->fee_amount; + } + + if ($settings->fee_percent) { + $amount = $this->amount; + if ($item = $this->getGatewayFeeItem()) { + $amount -= $item->amount(); + } + $fee += $amount * $settings->fee_percent / 100; + } + + if ($includeTax) { + $preTaxFee = $fee; + + if ($settings->fee_tax_rate1) { + $fee += $preTaxFee * $settings->fee_tax_rate1 / 100; + } + + if ($settings->fee_tax_rate2) { + $fee += $preTaxFee * $settings->fee_tax_rate2 / 100; + } + } + + return round($fee, 2); + } + + public function getGatewayFeeItem() + { + foreach ($this->invoice_items as $item) { + if ($item->invoice_item_type_id == INVOICE_ITEM_TYPE_GATEWAY_FEE) { + return $item; + } + } + + return false; + } + + public function getGatewayFee() + { + $item = $this->getGatewayFeeItem(); + + return $item ? $item->cost : 0; + } + + public function setGatewayFee($gatewayTypeId) + { + $settings = $this->account->getGatewaySettings($gatewayTypeId); + $fee = $this->calcGatewayFee($gatewayTypeId); + $feePreTax = $this->calcGatewayFee($gatewayTypeId, false); + $item = $this->getGatewayFeeItem(); + + if ($fee == ($item ? $item->amount() : 0)) { + return; + } + + if ($item) { + $this->amount -= $item->amount(); + $this->balance -= $item->amount(); + if (! $fee) { + $item->forceDelete(); + } + } + + if ($fee) { + $item = $item ?: InvoiceItem::createNew($this); + $item->invoice_item_type_id = INVOICE_ITEM_TYPE_GATEWAY_FEE; + $item->product_key = trans('texts.fee'); + $item->notes = ''; + $item->cost = $feePreTax; + $item->qty = 1; + $item->tax_rate1 = $settings->fee_tax_rate1; + $item->tax_name1 = $settings->fee_tax_name1; + $item->tax_rate2 = $settings->fee_tax_rate2; + $item->tax_name2 = $settings->fee_tax_name2; + $this->invoice_items()->save($item); + } + + $this->amount += $fee; + $this->balance += $fee; + $this->save(); + } +}