diff --git a/app/Transformers/CompanyGatewayTransformer.php b/app/Transformers/CompanyGatewayTransformer.php index e14c9ffa0d81..6b42722eeaa9 100644 --- a/app/Transformers/CompanyGatewayTransformer.php +++ b/app/Transformers/CompanyGatewayTransformer.php @@ -64,6 +64,7 @@ class CompanyGatewayTransformer extends EntityTransformer 'custom_value4' => $company_gateway->custom_value4 ?: '', 'label' => (string)$company_gateway->label ?: '', 'token_billing' => (string)$company_gateway->token_billing, + 'test_mode' => (bool) $company_gateway->isTestMode(), ]; } diff --git a/tests/Feature/CompanyGatewayTest.php b/tests/Feature/CompanyGatewayTest.php index f874653153af..94747464121d 100644 --- a/tests/Feature/CompanyGatewayTest.php +++ b/tests/Feature/CompanyGatewayTest.php @@ -146,4 +146,87 @@ class CompanyGatewayTest extends TestCase $this->assertEquals(($balance+1), $this->invoice->balance); } + + public function testProRataGatewayFees() + { + + $data = []; + $data[1]['min_limit'] = -1; + $data[1]['max_limit'] = -1; + $data[1]['fee_amount'] = 1.00; + $data[1]['fee_percent'] = 2; + $data[1]['fee_tax_name1'] = 'GST'; + $data[1]['fee_tax_rate1'] = 10; + $data[1]['fee_tax_name2'] = 'GST'; + $data[1]['fee_tax_rate2'] = 10; + $data[1]['fee_tax_name3'] = 'GST'; + $data[1]['fee_tax_rate3'] = 10; + $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(); + + + $total = 10.93; + $total_invoice_count = 5; + $total_gateway_fee = round($cg->calcGatewayFee($total),2); + + $this->assertEquals(1.58, $total_gateway_fee); + + /*simple pro rata*/ + $fees_and_limits = $cg->getFeesAndLimits(); + + + /*Calculate all subcomponents of the fee*/ + + // $fee_component_amount = $fees_and_limits->fee_amount ?: 0; + // $fee_component_percent = $fees_and_limits->fee_percent ? ($total * $fees_and_limits->fee_percent / 100) : 0; + + // $combined_fee_component = $fee_component_amount + $fee_component_percent; + + // $fee_component_tax_name1 = $fees_and_limits->fee_tax_name1 ?: ''; + // $fee_component_tax_rate1 = $fees_and_limits->fee_tax_rate1 ? ($combined_fee_component * $fees_and_limits->fee_tax_rate1 / 100) : 0; + + // $fee_component_tax_name2 = $fees_and_limits->fee_tax_name2 ?: ''; + // $fee_component_tax_rate2 = $fees_and_limits->fee_tax_rate2 ? ($combined_fee_component * $fees_and_limits->fee_tax_rate2 / 100) : 0; + + // $fee_component_tax_name3 = $fees_and_limits->fee_tax_name3 ?: ''; + // $fee_component_tax_rate3 = $fees_and_limits->fee_tax_rate3 ? ($combined_fee_component * $fees_and_limits->fee_tax_rate3 / 100) : 0; + + + + + + // $pro_rata_fee = round($total_gateway_fee / $total_invoice_count,2); + + + // while($pro_rata_fee * $total_invoice_count != $total_gateway_fee) { + + // //nudge one pro rata fee until we get the desired amount + // $sub_total_fees = ($pro_rata_fee*($total_invoice_count--)); + + // //work out if we have to nudge up or down + + // if($pro_rata_fee*$total_invoice_count > $total_gateway_fee) { + // //nudge DOWN + // $pro_rata_fee - 0.01; //this will break if the currency doesn't have decimals + // } + // else { + // //nudge UP + // } + + // } + + // $this->assertEquals(1.56, $pro_rata_fee*$total_invoice_count); + + } } \ No newline at end of file