mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Test for gateway fees appending to invoice
This commit is contained in:
parent
1c55b529a0
commit
37c5a7adb5
@ -117,10 +117,10 @@ class PaymentController extends Controller
|
|||||||
});
|
});
|
||||||
|
|
||||||
if($invoice)
|
if($invoice)
|
||||||
$invoice->service()->addGatewayFee($payable_invoice['amount']);
|
$invoice->service()->addGatewayFee($payable_invoice['amount'])->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Format invoices*/
|
/*Format invoices we need to use fresh() here to bring in the gateway fees*/
|
||||||
$invoices->fresh()->map(function ($invoice) {
|
$invoices->fresh()->map(function ($invoice) {
|
||||||
$invoice->balance = Number::formatMoney($invoice->balance, $invoice->client);
|
$invoice->balance = Number::formatMoney($invoice->balance, $invoice->client);
|
||||||
$invoice->due_date = $this->formatDate($invoice->due_date, $invoice->client->date_format());
|
$invoice->due_date = $this->formatDate($invoice->due_date, $invoice->client->date_format());
|
||||||
|
@ -211,6 +211,20 @@ class CompanyGateway extends BaseModel
|
|||||||
return $this->getConfigField('publishableKey');
|
return $this->getConfigField('publishableKey');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getFeesAndLimits()
|
||||||
|
{
|
||||||
|
if (is_null($this->fees_and_limits))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$fees_and_limits = new \stdClass;
|
||||||
|
|
||||||
|
foreach($this->fees_and_limits as $key => $value) {
|
||||||
|
$fees_and_limits = $this->fees_and_limits->{$key};
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fees_and_limits;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the formatted fee amount for the gateway
|
* Returns the formatted fee amount for the gateway
|
||||||
*
|
*
|
||||||
@ -238,15 +252,11 @@ class CompanyGateway extends BaseModel
|
|||||||
|
|
||||||
public function calcGatewayFee($amount)
|
public function calcGatewayFee($amount)
|
||||||
{
|
{
|
||||||
if (is_null($this->fees_and_limits)) {
|
|
||||||
|
$fees_and_limits = $this->getFeesAndLimits();
|
||||||
|
|
||||||
|
if(!$fees_and_limits)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
$fees_and_limits = new \stdClass;
|
|
||||||
|
|
||||||
foreach($this->fees_and_limits as $key => $value) {
|
|
||||||
$fees_and_limits = $this->fees_and_limits->{$key};
|
|
||||||
}
|
|
||||||
|
|
||||||
$fee = 0;
|
$fee = 0;
|
||||||
|
|
||||||
|
@ -45,6 +45,8 @@ class AddGatewayFee extends AbstractService
|
|||||||
{
|
{
|
||||||
$gateway_fee = $this->company_gateway->calcGatewayFee($this->amount);
|
$gateway_fee = $this->company_gateway->calcGatewayFee($this->amount);
|
||||||
|
|
||||||
|
$this->cleanPendingGatewayFees();
|
||||||
|
|
||||||
if($gateway_fee > 0)
|
if($gateway_fee > 0)
|
||||||
return $this->processGatewayFee($gateway_fee);
|
return $this->processGatewayFee($gateway_fee);
|
||||||
|
|
||||||
@ -53,15 +55,69 @@ class AddGatewayFee extends AbstractService
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function cleanPendingGatewayFees()
|
||||||
|
{
|
||||||
|
$invoice_items = $this->invoice->line_items;
|
||||||
|
|
||||||
|
$invoice_items = collect($invoice_items)->filter(function ($item){
|
||||||
|
return $item->type_id != 3;
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->invoice->line_items = $invoice_items;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
private function processGatewayFee($gateway_fee)
|
private function processGatewayFee($gateway_fee)
|
||||||
{
|
{
|
||||||
$invoice_item = new InvoiceItem;
|
$invoice_item = new InvoiceItem;
|
||||||
$invoice_item->type_id = 3;
|
$invoice_item->type_id = 3;
|
||||||
$invoice_item->notes = ctrans('texts.Gateway Fee Surcharge');
|
$invoice_item->product_key = ctrans('texts.surcharge');
|
||||||
|
$invoice_item->notes = ctrans('texts.online_payment_surcharge');
|
||||||
|
$invoice_item->quantity = 1;
|
||||||
|
$invoice_item->cost = $gateway_fee;
|
||||||
|
|
||||||
|
if($fees_and_limits = $this->company_gateway->getFeesAndLimits())
|
||||||
|
{
|
||||||
|
$invoice_item->tax_rate1 = $fees_and_limits->fee_tax_rate1;
|
||||||
|
$invoice_item->tax_rate2 = $fees_and_limits->fee_tax_rate2;
|
||||||
|
$invoice_item->tax_rate3 = $fees_and_limits->fee_tax_rate3;
|
||||||
|
}
|
||||||
|
|
||||||
|
$invoice_items = $this->invoice->line_items;
|
||||||
|
$invoice_items[] = $invoice_item;
|
||||||
|
|
||||||
|
$this->invoice->line_items = $invoice_items;
|
||||||
|
|
||||||
|
$this->invoice = $this->invoice->calc()->getInvoice();
|
||||||
|
|
||||||
|
return $this->invoice;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function processGatewayDiscount($gateway_fee)
|
private function processGatewayDiscount($gateway_fee)
|
||||||
{
|
{
|
||||||
|
$invoice_item = new InvoiceItem;
|
||||||
|
$invoice_item->type_id = 3;
|
||||||
|
$invoice_item->product_key = ctrans('texts.discount');
|
||||||
|
$invoice_item->notes = ctrans('texts.online_payment_discount');
|
||||||
|
$invoice_item->quantity = 1;
|
||||||
|
$invoice_item->cost = $gateway_fee;
|
||||||
|
|
||||||
|
if($fees_and_limits = $this->company_gateway->getFeesAndLimits())
|
||||||
|
{
|
||||||
|
$invoice_item->tax_rate1 = $fees_and_limits->fee_tax_rate1;
|
||||||
|
$invoice_item->tax_rate2 = $fees_and_limits->fee_tax_rate2;
|
||||||
|
$invoice_item->tax_rate3 = $fees_and_limits->fee_tax_rate3;
|
||||||
|
}
|
||||||
|
|
||||||
|
$invoice_items = $this->invoice->line_items;
|
||||||
|
$invoice_items[] = $invoice_item;
|
||||||
|
|
||||||
|
$this->invoice->line_items = $invoice_items;
|
||||||
|
|
||||||
|
$this->invoice = $this->invoice->calc()->getInvoice();
|
||||||
|
|
||||||
|
return $this->invoice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ class InvoiceService
|
|||||||
|
|
||||||
public function addGatewayFee(CompanyGateway $company_gateway, float $amount)
|
public function addGatewayFee(CompanyGateway $company_gateway, float $amount)
|
||||||
{
|
{
|
||||||
$this->invoice = (new AddGatewayFee($company_gateway, $this->invoice, $amoun))->run();
|
$this->invoice = (new AddGatewayFee($company_gateway, $this->invoice, $amount))->run();
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@ class CompanyGatewayTest extends TestCase
|
|||||||
$data[1]['fee_tax_rate2'] = '';
|
$data[1]['fee_tax_rate2'] = '';
|
||||||
$data[1]['fee_tax_name3'] = '';
|
$data[1]['fee_tax_name3'] = '';
|
||||||
$data[1]['fee_tax_rate3'] = 0;
|
$data[1]['fee_tax_rate3'] = 0;
|
||||||
|
$data[1]['fee_cap'] = 0;
|
||||||
|
|
||||||
$cg = new CompanyGateway;
|
$cg = new CompanyGateway;
|
||||||
$cg->company_id = $this->company->id;
|
$cg->company_id = $this->company->id;
|
||||||
@ -107,4 +108,42 @@ class CompanyGatewayTest extends TestCase
|
|||||||
|
|
||||||
return $passes;
|
return $passes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFeesAreAppendedToInvoice()
|
||||||
|
{
|
||||||
|
|
||||||
|
$data = [];
|
||||||
|
$data[1]['min_limit'] = -1;
|
||||||
|
$data[1]['max_limit'] = -1;
|
||||||
|
$data[1]['fee_amount'] = 1.00;
|
||||||
|
$data[1]['fee_percent'] = 0.000;
|
||||||
|
$data[1]['fee_tax_name1'] = '';
|
||||||
|
$data[1]['fee_tax_rate1'] = 0;
|
||||||
|
$data[1]['fee_tax_name2'] = '';
|
||||||
|
$data[1]['fee_tax_rate2'] = 0;
|
||||||
|
$data[1]['fee_tax_name3'] = '';
|
||||||
|
$data[1]['fee_tax_rate3'] = 0;
|
||||||
|
$data[1]['fee_cap'] = 0;
|
||||||
|
|
||||||
|
$cg = new CompanyGateway;
|
||||||
|
$cg->company_id = $this->company->id;
|
||||||
|
$cg->user_id = $this->user->id;
|
||||||
|
$cg->gateway_key = 'd14dd26a37cecc30fdd65700bfb55b23';
|
||||||
|
$cg->require_cvv = true;
|
||||||
|
$cg->show_billing_address = true;
|
||||||
|
$cg->show_shipping_address = true;
|
||||||
|
$cg->update_details = true;
|
||||||
|
$cg->config = encrypt(config('ninja.testvars.stripe'));
|
||||||
|
$cg->fees_and_limits = $data;
|
||||||
|
$cg->save();
|
||||||
|
|
||||||
|
$balance = $this->invoice->balance;
|
||||||
|
|
||||||
|
$this->invoice = $this->invoice->service()->addGatewayFee($cg, $this->invoice->balance)->save();
|
||||||
|
$this->invoice = $this->invoice->calc()->getInvoice();
|
||||||
|
|
||||||
|
$items = $this->invoice->line_items;
|
||||||
|
|
||||||
|
$this->assertEquals(($balance+1), $this->invoice->balance);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user