mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-05 18:52:44 +01:00
Invoice Calculations (#2985)
* Fixes for invoice item line totals * Refactoring invoice calculations * Update api-docs * Fixes for invoice calculations * remove tests * fixes for config files
This commit is contained in:
parent
8de17e4b5b
commit
1c21b6dc7c
@ -59,7 +59,7 @@ class InvoiceItemFactory
|
||||
$item->quantity = $faker->numberBetween(1,10);
|
||||
$item->cost = $faker->randomFloat(2, 1, 1000);
|
||||
$item->line_total = $item->quantity * $item->cost;
|
||||
$item->is_amount_discount = $faker->boolean();
|
||||
$item->is_amount_discount = false;
|
||||
$item->discount = $faker->numberBetween(1,10);
|
||||
$item->notes = $faker->realText(20);
|
||||
$item->product_key = $faker->word();
|
||||
|
31
app/Helpers/Invoice/Discounter.php
Normal file
31
app/Helpers/Invoice/Discounter.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com)
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2019. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://opensource.org/licenses/AAL
|
||||
*/
|
||||
|
||||
namespace App\Helpers\Invoice;
|
||||
|
||||
/**
|
||||
* Class for discount calculations
|
||||
*/
|
||||
trait Discounter
|
||||
{
|
||||
|
||||
public function discount($amount, $discount, $is_amount_discount)
|
||||
{
|
||||
|
||||
if($is_amount_discount){
|
||||
return $discount;
|
||||
}
|
||||
else {
|
||||
return round($amount * ($discount / 100), 2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace App\Helpers\Invoice;
|
||||
|
||||
use App\Helpers\Invoice\Discounter;
|
||||
use App\Helpers\Invoice\InvoiceItemCalc;
|
||||
use App\Models\Invoice;
|
||||
use App\Utils\Traits\NumberFormatter;
|
||||
@ -24,6 +25,7 @@ class InvoiceCalc
|
||||
{
|
||||
|
||||
use NumberFormatter;
|
||||
use Discounter;
|
||||
|
||||
protected $invoice;
|
||||
|
||||
@ -31,6 +33,8 @@ class InvoiceCalc
|
||||
|
||||
private $line_items;
|
||||
|
||||
private $item_discount;
|
||||
|
||||
private $balance;
|
||||
|
||||
private $paid_to_date;
|
||||
@ -47,6 +51,8 @@ class InvoiceCalc
|
||||
|
||||
private $total_taxes;
|
||||
|
||||
private $total_tax_map;
|
||||
|
||||
private $total_discount;
|
||||
|
||||
|
||||
@ -59,8 +65,9 @@ class InvoiceCalc
|
||||
{
|
||||
|
||||
$this->invoice = $invoice;
|
||||
|
||||
$this->settings = $settings;
|
||||
|
||||
|
||||
$this->tax_map = new Collection;
|
||||
|
||||
}
|
||||
@ -104,19 +111,12 @@ class InvoiceCalc
|
||||
*/
|
||||
private function calcDiscount()
|
||||
{
|
||||
if ($this->invoice->discount != 0) {
|
||||
|
||||
if ($this->invoice->is_amount_discount) {
|
||||
$this->setTotalDiscount($this->discount($this->getSubTotal(), $this->invoice->discount, $this->invoice->is_amount_discount));
|
||||
|
||||
$this->total -= $this->invoice->discount;
|
||||
$this->setTotal( $this->getTotal() - $this->getTotalDiscount() );
|
||||
|
||||
} else {
|
||||
|
||||
$this->total -= round($this->total * ($this->invoice->discount / 100), 2);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
/* Reduce all taxes */
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -132,9 +132,9 @@ class InvoiceCalc
|
||||
|
||||
if(isset($this->invoice->id) && $this->invoice->id >= 1)
|
||||
{
|
||||
$this->balance = round($this->total - ($this->invoice->amount - $this->invoice->balance), 2);
|
||||
$this->balance = round($this->getTotal() - ($this->invoice->amount - $this->invoice->balance), 2);
|
||||
} else {
|
||||
$this->balance = $this->total;
|
||||
$this->balance = $this->getTotal();
|
||||
}
|
||||
|
||||
return $this;
|
||||
@ -151,23 +151,26 @@ class InvoiceCalc
|
||||
{
|
||||
|
||||
// custom fields charged taxes
|
||||
if (isset($this->invoice->custom_value1) && isset($this->settings->custom_invoice_taxes1)) {
|
||||
$this->total += $this->invoice->custom_value1;
|
||||
if (isset($this->invoice->custom_value1) && property_exists($this->settings, 'custom_invoice_taxes1') && $this->settings->custom_invoice_taxes1 === true ) {
|
||||
$this->setTotal($this->getTotal() + $this->invoice->custom_value1);
|
||||
}
|
||||
if (isset($this->invoice->custom_value2) && isset($this->settings->custom_invoice_taxes2)) {
|
||||
$this->total += $this->invoice->custom_value2;
|
||||
if (isset($this->invoice->custom_value2) && property_exists($this->settings, 'custom_invoice_taxes1') && $this->settings->custom_invoice_taxes2 === true) {
|
||||
$this->setTotal($this->getTotal() + $this->invoice->custom_value2);
|
||||
}
|
||||
// \Log::error("pre calc taxes = ".$this->getTotal());
|
||||
|
||||
$this->calcTaxes();
|
||||
|
||||
// custom fields not charged taxes
|
||||
if (isset($this->invoice->custom_value1) && ! $this->settings->custom_invoice_taxes1) {
|
||||
$this->total += $this->invoice->custom_value1;
|
||||
if (isset($this->invoice->custom_value1) && property_exists($this->settings, 'custom_invoice_taxes1') && $this->settings->custom_invoice_taxes1 !== true) {
|
||||
$this->setTotal($this->getTotal() + $this->invoice->custom_value1);
|
||||
}
|
||||
if (isset($this->invoice->custom_value2) && ! $this->settings->custom_invoice_taxes2) {
|
||||
$this->total += $this->invoice->custom_value2;
|
||||
|
||||
if (isset($this->invoice->custom_value2) && property_exists($this->settings, 'custom_invoice_taxes1') && $this->settings->custom_invoice_taxes2 !== true) {
|
||||
$this->setTotal($this->getTotal() + $this->invoice->custom_value2);
|
||||
}
|
||||
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@ -178,10 +181,33 @@ class InvoiceCalc
|
||||
{
|
||||
|
||||
if (property_exists($this->settings, 'inclusive_taxes') && ! $this->settings->inclusive_taxes) {
|
||||
$taxAmount1 = round($this->total * ($this->invoice->tax_rate1 ? $this->invoice->tax_rate1 : 0) / 100, 2);
|
||||
$taxAmount2 = round($this->total * ($this->invoice->tax_rate2 ? $this->invoice->tax_rate2 : 0) / 100, 2);
|
||||
$this->total_taxes = round($taxAmount1 + $taxAmount2, 2) + $this->total_item_taxes;
|
||||
$this->total += $this->total_taxes;
|
||||
|
||||
$taxAmount1 = round($this->getSubTotal() * (($this->invoice->tax_rate1 ? $this->invoice->tax_rate1 : 0) / 100), 2);
|
||||
$taxAmount1 -= $this->discount($taxAmount1, $this->invoice->discount, $this->invoice->is_amount_discount);
|
||||
|
||||
$tmp_array = [];
|
||||
|
||||
if($taxAmount1 > 0)
|
||||
$tmp_array[] = ['name' => $this->invoice->tax_name1 . ' ' . $this->invoice->tax_rate1.'%', 'total' => $taxAmount1];
|
||||
|
||||
$taxAmount2 = round($this->getSubTotal() * (($this->invoice->tax_rate2 ? $this->invoice->tax_rate2 : 0) / 100), 2);
|
||||
$taxAmount2 -= $this->discount($taxAmount2, $this->invoice->discount, $this->invoice->is_amount_discount);
|
||||
|
||||
if($taxAmount2 > 0)
|
||||
$tmp_array[] = ['name' => $this->invoice->tax_name2 . ' ' . $this->invoice->tax_rate2.'%', 'total' => $taxAmount2];
|
||||
|
||||
$taxAmount3 = round($this->getSubTotal() * (($this->invoice->tax_rate3 ? $this->invoice->tax_rate3 : 0) / 100), 2);
|
||||
$taxAmount3 -= $this->discount($taxAmount3, $this->invoice->discount, $this->invoice->is_amount_discount);
|
||||
|
||||
if($taxAmount3 > 0)
|
||||
$tmp_array[] = ['name' => $this->invoice->tax_name3 . ' ' . $this->invoice->tax_rate3.'%', 'total' => $taxAmount3];
|
||||
|
||||
|
||||
$this->setTotalTaxMap($tmp_array);
|
||||
|
||||
$this->setItemTotalTaxes($this->getItemTotalTaxes() + $taxAmount1 + $taxAmount2 + $taxAmount3);
|
||||
|
||||
$this->setTotal($this->getTotal() + $this->getItemTotalTaxes());
|
||||
}
|
||||
|
||||
return $this;
|
||||
@ -205,7 +231,6 @@ class InvoiceCalc
|
||||
$item_calc = new InvoiceItemCalc($item, $this->settings, $this->invoice);
|
||||
$item_calc->process();
|
||||
|
||||
|
||||
$new_line_items[] = $item_calc->getLineItem();
|
||||
|
||||
//set collection of itemised taxes
|
||||
@ -214,13 +239,15 @@ class InvoiceCalc
|
||||
//set running total of taxes
|
||||
$this->total_item_taxes += $item_calc->getTotalTaxes();
|
||||
|
||||
//set running total of discounts
|
||||
$this->total_discount += $item_calc->getTotalDiscounts();
|
||||
$this->setItemTotalTaxes($this->getItemTotalTaxes() + ($item_calc->getTotalTaxes() - $this->discount($item_calc->getTotalTaxes(), $this->invoice->discount, $this->invoice->is_amount_discount)));
|
||||
|
||||
//set running total of item discounts
|
||||
$this->item_discount += $item_calc->getTotalDiscounts();
|
||||
|
||||
//set running subtotal
|
||||
$this->sub_total += $item_calc->getLineTotal();
|
||||
$this->setSubTotal($this->getSubTotal() + $item_calc->getLineTotal());
|
||||
|
||||
$this->total += $item_calc->getLineTotal();
|
||||
$this->setTotal($this->getTotal() + $item_calc->getLineTotal());
|
||||
|
||||
}
|
||||
|
||||
@ -246,6 +273,18 @@ class InvoiceCalc
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTotalTaxMap()
|
||||
{
|
||||
return $this->total_tax_map;
|
||||
}
|
||||
|
||||
public function setTotalTaxMap($value)
|
||||
{
|
||||
$this->total_tax_map = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sums and reduces the line item taxes
|
||||
*
|
||||
@ -270,7 +309,7 @@ class InvoiceCalc
|
||||
$total_line_tax = $values->filter(function ($value, $k) use($key){
|
||||
return $value['key'] == $key;
|
||||
})->sum('total');
|
||||
|
||||
|
||||
$tax_array[] = ['name' => $tax_name, 'total' => $total_line_tax];
|
||||
|
||||
}
|
||||
@ -280,6 +319,14 @@ class InvoiceCalc
|
||||
|
||||
}
|
||||
|
||||
private function adjustTaxesWithDiscount($line_taxes)
|
||||
{\Log::error($line_taxes);
|
||||
return $line_taxes->transform(function($line_tax){
|
||||
\Log::error($line_tax['tax_name'] . " " . $line_tax['total']. " ". $this->discount($line_tax['total'], $this->invoice->discount, $this->invoice->is_amount_discount));
|
||||
return $line_tax['total'] -= $this->discount($line_tax['total'], $this->invoice->discount, $this->invoice->is_amount_discount);
|
||||
});
|
||||
}
|
||||
|
||||
public function setTaxMap($value)
|
||||
{
|
||||
$htis->tax_map = $value;
|
||||
@ -299,12 +346,12 @@ class InvoiceCalc
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTotalTaxes()
|
||||
public function getItemTotalTaxes()
|
||||
{
|
||||
return $this->total_taxes;
|
||||
}
|
||||
|
||||
public function setTotalTaxes($value)
|
||||
public function setItemTotalTaxes($value)
|
||||
{
|
||||
$this->total_taxes = $value;
|
||||
|
||||
@ -323,7 +370,11 @@ class InvoiceCalc
|
||||
|
||||
public function setTotal($value)
|
||||
{
|
||||
\Log::error($this->total . " sets to " . $value);
|
||||
|
||||
$this->total = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getBalance()
|
||||
@ -334,6 +385,8 @@ class InvoiceCalc
|
||||
public function setBalance($value)
|
||||
{
|
||||
$this->balance = $value;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getInvoice()
|
||||
|
@ -45,15 +45,17 @@ class InvoiceItemCalc
|
||||
$this->tax_collection = collect([]);
|
||||
|
||||
$this->invoice = $invoice;
|
||||
|
||||
$this->currency = $invoice->client->currency();
|
||||
}
|
||||
|
||||
public function process()
|
||||
{
|
||||
|
||||
$this->line_total = $this->formatValue($this->item->cost, $this->invoice->client->currency()->precision) * $this->formatValue($this->item->quantity, $this->invoice->client->currency()->precision);
|
||||
$this->setLineTotal($this->formatValue($this->item->cost, $this->currency->precision) * $this->formatValue($this->item->quantity, $this->currency->precision));
|
||||
|
||||
$this->setDiscount()
|
||||
->calcTaxes();
|
||||
->calcTaxes();
|
||||
|
||||
}
|
||||
|
||||
@ -65,22 +67,19 @@ class InvoiceItemCalc
|
||||
|
||||
if($this->item->is_amount_discount)
|
||||
{
|
||||
$discount = $this->formatValue($this->item->discount, $this->invoice->client->currency()->precision);
|
||||
|
||||
$this->line_total -= $discount;
|
||||
|
||||
$this->total_discounts += $discount;
|
||||
$discountedTotal = $this->getLineTotal() - $this->formatValue($this->item->discount, $this->currency->precision);
|
||||
}
|
||||
else
|
||||
{
|
||||
$discount = $this->formatValue(($this->line_total * $this->item->discount / 100), $this->invoice->client->currency()->precision);
|
||||
|
||||
$this->line_total -= $discount;
|
||||
|
||||
$this->total_discounts += $discount;
|
||||
|
||||
{
|
||||
$discountedTotal = $this->getLineTotal() - $this->formatValue(round($this->getLineTotal() * ($this->item->discount / 100),2), $this->currency->precision);
|
||||
}
|
||||
|
||||
$this->setLineTotal($discountedTotal);
|
||||
|
||||
$totalDiscount = $this->getTotalDiscounts() + $discountedTotal;
|
||||
|
||||
$this->setTotalDiscounts($totalDiscount);
|
||||
|
||||
return $this;
|
||||
|
||||
}
|
||||
@ -91,12 +90,12 @@ class InvoiceItemCalc
|
||||
|
||||
if(isset($this->item->tax_rate1) && $this->item->tax_rate1 > 0)
|
||||
{
|
||||
$tax_rate1 = $this->formatValue($this->item->tax_rate1, $this->invoice->client->currency()->precision);
|
||||
$tax_rate1 = $this->formatValue($this->item->tax_rate1, $this->currency->precision);
|
||||
|
||||
if($this->settings->inclusive_taxes)
|
||||
$item_tax_rate1_total = $this->formatValue(($this->line_total - ($this->line_total / (1+$tax_rate1/100))) , $this->invoice->client->currency()->precision);
|
||||
$item_tax_rate1_total = $this->formatValue(($this->getLineTotal() - ($this->getLineTotal() / (1+$tax_rate1/100))) , $this->currency->precision);
|
||||
else
|
||||
$item_tax_rate1_total = $this->formatValue(($this->line_total * $tax_rate1/100), $this->invoice->client->currency()->precision);
|
||||
$item_tax_rate1_total = $this->formatValue(($this->getLineTotal() * $tax_rate1/100), $this->currency->precision);
|
||||
|
||||
$item_tax += $item_tax_rate1_total;
|
||||
|
||||
@ -105,12 +104,12 @@ class InvoiceItemCalc
|
||||
|
||||
if(isset($this->item->tax_rate2) && $this->item->tax_rate2 > 0)
|
||||
{
|
||||
$tax_rate2 = $this->formatValue($this->item->tax_rate2, $this->invoice->client->currency()->precision);
|
||||
$tax_rate2 = $this->formatValue($this->item->tax_rate2, $this->currency->precision);
|
||||
|
||||
if($this->settings->inclusive_taxes)
|
||||
$item_tax_rate2_total = $this->formatValue(($this->line_total - ($this->line_total / (1+$tax_rate2/100))) , $this->invoice->client->currency()->precision);
|
||||
$item_tax_rate2_total = $this->formatValue(($this->getLineTotal() - ($this->getLineTotal() / (1+$tax_rate2/100))) , $this->currency->precision);
|
||||
else
|
||||
$item_tax_rate2_total = $this->formatValue(($this->line_total * $tax_rate2/100), $this->invoice->client->currency()->precision);
|
||||
$item_tax_rate2_total = $this->formatValue(($this->getLineTotal() * $tax_rate2/100), $this->currency->precision);
|
||||
|
||||
$item_tax += $item_tax_rate2_total;
|
||||
|
||||
@ -120,6 +119,8 @@ class InvoiceItemCalc
|
||||
}
|
||||
|
||||
$this->setTotalTaxes($item_tax);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function groupTax($tax_name, $tax_rate, $tax_total)
|
||||
@ -149,12 +150,12 @@ class InvoiceItemCalc
|
||||
|
||||
public function getLineTotal()
|
||||
{
|
||||
return $this->line_total;
|
||||
return $this->item->line_total;
|
||||
}
|
||||
|
||||
public function setLineTotal($total)
|
||||
{
|
||||
$this->line_total = $total;
|
||||
$this->item->line_total = $total;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@ -39,12 +39,12 @@
|
||||
* @OA\Property(property="shipping_state", type="string", example="", description="________"),
|
||||
* @OA\Property(property="shipping_postal_code", type="string", example="", description="________"),
|
||||
* @OA\Property(property="shipping_country_id", type="string", example="", description="________"),
|
||||
* @OA\Property(property="settings", type="object", example="", description="________"),
|
||||
* @OA\Property(property="is_deleted", type="boolean", example=true, description="________"),
|
||||
* @OA\Property(property="balance", type="number", format="float", example="10.00", description="________"),
|
||||
* @OA\Property(property="paid_to_date", type="number", format="float", example="10.00", description="________"),
|
||||
* @OA\Property(property="last_login", type="number", format="integer", example="134341234234", description="Timestamp"),
|
||||
* @OA\Property(property="created_at", type="number", format="integer", example="134341234234", description="Timestamp"),
|
||||
* @OA\Property(property="updated_at", type="number", format="integer", example="134341234234", description="Timestamp"),
|
||||
* @OA\Property(property="settings",ref="#/components/schemas/CompanySettings"),
|
||||
* )
|
||||
*/
|
@ -6,5 +6,6 @@
|
||||
* @OA\Property(property="id", type="string", example="WJxbojagwO", description="The company hash id"),
|
||||
* @OA\Property(property="name", type="string", example="The local shop", description="The company name"),
|
||||
* @OA\Property(property="logo", type="object", example="logo.png", description="The company logo - binary"),
|
||||
* @OA\Property(property="settings",ref="#/components/schemas/CompanySettings"),
|
||||
* )
|
||||
*/
|
@ -30,7 +30,7 @@
|
||||
* @OA\Property(property="show_tasks_in_portal", type="boolean", example=true, description="____________"),
|
||||
* @OA\Property(property="show_currency_code", type="boolean", example=true, description="____________"),
|
||||
* @OA\Property(property="shared_invoice_quote_counter", type="boolean", example=true, description="Flags whether to share the counter for invoices and quotes"),
|
||||
* @OA\Property(property="start_of_week", type="integer", example="1", description="____________"),
|
||||
* @OA\Property(property="first_day_of_week", type="integer", example="1", description="____________"),
|
||||
* @OA\Property(property="invoice_number_prefix", type="string", example="R", description="This string is prepended to the invoice number"),
|
||||
* @OA\Property(property="invoice_number_pattern", type="string", example="{$year}-{$counter}", description="Allows customisation of the invoice number pattern"),
|
||||
* @OA\Property(property="invoice_number_counter", type="integer", example="1", description="____________"),
|
||||
|
@ -26,7 +26,6 @@
|
||||
* @OA\Property(property="tax_name3", type="string", example="", description="________"),
|
||||
* @OA\Property(property="tax_rate3", type="number", format="float", example="10.00", description="_________"),
|
||||
* @OA\Property(property="line_items", type="object", example="", description="_________"),
|
||||
* @OA\Property(property="settings", type="object", example="", description="_________"),
|
||||
* @OA\Property(property="amount", type="number", format="float", example="10.00", description="_________"),
|
||||
* @OA\Property(property="balance", type="number", format="float", example="10.00", description="_________"),
|
||||
* @OA\Property(property="discount", type="number", format="float", example="10.00", description="_________"),
|
||||
@ -36,6 +35,7 @@
|
||||
* @OA\Property(property="invoice_date", type="string", format="date", example="1994-07-30", description="_________"),
|
||||
* @OA\Property(property="partial_due_date", type="string", format="date", example="1994-07-30", description="_________"),
|
||||
* @OA\Property(property="due_date", type="string", format="date", example="1994-07-30", description="_________"),
|
||||
* @OA\Property(property="settings",ref="#/components/schemas/CompanySettings"),
|
||||
* @OA\Property(property="last_viewed", type="number", format="integer", example="1434342123", description="Timestamp"),
|
||||
* @OA\Property(property="updated_at", type="number", format="integer", example="1434342123", description="Timestamp"),
|
||||
* @OA\Property(property="archived_at", type="number", format="integer", example="1434342123", description="Timestamp"),
|
||||
|
@ -2,7 +2,7 @@
|
||||
/**
|
||||
* @OA\OpenApi(
|
||||
* @OA\Info(
|
||||
* version="1.0.27",
|
||||
* version="1.0.30",
|
||||
* title="Invoice Ninja",
|
||||
* description="Invoice Ninja. Open Source Invoicing lives here. ",
|
||||
* termsOfService="http://swagger.io/terms/",
|
||||
@ -16,7 +16,7 @@
|
||||
* ),
|
||||
* @OA\Server(
|
||||
* description="InvoiceNinja host",
|
||||
* url="https://virtserver.swaggerhub.com/InvoiceNinja/invoices/1.0.27"
|
||||
* url="https://virtserver.swaggerhub.com/InvoiceNinja/invoices/1.0.30"
|
||||
* ),
|
||||
* @OA\ExternalDocumentation(
|
||||
* description="http://docs.invoiceninja.com",
|
||||
|
@ -57,8 +57,10 @@ class CompanyGatewayTransformer extends EntityTransformer
|
||||
'fee_percent' => (float)$company_gateway->fee_percent ?: '',
|
||||
'fee_tax_name1' => (string)$company_gateway->fee_tax_name1 ?: '',
|
||||
'fee_tax_name2' => (string) $company_gateway->fee_tax_name2 ?: '',
|
||||
'fee_tax_name3' => (string) $company_gateway->fee_tax_name3 ?: '',
|
||||
'fee_tax_rate1' => (float) $company_gateway->fee_tax_rate1,
|
||||
'fee_tax_rate2' => (float)$company_gateway->fee_tax_rate2,
|
||||
'fee_tax_rate3' => (float)$company_gateway->fee_tax_rate3,
|
||||
'fee_cap' => (float)$company_gateway->fee_cap,
|
||||
'adjust_fee_percent' => (bool)$company_gateway->adjust_fee_percent,
|
||||
'updated_at' => $company_gateway->updated_at,
|
||||
|
@ -115,8 +115,10 @@ class InvoiceTransformer extends EntityTransformer
|
||||
'custom_value4' => (string) $invoice->custom_value4 ?: '',
|
||||
'has_tasks' => (bool) $invoice->has_tasks,
|
||||
'has_expenses' => (bool) $invoice->has_expenses,
|
||||
'custom_text_value1' => $invoice->custom_text_value1 ?: '',
|
||||
'custom_text_value2' => $invoice->custom_text_value2 ?: '',
|
||||
'custom_surcharge1' => $invoice->custom_surcharge1 ?: '',
|
||||
'custom_surcharge2' => $invoice->custom_surcharge2 ?: '',
|
||||
'custom_surcharge3' => $invoice->custom_surcharge3 ?: '',
|
||||
'custom_surcharge4' => $invoice->custom_surcharge4 ?: '',
|
||||
'line_items' => $invoice->line_items ?: '',
|
||||
'backup' => $invoice->backup ?: '',
|
||||
'settings' => $invoice->settings ?: '',
|
||||
|
@ -166,6 +166,7 @@ trait MakesInvoiceValues
|
||||
$data['$invoice_number'] = $this->invoice_number;
|
||||
$data['$po_number'] = $this->po_number;
|
||||
$data['$line_taxes'] = $this->makeLineTaxes();
|
||||
$data['$total_taxes'] = $this->makeTotalTaxes();
|
||||
// $data['$tax'] = ;
|
||||
// $data['$item'] = ;
|
||||
// $data['$description'] = ;
|
||||
@ -179,7 +180,7 @@ trait MakesInvoiceValues
|
||||
$data['$partial_due'] = Number::formatMoney($this->partial, $this->client);
|
||||
$data['$total'] = Number::formatMoney($this->calc()->getTotal(), $this->client);
|
||||
$data['$balance'] = Number::formatMoney($this->calc()->getBalance(), $this->client);
|
||||
$data['$taxes'] = Number::formatMoney($this->calc()->getTotalTaxes(), $this->client);
|
||||
$data['$taxes'] = Number::formatMoney($this->calc()->getItemTotalTaxes(), $this->client);
|
||||
$data['$terms'] = $this->terms;
|
||||
// $data['$your_invoice'] = ;
|
||||
// $data['$quote'] = ;
|
||||
@ -414,4 +415,27 @@ trait MakesInvoiceValues
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string a collectino of <tr> with
|
||||
* itemised total tax data
|
||||
*/
|
||||
|
||||
private function makeTotalTaxes() :string
|
||||
{
|
||||
|
||||
$total_tax_map = $this->calc()->getTotalTaxMap();
|
||||
|
||||
$data = '';
|
||||
|
||||
foreach($total_tax_map as $tax)
|
||||
{
|
||||
$data .= '<tr class="total_taxes">';
|
||||
$data .= '<td>'. $tax['name'] .'</td>';
|
||||
$data .= '<td>'. Number::formatMoney($tax['total'], $this->client) .'</td></tr>';
|
||||
}
|
||||
|
||||
return $data;
|
||||
|
||||
}
|
||||
}
|
@ -48,7 +48,7 @@ return [
|
||||
'map_zoom' => env('DEFAULT_MAP_ZOOM', 10),
|
||||
'payment_terms' => env('DEFAULT_PAYMENT_TERMS', 1),
|
||||
'military_time' => env('MILITARY_TIME', 0),
|
||||
'start_of_week' => env('START_OF_WEEK',1),
|
||||
'first_day_of_week' => env('FIRST_DATE_OF_WEEK',0),
|
||||
'financial_year_start' => env('FINANCIAL_YEAR_START', '2000-01-01')
|
||||
],
|
||||
|
||||
|
@ -10,17 +10,17 @@ $factory->define(App\Models\Invoice::class, function (Faker $faker) {
|
||||
'status_id' => App\Models\Invoice::STATUS_SENT,
|
||||
'invoice_number' => $faker->ean13(),
|
||||
'discount' => $faker->numberBetween(1,10),
|
||||
'is_amount_discount' => $faker->boolean(),
|
||||
'is_amount_discount' => false,
|
||||
'tax_name1' => 'GST',
|
||||
'tax_rate1' => 10,
|
||||
'tax_name2' => 'VAT',
|
||||
'tax_rate2' => 17.5,
|
||||
'tax_name3' => 'THIRDTAX',
|
||||
'tax_rate3' => 5,
|
||||
'custom_value1' => $faker->numberBetween(1,4),
|
||||
'custom_value2' => $faker->numberBetween(1,4),
|
||||
'custom_value3' => $faker->numberBetween(1,4),
|
||||
'custom_value4' => $faker->numberBetween(1,4),
|
||||
//'tax_name3' => 'THIRDTAX',
|
||||
//'tax_rate3' => 5,
|
||||
// 'custom_value1' => $faker->numberBetween(1,4),
|
||||
// 'custom_value2' => $faker->numberBetween(1,4),
|
||||
// 'custom_value3' => $faker->numberBetween(1,4),
|
||||
// 'custom_value4' => $faker->numberBetween(1,4),
|
||||
'is_deleted' => false,
|
||||
'po_number' => $faker->text(10),
|
||||
'invoice_date' => $faker->date(),
|
||||
|
@ -147,7 +147,7 @@ class CreateUsersTable extends Migration
|
||||
// $table->string('vat_number')->nullable();
|
||||
// $table->string('id_number')->nullable();
|
||||
$table->unsignedInteger('size_id')->nullable();
|
||||
$table->string('start_of_week')->nullable();
|
||||
$table->string('first_day_of_week')->nullable();
|
||||
$table->string('financial_year_start')->nullable();
|
||||
$table->smallInteger('enable_modules')->default(0);
|
||||
$table->text('custom_fields');
|
||||
@ -415,7 +415,6 @@ class CreateUsersTable extends Migration
|
||||
$t->text('private_notes')->nullable();
|
||||
$t->text('terms')->nullable();
|
||||
|
||||
|
||||
$t->string('tax_name1')->nullable();
|
||||
$t->decimal('tax_rate1', 13, 3)->default(0);
|
||||
|
||||
@ -425,12 +424,16 @@ class CreateUsersTable extends Migration
|
||||
$t->string('tax_name3')->nullable();
|
||||
$t->decimal('tax_rate3', 13, 3)->default(0);
|
||||
|
||||
|
||||
$t->string('custom_value1')->nullable();
|
||||
$t->string('custom_value2')->nullable();
|
||||
$t->string('custom_value3')->nullable();
|
||||
$t->string('custom_value4')->nullable();
|
||||
|
||||
$t->string('custom_surcharge1')->nullable();
|
||||
$t->string('custom_surcharge2')->nullable();
|
||||
$t->string('custom_surcharge3')->nullable();
|
||||
$t->string('custom_surcharge4')->nullable();
|
||||
|
||||
$t->decimal('amount', 13, 2);
|
||||
$t->decimal('balance', 13, 2);
|
||||
$t->decimal('partial', 13, 2)->nullable();
|
||||
|
116
resources/assets/js/vue-i18n-locales.generated.js
vendored
116
resources/assets/js/vue-i18n-locales.generated.js
vendored
@ -1417,7 +1417,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -2084,7 +2084,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -4223,7 +4223,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "týdně",
|
||||
@ -4890,7 +4890,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -7025,7 +7025,7 @@ export default {
|
||||
"failed_remove_payment_method": "Det lykkedes ikke at fjerne betalingsmetoden",
|
||||
"gateway_exists": "Denne gateway eksisterer allerede",
|
||||
"manual_entry": "Manuel indtastning",
|
||||
"start_of_week": "Første dag i ugen",
|
||||
"first_day_of_week": "Første dag i ugen",
|
||||
"freq_inactive": "Inaktiv",
|
||||
"freq_daily": "Daglig",
|
||||
"freq_weekly": "Ugentlig",
|
||||
@ -7692,7 +7692,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Skabelon",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -9831,7 +9831,7 @@ export default {
|
||||
"failed_remove_payment_method": "Zahlungsart entfernen fehlgeschlagen",
|
||||
"gateway_exists": "Dieser Zahlungsanbieter wurde bereits angelegt",
|
||||
"manual_entry": "Manuell hinzufügen",
|
||||
"start_of_week": "Erster Tag der Woche",
|
||||
"first_day_of_week": "Erster Tag der Woche",
|
||||
"freq_inactive": "Inaktiv",
|
||||
"freq_daily": "Täglich",
|
||||
"freq_weekly": "Wöchentlich",
|
||||
@ -10498,7 +10498,7 @@ export default {
|
||||
"recipients": "Empfänger",
|
||||
"save_as_default": "Als Standard speichern",
|
||||
"template": "Vorlage",
|
||||
"start_of_week_help": "Verwendet von <b>Datums<\/b>selektoren",
|
||||
"first_day_of_week_help": "Verwendet von <b>Datums<\/b>selektoren",
|
||||
"financial_year_start_help": "Verwendet von <b>Datum-Bereichs<\/b>selektoren",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Dieses Jahr",
|
||||
@ -12643,7 +12643,7 @@ export default {
|
||||
"failed_remove_payment_method": "Αποτυχία διαγραφής του τρόπου πληρωμής",
|
||||
"gateway_exists": "Αυτή η πύλη πληρωμών (Gateway) υπάρχει ήδη",
|
||||
"manual_entry": "Χειροκίνητη εισαγωγή",
|
||||
"start_of_week": "Πρώτη Μέρα της Εβδομάδας",
|
||||
"first_day_of_week": "Πρώτη Μέρα της Εβδομάδας",
|
||||
"freq_inactive": "Ανενεργό",
|
||||
"freq_daily": "Ημερήσιο",
|
||||
"freq_weekly": "Εβδομάδα",
|
||||
@ -13310,7 +13310,7 @@ export default {
|
||||
"recipients": "Παραλήπτες",
|
||||
"save_as_default": "Αποθήκευση ως προεπιλογή",
|
||||
"template": "Πρότυπο",
|
||||
"start_of_week_help": "Χρησιμοποιήθηκε από <b>date<\/b> επιλογείς",
|
||||
"first_day_of_week_help": "Χρησιμοποιήθηκε από <b>date<\/b> επιλογείς",
|
||||
"financial_year_start_help": "Χρησιμοποιήθηκε από <b>date range<\/b> επιλογείς",
|
||||
"reports_help": "Shift + Click για να γίνει ταξινόμηση με βάση πολλές στήλες, Ctrl + Click για εκκαθάριση της ομαδοποίησης.",
|
||||
"this_year": "Τρέχον Χρόνος",
|
||||
@ -15494,7 +15494,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -16161,7 +16161,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -18521,7 +18521,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -19188,7 +19188,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -21320,7 +21320,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "Primer Día de la Semana",
|
||||
"first_day_of_week": "Primer Día de la Semana",
|
||||
"freq_inactive": "Inactivo",
|
||||
"freq_daily": "Diario",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -21987,7 +21987,7 @@ export default {
|
||||
"recipients": "Remitentes",
|
||||
"save_as_default": "Guardar como predeterminado",
|
||||
"template": "Plantilla",
|
||||
"start_of_week_help": "Usado por los selectores de <b>fecha<\/b>",
|
||||
"first_day_of_week_help": "Usado por los selectores de <b>fecha<\/b>",
|
||||
"financial_year_start_help": "Usado por los selectores de <b>rango de fecha<\/b>",
|
||||
"reports_help": "Shift + Click para ordenar por múltiples columnas, Ctrl + Click para desactivar la agrupación.",
|
||||
"this_year": "Este Año",
|
||||
@ -24119,7 +24119,7 @@ export default {
|
||||
"failed_remove_payment_method": "Falló la eliminación del Método de pago",
|
||||
"gateway_exists": "Esta pasarela ya existe",
|
||||
"manual_entry": "Entrada manual",
|
||||
"start_of_week": "Primer día de la semana",
|
||||
"first_day_of_week": "Primer día de la semana",
|
||||
"freq_inactive": "Inactivo",
|
||||
"freq_daily": "Diariamente",
|
||||
"freq_weekly": "Semanal",
|
||||
@ -24786,7 +24786,7 @@ export default {
|
||||
"recipients": "Destinatarios",
|
||||
"save_as_default": "Guardar como Por Defecto",
|
||||
"template": "Plantilla",
|
||||
"start_of_week_help": "Utilizado por selectores de <b>fecha<\/b>",
|
||||
"first_day_of_week_help": "Utilizado por selectores de <b>fecha<\/b>",
|
||||
"financial_year_start_help": "Utilizado por selectores de <b>rango de fecha<\/b>",
|
||||
"reports_help": "May + Click para ordenar por múltiples columnas, Ctrl + click para quitar agrupamiento.",
|
||||
"this_year": "Este Año",
|
||||
@ -26933,7 +26933,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -27600,7 +27600,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -29762,7 +29762,7 @@ export default {
|
||||
"failed_remove_payment_method": "La suppression de la méthode de paiement a échoué",
|
||||
"gateway_exists": "La passerelle existe déjà",
|
||||
"manual_entry": "Saisie manuelle",
|
||||
"start_of_week": "Premier jour de la semaine",
|
||||
"first_day_of_week": "Premier jour de la semaine",
|
||||
"freq_inactive": "Inactif",
|
||||
"freq_daily": "Quotidien",
|
||||
"freq_weekly": "Hebdomadaire",
|
||||
@ -30429,7 +30429,7 @@ export default {
|
||||
"recipients": "Destinataires",
|
||||
"save_as_default": "Sauvegarder par défaut",
|
||||
"template": "Modèle",
|
||||
"start_of_week_help": "Utilisés par des sélecteurs de <b>date<\/b>",
|
||||
"first_day_of_week_help": "Utilisés par des sélecteurs de <b>date<\/b>",
|
||||
"financial_year_start_help": "Utilisés par des sélecteurs de <b>plages de date<\/b>",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Cette année",
|
||||
@ -32591,7 +32591,7 @@ export default {
|
||||
"failed_remove_payment_method": "La suppression de la méthode de paiement a échoué",
|
||||
"gateway_exists": "La passerelle existe déjà",
|
||||
"manual_entry": "Saisie manuelle",
|
||||
"start_of_week": "Premier jour de la semaine",
|
||||
"first_day_of_week": "Premier jour de la semaine",
|
||||
"freq_inactive": "Inactif",
|
||||
"freq_daily": "Quotidienne",
|
||||
"freq_weekly": "Hebdomadaire",
|
||||
@ -33258,7 +33258,7 @@ export default {
|
||||
"recipients": "destinataires",
|
||||
"save_as_default": "Sauvegarder comme défaut",
|
||||
"template": "Modèle",
|
||||
"start_of_week_help": "Utilisé par les sélecteurs de <b>date<\/b>",
|
||||
"first_day_of_week_help": "Utilisé par les sélecteurs de <b>date<\/b>",
|
||||
"financial_year_start_help": "Utilisé par les sélecteurs d'<b>écart de date<\/b>",
|
||||
"reports_help": "MAJ + Clic pour filtrer plusieurs colonnes. CRTL + Clic pour annuler le groupement.",
|
||||
"this_year": "Cette année",
|
||||
@ -35398,7 +35398,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -36065,7 +36065,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Ova godina",
|
||||
@ -38197,7 +38197,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "Questo Gateway esiste già",
|
||||
"manual_entry": "Inserimento manuale",
|
||||
"start_of_week": "Primo giorno della settimana",
|
||||
"first_day_of_week": "Primo giorno della settimana",
|
||||
"freq_inactive": "Inattivo",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Settimanale",
|
||||
@ -38864,7 +38864,7 @@ export default {
|
||||
"recipients": "Destinatari",
|
||||
"save_as_default": "Salva come predefinito",
|
||||
"template": "Modelli",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Quest'anno",
|
||||
@ -40997,7 +40997,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -41664,7 +41664,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -43794,7 +43794,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "Ši mokėjimo sąsaja jau yra",
|
||||
"manual_entry": "Įrašyti rankiniu būdu",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -44461,7 +44461,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -46633,7 +46633,7 @@ export default {
|
||||
"failed_remove_payment_method": "Неуспешно отстранување на начинот на плаќање",
|
||||
"gateway_exists": "Овој платен портал веќе постои",
|
||||
"manual_entry": "Рачен влез",
|
||||
"start_of_week": "Прв ден од неделата",
|
||||
"first_day_of_week": "Прв ден од неделата",
|
||||
"freq_inactive": "Неактивно",
|
||||
"freq_daily": "Дневно",
|
||||
"freq_weekly": "Неделно",
|
||||
@ -47300,7 +47300,7 @@ export default {
|
||||
"recipients": "Приматели",
|
||||
"save_as_default": "Зачувај како стандард",
|
||||
"template": "Шаблон",
|
||||
"start_of_week_help": "Користено по <b> датуми <\/b> селектори",
|
||||
"first_day_of_week_help": "Користено по <b> датуми <\/b> селектори",
|
||||
"financial_year_start_help": "Користено по <b> опсег на датуми <\/b> селектори",
|
||||
"reports_help": "Shift + клик за распределување по повеќе колони, Ctrl + клик за чистење на групирањето.",
|
||||
"this_year": "Оваа година",
|
||||
@ -49424,7 +49424,7 @@ export default {
|
||||
"failed_remove_payment_method": "Klarte ikke å fjerne betalingsmåte",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "Første dag i uken",
|
||||
"first_day_of_week": "Første dag i uken",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Ukentlig",
|
||||
@ -50091,7 +50091,7 @@ export default {
|
||||
"recipients": "Mottakere",
|
||||
"save_as_default": "Sett som standard",
|
||||
"template": "Mal",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Dette Året",
|
||||
@ -52235,7 +52235,7 @@ export default {
|
||||
"failed_remove_payment_method": "Verwijderen van betalingsmethode mislukt",
|
||||
"gateway_exists": "Deze gateway bestaat reeds",
|
||||
"manual_entry": "Manuele invoer",
|
||||
"start_of_week": "Eerste dag van de week",
|
||||
"first_day_of_week": "Eerste dag van de week",
|
||||
"freq_inactive": "Inactief",
|
||||
"freq_daily": "Dagelijks",
|
||||
"freq_weekly": "Wekelijks",
|
||||
@ -52902,7 +52902,7 @@ export default {
|
||||
"recipients": "Ontvangers",
|
||||
"save_as_default": "Opslaan als standaard",
|
||||
"template": "Sjabloon",
|
||||
"start_of_week_help": "Gebruikt door <b>datum<\/b> selecties",
|
||||
"first_day_of_week_help": "Gebruikt door <b>datum<\/b> selecties",
|
||||
"financial_year_start_help": "Gebruikt door <b>datumbereik<\/b> selecties",
|
||||
"reports_help": "Shift + klik om op meerdere kolommen te sorteren, Ctrl + klik om de groepering te wissen.",
|
||||
"this_year": "Dit jaar",
|
||||
@ -55035,7 +55035,7 @@ export default {
|
||||
"failed_remove_payment_method": "Nie udało się usunąć metody płatności",
|
||||
"gateway_exists": "Ten dostawca płatności już istnieje",
|
||||
"manual_entry": "Ręczny wpis",
|
||||
"start_of_week": "Pierwszy dzień tygodnia",
|
||||
"first_day_of_week": "Pierwszy dzień tygodnia",
|
||||
"freq_inactive": "Nieaktywne",
|
||||
"freq_daily": "Codziennie",
|
||||
"freq_weekly": "Co tydzień",
|
||||
@ -55702,7 +55702,7 @@ export default {
|
||||
"recipients": "Odbiorcy",
|
||||
"save_as_default": "Zapisz jako domyślne",
|
||||
"template": "Szablon",
|
||||
"start_of_week_help": "Używany przez selektory <b>dat<\/b>",
|
||||
"first_day_of_week_help": "Używany przez selektory <b>dat<\/b>",
|
||||
"financial_year_start_help": "Używany przez selektory <b>zakresów czasu<\/b>",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Ten rok",
|
||||
@ -57835,7 +57835,7 @@ export default {
|
||||
"failed_remove_payment_method": "Falha ao remover o método de pagamento",
|
||||
"gateway_exists": "Esse gateway já existe",
|
||||
"manual_entry": "Entrada manual",
|
||||
"start_of_week": "Primeiro dia da Semana",
|
||||
"first_day_of_week": "Primeiro dia da Semana",
|
||||
"freq_inactive": "Inativo",
|
||||
"freq_daily": "Diariamente",
|
||||
"freq_weekly": "Semanalmente",
|
||||
@ -58502,7 +58502,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -60635,7 +60635,7 @@ export default {
|
||||
"failed_remove_payment_method": "Erro ao remover o método de pagamento",
|
||||
"gateway_exists": "Este gateway já existe",
|
||||
"manual_entry": "Introdução manual",
|
||||
"start_of_week": "Primeiro Dia da Semana",
|
||||
"first_day_of_week": "Primeiro Dia da Semana",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Semanal",
|
||||
@ -61302,7 +61302,7 @@ export default {
|
||||
"recipients": "Destinatários",
|
||||
"save_as_default": "Guardar como padrão",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Utilizado pelos selectores <b>date<\/b>",
|
||||
"first_day_of_week_help": "Utilizado pelos selectores <b>date<\/b>",
|
||||
"financial_year_start_help": "Utilizado pelos selectores <b>interevalo de data>",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Este ano",
|
||||
@ -63449,7 +63449,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual",
|
||||
"start_of_week": "Prima Zi a Săptamânii",
|
||||
"first_day_of_week": "Prima Zi a Săptamânii",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Săptămânal",
|
||||
@ -64116,7 +64116,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -66261,7 +66261,7 @@ export default {
|
||||
"failed_remove_payment_method": "Načina plačila ni bilo mogoče odstraniti.",
|
||||
"gateway_exists": "Prehod že obstaja",
|
||||
"manual_entry": "Ročni vnos",
|
||||
"start_of_week": "Prvi dan v tednu",
|
||||
"first_day_of_week": "Prvi dan v tednu",
|
||||
"freq_inactive": "Nedejaven",
|
||||
"freq_daily": "Dnevno",
|
||||
"freq_weekly": "Tedensko",
|
||||
@ -66928,7 +66928,7 @@ export default {
|
||||
"recipients": "Prejemniki",
|
||||
"save_as_default": "Shrani kot privzeto",
|
||||
"template": "Predloga",
|
||||
"start_of_week_help": "Uporaba pri izbiri datuma",
|
||||
"first_day_of_week_help": "Uporaba pri izbiri datuma",
|
||||
"financial_year_start_help": "Uporaba pri izbiri časovnega odbodja",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "To leto",
|
||||
@ -69071,7 +69071,7 @@ export default {
|
||||
"failed_remove_payment_method": "Ka dështuar largimi i metodës së pagesës",
|
||||
"gateway_exists": "Ky kanal pagese tashmë ekziston",
|
||||
"manual_entry": "Vendos manualisht",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Javore",
|
||||
@ -69738,7 +69738,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -71880,7 +71880,7 @@ export default {
|
||||
"failed_remove_payment_method": "Misslyckades att ta bort betalningsmetod",
|
||||
"gateway_exists": "Denna gateway finns redan.",
|
||||
"manual_entry": "Manuell",
|
||||
"start_of_week": "Första veckodagen",
|
||||
"first_day_of_week": "Första veckodagen",
|
||||
"freq_inactive": "Inaktiv",
|
||||
"freq_daily": "Dagligen",
|
||||
"freq_weekly": "Veckovis",
|
||||
@ -72547,7 +72547,7 @@ export default {
|
||||
"recipients": "Mottagare",
|
||||
"save_as_default": "Spara som standard",
|
||||
"template": "Mall",
|
||||
"start_of_week_help": "Använd av <b>datum<\/b> väljare",
|
||||
"first_day_of_week_help": "Använd av <b>datum<\/b> väljare",
|
||||
"financial_year_start_help": "Används av <b>datum urvals<\/b> valen.",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "Detta året",
|
||||
@ -74687,7 +74687,7 @@ export default {
|
||||
"failed_remove_payment_method": "ไม่สามารถลบวิธีการชำระเงินได้",
|
||||
"gateway_exists": "เกตเวย์นี้มีอยู่แล้ว",
|
||||
"manual_entry": "ป้อนค่าด้วยตนเอง",
|
||||
"start_of_week": "วันแรกของสัปดาห์",
|
||||
"first_day_of_week": "วันแรกของสัปดาห์",
|
||||
"freq_inactive": "ไม่ทำงาน",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "รายสัปดาห์",
|
||||
@ -75354,7 +75354,7 @@ export default {
|
||||
"recipients": "ผู้รับ",
|
||||
"save_as_default": "บันทึกเป็นค่าเริ่มต้น",
|
||||
"template": "แบบ",
|
||||
"start_of_week_help": "ใช้โดย <b>วันที่<\/b>ถูกเลือก",
|
||||
"first_day_of_week_help": "ใช้โดย <b>วันที่<\/b>ถูกเลือก",
|
||||
"financial_year_start_help": "ใช้โดย <b>ช่วงวันที่<\/b>ถูกเลือก",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "ปีนี้",
|
||||
@ -77501,7 +77501,7 @@ export default {
|
||||
"failed_remove_payment_method": "Failed to remove the payment method",
|
||||
"gateway_exists": "This gateway already exists",
|
||||
"manual_entry": "Manual entry",
|
||||
"start_of_week": "First Day of the Week",
|
||||
"first_day_of_week": "First Day of the Week",
|
||||
"freq_inactive": "Inactive",
|
||||
"freq_daily": "Daily",
|
||||
"freq_weekly": "Weekly",
|
||||
@ -78168,7 +78168,7 @@ export default {
|
||||
"recipients": "Recipients",
|
||||
"save_as_default": "Save as default",
|
||||
"template": "Template",
|
||||
"start_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"first_day_of_week_help": "Used by <b>date<\/b> selectors",
|
||||
"financial_year_start_help": "Used by <b>date range<\/b> selectors",
|
||||
"reports_help": "Shift + Click to sort by multiple columns, Ctrl + Click to clear the grouping.",
|
||||
"this_year": "This Year",
|
||||
@ -80370,7 +80370,7 @@ export default {
|
||||
"failed_remove_payment_method": "未能移除付款方式",
|
||||
"gateway_exists": "閘道已存在",
|
||||
"manual_entry": "手動輸入",
|
||||
"start_of_week": "每星期的第一天",
|
||||
"first_day_of_week": "每星期的第一天",
|
||||
"freq_inactive": "停用的",
|
||||
"freq_daily": "每天",
|
||||
"freq_weekly": "每星期",
|
||||
@ -81037,7 +81037,7 @@ export default {
|
||||
"recipients": "收件匣",
|
||||
"save_as_default": "儲存為預設值",
|
||||
"template": "範本",
|
||||
"start_of_week_help": "由 <b>日期<\/b>選擇器使用",
|
||||
"first_day_of_week_help": "由 <b>日期<\/b>選擇器使用",
|
||||
"financial_year_start_help": "由<b>日期範圍<\/b> 選擇器所使用",
|
||||
"reports_help": "Shift + Click 可多欄排序,Ctrl + Click 以取消組合。",
|
||||
"this_year": "今年",
|
||||
|
@ -114,10 +114,10 @@
|
||||
<td>$subtotal_label:</td>
|
||||
<td>$subtotal</td>
|
||||
</tr>
|
||||
<tr class="taxes">
|
||||
<td>$taxes_label:</td>
|
||||
<td>$taxes</td>
|
||||
</tr>
|
||||
|
||||
{{-- total_taxes html is populated server side, with a class of total_taxes, you can customise your CSS here to override the defaults--}}
|
||||
|
||||
$total_taxes
|
||||
|
||||
{{-- line_taxes html is populated server side, with a class of line_items, you can customise your CSS here to override the defaults--}}
|
||||
|
||||
|
@ -5205,7 +5205,7 @@
|
||||
"type" : "boolean",
|
||||
"description" : "Toggles 24 hour time"
|
||||
},
|
||||
"start_of_week" : {
|
||||
"first_day_of_week" : {
|
||||
"type" : "integer",
|
||||
"description" : "References the start day of the week",
|
||||
"example" : 1
|
||||
|
@ -319,4 +319,4 @@ class ClientPortalTest extends DuskTestCase
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -126,9 +126,9 @@ class InvoiceTest extends TestCase
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
$this->assertEquals($this->invoice_calc->getTotal(), 22);
|
||||
$this->assertEquals($this->invoice_calc->getBalance(), 22);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 2);
|
||||
$this->assertEquals($this->invoice_calc->getTotal(), 21.5);
|
||||
$this->assertEquals($this->invoice_calc->getBalance(), 21.5);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 1.5);
|
||||
}
|
||||
|
||||
public function testInvoiceTotalsWithDiscountWithSurchargeWithDoubleExclusiveTax()
|
||||
@ -147,9 +147,9 @@ class InvoiceTest extends TestCase
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
$this->assertEquals($this->invoice_calc->getTotal(), 24);
|
||||
$this->assertEquals($this->invoice_calc->getBalance(), 24);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 4);
|
||||
$this->assertEquals($this->invoice_calc->getTotal(), 23);
|
||||
$this->assertEquals($this->invoice_calc->getBalance(), 23);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 3);
|
||||
}
|
||||
|
||||
|
||||
@ -185,7 +185,7 @@ class InvoiceTest extends TestCase
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
$this->assertEquals($this->invoice_calc->getTotal(), 20);
|
||||
$this->assertEquals($this->invoice_calc->getBalance(), 20);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 0);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 1.82);
|
||||
$this->assertEquals(count($this->invoice_calc->getTaxMap()), 1);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user