mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-08 20:22:42 +01:00
Merge remote-tracking branch 'upstream/v5-develop' into 1314-subscriptions-v3
This commit is contained in:
commit
0c0e652245
@ -1 +1 @@
|
||||
5.8.27
|
||||
5.8.32
|
@ -947,7 +947,35 @@ class CheckData extends Command
|
||||
|
||||
});
|
||||
|
||||
Company::whereDoesntHave('company_users', function ($query){
|
||||
$query->where('is_owner', 1);
|
||||
})
|
||||
->cursor()
|
||||
->when(Ninja::isHosted())
|
||||
->each(function ($c){
|
||||
|
||||
$this->logMessage("Orphan Account # {$c->account_id}");
|
||||
|
||||
});
|
||||
|
||||
CompanyUser::whereDoesntHave('tokens')
|
||||
->cursor()
|
||||
->when(Ninja::isHosted())
|
||||
->each(function ($cu){
|
||||
|
||||
$this->logMessage("Missing tokens for Company User # {$cu->id}");
|
||||
|
||||
});
|
||||
|
||||
|
||||
CompanyUser::whereDoesntHave('user')
|
||||
->cursor()
|
||||
->when(Ninja::isHosted())
|
||||
->each(function ($cu) {
|
||||
|
||||
$this->logMessage("Missing user for Company User # {$cu->id}");
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
@ -264,14 +264,14 @@ class BaseRule implements RuleInterface
|
||||
return USStates::getState(strlen($this->client->postal_code) > 1 ? $this->client->postal_code : $this->client->shipping_postal_code);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
return $this->client->company->country()->iso_3166_2 == 'US' ? $this->client->company->tax_data->seller_subregion : 'CA';
|
||||
return 'CA';
|
||||
}
|
||||
}
|
||||
|
||||
public function isTaxableRegion(): bool
|
||||
{
|
||||
return $this->client->company->tax_data->regions->{$this->client_region}->tax_all_subregions ||
|
||||
(property_exists($this->client->company->tax_data->regions->{$this->client_region}->subregions, $this->client_subregion) && $this->client->company->tax_data->regions->{$this->client_region}->subregions->{$this->client_subregion}->apply_tax);
|
||||
(property_exists($this->client->company->tax_data->regions->{$this->client_region}->subregions, $this->client_subregion) && ($this->client->company->tax_data->regions->{$this->client_region}->subregions->{$this->client_subregion}->apply_tax ?? false));
|
||||
}
|
||||
|
||||
public function defaultForeign(): self
|
||||
|
@ -36,4 +36,10 @@ interface RuleInterface
|
||||
public function override($item);
|
||||
|
||||
public function calculateRates();
|
||||
|
||||
public function regionWithNoTaxCoverage(string $iso_3166_2): bool;
|
||||
|
||||
public function setEntity($entity): self;
|
||||
|
||||
public function shouldCalcTax(): bool;
|
||||
}
|
||||
|
@ -29,11 +29,13 @@ class DocumentFilters extends QueryFilters
|
||||
*/
|
||||
public function filter(string $filter = ''): Builder
|
||||
{
|
||||
|
||||
if (strlen($filter) == 0) {
|
||||
return $this->builder;
|
||||
}
|
||||
|
||||
return $this->builder;
|
||||
return $this->builder->where('name', 'like', '%'.$filter.'%');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -47,9 +49,46 @@ class DocumentFilters extends QueryFilters
|
||||
*/
|
||||
public function client_id(string $client_id = ''): Builder
|
||||
{
|
||||
return $this->builder;
|
||||
|
||||
return $this->builder->where(function ($query) use ($client_id) {
|
||||
$query->whereHasMorph('documentable', [
|
||||
\App\Models\Invoice::class,
|
||||
\App\Models\Quote::class,
|
||||
\App\Models\Credit::class,
|
||||
\App\Models\Expense::class,
|
||||
\App\Models\Payment::class,
|
||||
\App\Models\Task::class,
|
||||
\App\Models\RecurringExpense::class,
|
||||
\App\Models\RecurringInvoice::class,
|
||||
\App\Models\Project::class,
|
||||
], function ($q2) use ($client_id) {
|
||||
$q2->where('client_id', $this->decodePrimaryKey($client_id));
|
||||
})->orWhereHasMorph('documentable', [\App\Models\Client::class], function ($q3) use ($client_id) {
|
||||
$q3->where('id', $this->decodePrimaryKey($client_id));
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public function type(string $types = '')
|
||||
{
|
||||
$types = explode(',', $types);
|
||||
|
||||
foreach ($types as $type)
|
||||
{
|
||||
match($type) {
|
||||
'private' => $this->builder->where('is_public', 0),
|
||||
'public' => $this->builder->where('is_public', 1),
|
||||
'pdf' => $this->builder->where('type', 'pdf'),
|
||||
'image' => $this->builder->whereIn('type', ['png','jpeg','jpg','gif','svg']),
|
||||
'other' => $this->builder->whereNotIn('type', ['pdf','png','jpeg','jpg','gif','svg']),
|
||||
default => $this->builder,
|
||||
};
|
||||
}
|
||||
|
||||
return $this->builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts the list based on $sort.
|
||||
*
|
||||
|
@ -164,7 +164,7 @@ class PaymentFilters extends QueryFilters
|
||||
{
|
||||
$sort_col = explode('|', $sort);
|
||||
|
||||
if (!is_array($sort_col) || count($sort_col) != 2 || !in_array($sort_col, Schema::getColumnListing('payments'))) {
|
||||
if (!is_array($sort_col) || count($sort_col) != 2 || !in_array($sort_col[0], Schema::getColumnListing('payments'))) {
|
||||
return $this->builder;
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,7 @@ class UserFilters extends QueryFilters
|
||||
{
|
||||
$sort_col = explode('|', $sort);
|
||||
|
||||
if (!is_array($sort_col) || count($sort_col) != 2 || !in_array($sort_col, \Illuminate\Support\Facades\Schema::getColumnListing('users'))) {
|
||||
if (!is_array($sort_col) || count($sort_col) != 2 || !in_array($sort_col[0], \Illuminate\Support\Facades\Schema::getColumnListing('users'))) {
|
||||
return $this->builder;
|
||||
}
|
||||
|
||||
|
@ -177,10 +177,12 @@ class InvoiceItemSum
|
||||
|
||||
if (in_array($this->client->company->country()->iso_3166_2, $this->tax_jurisdictions)) { //only calculate for supported tax jurisdictions
|
||||
|
||||
|
||||
/** @var \App\DataMapper\Tax\BaseRule $class */
|
||||
$class = "App\DataMapper\Tax\\".$this->client->company->country()->iso_3166_2."\\Rule";
|
||||
|
||||
$this->rule = new $class();
|
||||
|
||||
|
||||
if($this->rule->regionWithNoTaxCoverage($this->client->country->iso_3166_2)) {
|
||||
return $this;
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ class InvoiceSum
|
||||
|
||||
private function calculateInvoiceTaxes(): self
|
||||
{
|
||||
if (is_string($this->invoice->tax_name1) && strlen($this->invoice->tax_name1) > 1) {
|
||||
if (is_string($this->invoice->tax_name1) && strlen($this->invoice->tax_name1) >= 2) {
|
||||
$tax = $this->taxer($this->total, $this->invoice->tax_rate1);
|
||||
$tax += $this->getSurchargeTaxTotalForKey($this->invoice->tax_name1, $this->invoice->tax_rate1);
|
||||
|
||||
@ -130,7 +130,7 @@ class InvoiceSum
|
||||
$this->total_tax_map[] = ['name' => $this->invoice->tax_name1.' '.floatval($this->invoice->tax_rate1).'%', 'total' => $tax];
|
||||
}
|
||||
|
||||
if (is_string($this->invoice->tax_name2) && strlen($this->invoice->tax_name2) > 1) {
|
||||
if (is_string($this->invoice->tax_name2) && strlen($this->invoice->tax_name2) >= 2) {
|
||||
$tax = $this->taxer($this->total, $this->invoice->tax_rate2);
|
||||
$tax += $this->getSurchargeTaxTotalForKey($this->invoice->tax_name2, $this->invoice->tax_rate2);
|
||||
|
||||
@ -138,7 +138,7 @@ class InvoiceSum
|
||||
$this->total_tax_map[] = ['name' => $this->invoice->tax_name2.' '.floatval($this->invoice->tax_rate2).'%', 'total' => $tax];
|
||||
}
|
||||
|
||||
if (is_string($this->invoice->tax_name3) && strlen($this->invoice->tax_name3) > 1) {
|
||||
if (is_string($this->invoice->tax_name3) && strlen($this->invoice->tax_name3) >= 2) {
|
||||
$tax = $this->taxer($this->total, $this->invoice->tax_rate3);
|
||||
$tax += $this->getSurchargeTaxTotalForKey($this->invoice->tax_name3, $this->invoice->tax_rate3);
|
||||
|
||||
@ -242,9 +242,9 @@ class InvoiceSum
|
||||
|
||||
if ($this->invoice->status_id != Invoice::STATUS_DRAFT) {
|
||||
if ($this->invoice->amount != $this->invoice->balance) {
|
||||
$paid_to_date = $this->invoice->amount - $this->invoice->balance;
|
||||
// $paid_to_date = $this->invoice->amount - $this->invoice->balance;
|
||||
|
||||
$this->invoice->balance = Number::roundValue($this->getTotal(), $this->precision) - $paid_to_date;
|
||||
$this->invoice->balance = Number::roundValue($this->getTotal(), $this->precision) - $this->invoice->paid_to_date; //21-02-2024 cannot use the calculated $paid_to_date here as it could send the balance backward.
|
||||
} else {
|
||||
$this->invoice->balance = Number::roundValue($this->getTotal(), $this->precision);
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ class InvoiceSumInclusive
|
||||
private function calculateInvoiceTaxes()
|
||||
{
|
||||
$amount = $this->total;
|
||||
|
||||
|
||||
if ($this->invoice->discount > 0 && $this->invoice->is_amount_discount) {
|
||||
$amount = $this->formatValue(($this->sub_total - $this->invoice->discount), 2);
|
||||
}
|
||||
@ -131,20 +131,20 @@ class InvoiceSumInclusive
|
||||
$amount = $this->formatValue(($this->sub_total - ($this->sub_total * ($this->invoice->discount / 100))), 2);
|
||||
}
|
||||
|
||||
if ($this->invoice->tax_rate1 > 0) {
|
||||
if (is_string($this->invoice->tax_name1) && strlen($this->invoice->tax_name1) > 1) {
|
||||
$tax = $this->calcInclusiveLineTax($this->invoice->tax_rate1, $amount);
|
||||
$this->total_taxes += $tax;
|
||||
|
||||
$this->total_tax_map[] = ['name' => $this->invoice->tax_name1.' '.floatval($this->invoice->tax_rate1).'%', 'total' => $tax];
|
||||
}
|
||||
|
||||
if ($this->invoice->tax_rate2 > 0) {
|
||||
if (is_string($this->invoice->tax_name2) && strlen($this->invoice->tax_name2) > 1) {
|
||||
$tax = $this->calcInclusiveLineTax($this->invoice->tax_rate2, $amount);
|
||||
$this->total_taxes += $tax;
|
||||
$this->total_tax_map[] = ['name' => $this->invoice->tax_name2.' '.floatval($this->invoice->tax_rate2).'%', 'total' => $tax];
|
||||
}
|
||||
|
||||
if ($this->invoice->tax_rate3 > 0) {
|
||||
if (is_string($this->invoice->tax_name3) && strlen($this->invoice->tax_name3) > 1) {
|
||||
$tax = $this->calcInclusiveLineTax($this->invoice->tax_rate3, $amount);
|
||||
$this->total_taxes += $tax;
|
||||
$this->total_tax_map[] = ['name' => $this->invoice->tax_name3.' '.floatval($this->invoice->tax_rate3).'%', 'total' => $tax];
|
||||
@ -259,9 +259,9 @@ class InvoiceSumInclusive
|
||||
/* If amount != balance then some money has been paid on the invoice, need to subtract this difference from the total to set the new balance */
|
||||
if ($this->invoice->status_id != Invoice::STATUS_DRAFT) {
|
||||
if ($this->invoice->amount != $this->invoice->balance) {
|
||||
$paid_to_date = $this->invoice->amount - $this->invoice->balance;
|
||||
// $paid_to_date = $this->invoice->amount - $this->invoice->balance;
|
||||
|
||||
$this->invoice->balance = $this->formatValue($this->getTotal(), $this->precision) - $paid_to_date;
|
||||
$this->invoice->balance = $this->formatValue($this->getTotal(), $this->precision) - $this->invoice->paid_to_date;
|
||||
} else {
|
||||
$this->invoice->balance = $this->formatValue($this->getTotal(), $this->precision);
|
||||
}
|
||||
|
@ -49,6 +49,9 @@ use App\Http\Requests\Client\ClientDocumentsRequest;
|
||||
use App\Http\Requests\Client\ReactivateClientEmailRequest;
|
||||
use App\Models\Expense;
|
||||
use App\Models\Payment;
|
||||
use App\Models\Project;
|
||||
use App\Models\RecurringExpense;
|
||||
use App\Models\RecurringInvoice;
|
||||
use App\Models\Task;
|
||||
use App\Transformers\DocumentTransformer;
|
||||
|
||||
@ -421,7 +424,7 @@ class ClientController extends BaseController
|
||||
|
||||
$documents = Document::query()
|
||||
->company()
|
||||
->whereHasMorph('documentable', [Invoice::class, Quote::class, Credit::class, Expense::class, Payment::class, Task::class], function ($query) use ($client) {
|
||||
->whereHasMorph('documentable', [Invoice::class, Quote::class, Credit::class, Expense::class, Payment::class, Task::class, RecurringInvoice::class, RecurringExpense::class, Project::class], function ($query) use ($client) {
|
||||
$query->where('client_id', $client->id);
|
||||
})
|
||||
->orWhereHasMorph('documentable', [Client::class], function ($query) use ($client) {
|
||||
|
@ -236,7 +236,6 @@ class InvoiceController extends Controller
|
||||
'hashed_ids' => $invoices->pluck('hashed_id'),
|
||||
'total' => $total,
|
||||
'variables' => $variables,
|
||||
|
||||
];
|
||||
|
||||
return $this->render('invoices.payment', $data);
|
||||
|
@ -89,6 +89,8 @@ class PrePaymentController extends Controller
|
||||
|
||||
$total = $invoice->balance;
|
||||
|
||||
$invitation = $invoice->invitations->first();
|
||||
|
||||
//format totals
|
||||
$formatted_total = Number::formatMoney($invoice->amount, auth()->guard('contact')->user()->client);
|
||||
|
||||
@ -121,7 +123,8 @@ class PrePaymentController extends Controller
|
||||
'frequency_id' => $request->frequency_id,
|
||||
'remaining_cycles' => $request->remaining_cycles,
|
||||
'is_recurring' => $request->is_recurring == 'on' ? true : false,
|
||||
'variables' => $variables,
|
||||
'variables' => $variables = ($invitation && auth()->guard('contact')->user()->client->getSetting('show_accept_invoice_terms')) ? (new HtmlEngine($invitation))->generateLabelsAndValues() : false,
|
||||
|
||||
];
|
||||
|
||||
return $this->render('invoices.payment', $data);
|
||||
|
@ -260,6 +260,8 @@ class ImportController extends Controller
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** @phpstan-ignore-next-line **/
|
||||
return $bestDelimiter ?? ',';
|
||||
|
||||
}
|
||||
|
@ -30,18 +30,24 @@ class SmtpController extends BaseController
|
||||
$user = auth()->user();
|
||||
$company = $user->company();
|
||||
|
||||
|
||||
$smtp_host = $request->input('smtp_host', $company->smtp_host);
|
||||
$smtp_port = $request->input('smtp_port', $company->smtp_port);
|
||||
$smtp_username = $request->input('smtp_username', $company->smtp_username);
|
||||
$smtp_password = $request->input('smtp_password', $company->smtp_password);
|
||||
$smtp_encryption = $request->input('smtp_encryption', $company->smtp_encryption ?? 'tls');
|
||||
$smtp_local_domain = $request->input('smtp_local_domain', strlen($company->smtp_local_domain) > 2 ? $company->smtp_local_domain : null);
|
||||
$smtp_verify_peer = $request->input('verify_peer', $company->smtp_verify_peer ?? true);
|
||||
|
||||
config([
|
||||
'mail.mailers.smtp' => [
|
||||
'transport' => 'smtp',
|
||||
'host' => $request->input('smtp_host', $company->smtp_host),
|
||||
'port' => $request->input('smtp_port', $company->smtp_port),
|
||||
'username' => $request->input('smtp_username', $company->smtp_username),
|
||||
'password' => $request->input('smtp_password', $company->smtp_password),
|
||||
'encryption' => $request->input('smtp_encryption', $company->smtp_encryption ?? 'tls'),
|
||||
'local_domain' => $request->input('smtp_local_domain', strlen($company->smtp_local_domain) > 2 ? $company->smtp_local_domain : null),
|
||||
'verify_peer' => $request->input('verify_peer', $company->smtp_verify_peer ?? true),
|
||||
'host' => $smtp_host,
|
||||
'port' => $smtp_port,
|
||||
'username' => $smtp_username,
|
||||
'password' => $smtp_password,
|
||||
'encryption' => $smtp_encryption,
|
||||
'local_domain' => $smtp_local_domain,
|
||||
'verify_peer' => $smtp_verify_peer,
|
||||
'timeout' => 5,
|
||||
],
|
||||
]);
|
||||
|
@ -54,6 +54,8 @@ class StripeConnectController extends BaseController
|
||||
$redirect_uri = config('ninja.app_url').'/stripe/completed';
|
||||
$endpoint = "https://connect.stripe.com/oauth/authorize?response_type=code&client_id={$stripe_client_id}&redirect_uri={$redirect_uri}&scope=read_write&state={$token}";
|
||||
|
||||
\Illuminate\Support\Facades\Cache::pull($token);
|
||||
|
||||
return redirect($endpoint);
|
||||
}
|
||||
|
||||
@ -64,6 +66,8 @@ class StripeConnectController extends BaseController
|
||||
if ($request->has('error') && $request->error == 'access_denied') {
|
||||
return view('auth.connect.access_denied');
|
||||
}
|
||||
|
||||
$response = false;
|
||||
|
||||
try {
|
||||
/** @class \stdClass $response
|
||||
@ -88,6 +92,11 @@ class StripeConnectController extends BaseController
|
||||
nlog($response);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(!$response) {
|
||||
return view('auth.connect.access_denied');
|
||||
}
|
||||
|
||||
@ -144,11 +153,12 @@ class StripeConnectController extends BaseController
|
||||
if(isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react']) {
|
||||
$redirect_uri = config('ninja.react_url').'/#/settings/online_payments';
|
||||
} else {
|
||||
$redirect_uri = config('ninja.app_url').'/stripe/completed';
|
||||
$redirect_uri = config('ninja.app_url');
|
||||
}
|
||||
|
||||
//response here
|
||||
return view('auth.connect.completed', ['url' => $redirect_uri]);
|
||||
// return redirect($redirect_uri);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -72,6 +72,10 @@ class TwoFactorController extends BaseController
|
||||
return response()->json(['message' => ctrans('texts.enabled_two_factor')], 200);
|
||||
} elseif (! $secret || ! $google2fa->verifyKey($secret, $oneTimePassword)) {
|
||||
return response()->json(['message' => ctrans('texts.invalid_one_time_password')], 400);
|
||||
}elseif (! $user->phone) {
|
||||
return response()->json(['message' => ctrans('texts.set_phone_for_two_factor')], 400);
|
||||
} elseif (! $user->isVerified()) {
|
||||
return response()->json(['message' => 'Please confirm your account first'], 400);
|
||||
}
|
||||
|
||||
return response()->json(['message' => 'No phone record or user is not confirmed'], 400);
|
||||
|
@ -36,18 +36,46 @@ class CheckSmtpRequest extends Request
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'smtp_host' => 'sometimes|nullable|string|min:3',
|
||||
'smtp_port' => 'sometimes|nullable|integer',
|
||||
'smtp_username' => 'sometimes|nullable|string|min:3',
|
||||
'smtp_password' => 'sometimes|nullable|string|min:3',
|
||||
];
|
||||
}
|
||||
|
||||
public function prepareForValidation()
|
||||
{
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
$company = $user->company();
|
||||
|
||||
$input = $this->input();
|
||||
|
||||
if(isset($input['smtp_username']) && $input['smtp_username'] == '********')
|
||||
unset($input['smtp_username']);
|
||||
if(isset($input['smtp_username']) && $input['smtp_username'] == '********'){
|
||||
// unset($input['smtp_username']);
|
||||
$input['smtp_username'] = $company->smtp_username;
|
||||
}
|
||||
|
||||
if(isset($input['smtp_password'])&& $input['smtp_password'] == '********'){
|
||||
// unset($input['smtp_password']);
|
||||
$input['smtp_password'] = $company->smtp_password;
|
||||
}
|
||||
|
||||
if(isset($input['smtp_host']) && strlen($input['smtp_host']) >=3){
|
||||
|
||||
}
|
||||
else {
|
||||
$input['smtp_host'] = $company->smtp_host;
|
||||
}
|
||||
|
||||
|
||||
if(isset($input['smtp_port']) && strlen($input['smtp_port']) >= 3) {
|
||||
|
||||
} else {
|
||||
$input['smtp_port'] = $company->smtp_port;
|
||||
}
|
||||
|
||||
if(isset($input['smtp_password'])&& $input['smtp_password'] == '********')
|
||||
unset($input['smtp_password']);
|
||||
|
||||
$this->replace($input);
|
||||
}
|
||||
|
@ -153,6 +153,7 @@ class BaseImport
|
||||
|
||||
}
|
||||
|
||||
/** @phpstan-ignore-next-line **/
|
||||
return $bestDelimiter ?? ',';
|
||||
}
|
||||
|
||||
|
@ -69,10 +69,9 @@ class CompanyExport implements ShouldQueue
|
||||
{
|
||||
MultiDB::setDb($this->company->db);
|
||||
|
||||
|
||||
$this->file_name = date('Y-m-d') . '_' . str_replace([" ", "/"], ["_",""], $this->company->present()->name() . '_' . $this->company->company_key . '.json');
|
||||
|
||||
$this->writer = new File($this->file_name);
|
||||
$this->writer = new File(sys_get_temp_dir().'/'.$this->file_name);
|
||||
|
||||
set_time_limit(0);
|
||||
|
||||
@ -114,8 +113,6 @@ class CompanyExport implements ShouldQueue
|
||||
return $user;
|
||||
})->all();
|
||||
|
||||
|
||||
|
||||
$x = $this->writer->collection('users');
|
||||
$x->addItems($this->export_data['users']);
|
||||
$this->export_data = null;
|
||||
@ -667,7 +664,7 @@ class CompanyExport implements ShouldQueue
|
||||
private function zipAndSend()
|
||||
{
|
||||
|
||||
$zip_path = \Illuminate\Support\Str::ascii(str_replace(".json", ".zip", $this->file_name));
|
||||
$zip_path = sys_get_temp_dir().'/'.\Illuminate\Support\Str::ascii(str_replace(".json", ".zip", $this->file_name));
|
||||
|
||||
$zip = new \ZipArchive();
|
||||
|
||||
@ -675,8 +672,8 @@ class CompanyExport implements ShouldQueue
|
||||
nlog("cannot open {$zip_path}");
|
||||
}
|
||||
|
||||
$zip->addFile($this->file_name);
|
||||
$zip->renameName($this->file_name, 'backup.json');
|
||||
$zip->addFile(sys_get_temp_dir().'/'.$this->file_name, 'backup.json');
|
||||
// $zip->renameName($this->file_name, 'backup.json');
|
||||
|
||||
$zip->close();
|
||||
|
||||
@ -686,8 +683,8 @@ class CompanyExport implements ShouldQueue
|
||||
unlink($zip_path);
|
||||
}
|
||||
|
||||
if(file_exists($this->file_name)) {
|
||||
unlink($this->file_name);
|
||||
if(file_exists(sys_get_temp_dir().'/'.$this->file_name)) {
|
||||
unlink(sys_get_temp_dir().'/'.$this->file_name);
|
||||
}
|
||||
|
||||
if(Ninja::isSelfHost()) {
|
||||
@ -717,8 +714,8 @@ class CompanyExport implements ShouldQueue
|
||||
if (Ninja::isHosted()) {
|
||||
sleep(3);
|
||||
|
||||
if(file_exists($zip_path)) {
|
||||
unlink($zip_path);
|
||||
if(file_exists(sys_get_temp_dir().'/'.$zip_path)) {
|
||||
unlink(sys_get_temp_dir().'/'.$zip_path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,6 @@ use App\Utils\Traits\MakesReminders;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Spatie\OpenTelemetry\Jobs\TraceAware;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
|
||||
|
@ -208,6 +208,29 @@ class Document extends BaseModel
|
||||
return ctrans('texts.document');
|
||||
}
|
||||
|
||||
public function link()
|
||||
{
|
||||
$entity_id = $this->encodePrimaryKey($this->documentable_id);
|
||||
$link = '';
|
||||
|
||||
match($this->documentable_type) {
|
||||
'App\Models\Vendor' => $link = "/vendors/{$entity_id}",
|
||||
'App\Models\Project' => $link = "/projects/{$entity_id}",
|
||||
'invoices' => $link = "/invoices/{$entity_id}/edit",
|
||||
'App\Models\Quote' => $link = "/quotes/{$entity_id}/edit",
|
||||
'App\Models\Credit' => $link = "/credits/{$entity_id}/edit",
|
||||
'App\Models\Expense' => $link = "/expenses/{$entity_id}/edit",
|
||||
'App\Models\Payment' => $link = "/payments/{$entity_id}/edit",
|
||||
'App\Models\Task' => $link = "/tasks/{$entity_id}/edit",
|
||||
'App\Models\Client' => $link = "/clients/{$entity_id}",
|
||||
'App\Models\RecurringExpense' => $link = "/recurring_expenses/{$entity_id}/edit",
|
||||
'App\Models\RecurringInvoice' => $link = "/recurring_invoices/{$entity_id}/edit",
|
||||
default => $link = '',
|
||||
};
|
||||
|
||||
return $link;
|
||||
}
|
||||
|
||||
public function compress(): mixed
|
||||
{
|
||||
|
||||
|
@ -90,7 +90,7 @@ class InvoiceService
|
||||
if ($company_currency != $client_currency) {
|
||||
$exchange_rate = new CurrencyApi();
|
||||
|
||||
$this->invoice->exchange_rate = $exchange_rate->exchangeRate($client_currency, $company_currency, now());
|
||||
$this->invoice->exchange_rate = 1/$exchange_rate->exchangeRate($client_currency, $company_currency, now());
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
@ -90,6 +90,9 @@ class ARDetailReport extends BaseExport
|
||||
|
||||
$query = Invoice::query()
|
||||
->withTrashed()
|
||||
->whereHas('client', function ($query){
|
||||
$query->where('is_deleted', 0);
|
||||
})
|
||||
->where('company_id', $this->company->id)
|
||||
->where('is_deleted', 0)
|
||||
->where('balance', '>', 0)
|
||||
|
@ -125,9 +125,9 @@ class ARSummaryReport extends BaseExport
|
||||
$amount = Invoice::withTrashed()
|
||||
->where('client_id', $this->client->id)
|
||||
->where('company_id', $this->client->company_id)
|
||||
->where('is_deleted', 0)
|
||||
->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL])
|
||||
->where('balance', '>', 0)
|
||||
->where('is_deleted', 0)
|
||||
->where(function ($query) {
|
||||
$query->where('due_date', '>', now()->startOfDay())
|
||||
->orWhereNull('due_date');
|
||||
|
@ -25,6 +25,8 @@ use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Str;
|
||||
use League\Csv\Writer;
|
||||
|
||||
use function Sentry\continueTrace;
|
||||
|
||||
class ProfitLoss
|
||||
{
|
||||
private bool $is_income_billed = true;
|
||||
@ -280,27 +282,36 @@ class ProfitLoss
|
||||
$tax_amount_credit = 0;
|
||||
$tax_amount_credit_converted = $tax_amount_credit_converted = 0;
|
||||
|
||||
$invoice = false;
|
||||
|
||||
foreach ($payment->paymentables as $pivot) {
|
||||
if ($pivot->paymentable_type == 'invoices') {
|
||||
$invoice = Invoice::query()->withTrashed()->find($pivot->paymentable_id);
|
||||
|
||||
if(!$invoice)
|
||||
continue;
|
||||
|
||||
$pivot_diff = $pivot->amount - $pivot->refunded;
|
||||
$amount_payment_paid += $pivot_diff;
|
||||
$amount_payment_paid_converted += $pivot_diff / ($payment->exchange_rate ?: 1);
|
||||
$amount_payment_paid_converted += $pivot_diff * ($payment->exchange_rate ?: 1);
|
||||
|
||||
if ($invoice->amount > 0) {
|
||||
$tax_amount += ($pivot_diff / $invoice->amount) * $invoice->total_taxes;
|
||||
$tax_amount_converted += (($pivot_diff / $invoice->amount) * $invoice->total_taxes) / $payment->exchange_rate;
|
||||
$tax_amount_converted += (($pivot_diff / $invoice->amount) * $invoice->total_taxes) / $invoice->exchange_rate;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!$invoice) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($pivot->paymentable_type == 'credits') {
|
||||
$amount_credit_paid += $pivot->amount - $pivot->refunded;
|
||||
$amount_credit_paid_converted += $pivot_diff / ($payment->exchange_rate ?: 1);
|
||||
$amount_credit_paid_converted += $pivot_diff * ($payment->exchange_rate ?: 1);
|
||||
|
||||
$tax_amount_credit += ($pivot_diff / $invoice->amount) * $invoice->total_taxes;
|
||||
$tax_amount_credit_converted += (($pivot_diff / $invoice->amount) * $invoice->total_taxes) / $payment->exchange_rate;
|
||||
$tax_amount_credit_converted += (($pivot_diff / $invoice->amount) * $invoice->total_taxes) / $invoice->exchange_rate;
|
||||
}
|
||||
}
|
||||
|
||||
@ -340,6 +351,10 @@ class ProfitLoss
|
||||
*/
|
||||
public function getCsv()
|
||||
{
|
||||
nlog($this->income);
|
||||
nlog($this->income_taxes);
|
||||
nlog(array_sum(array_column($this->expense_break_down, 'total')));
|
||||
|
||||
MultiDB::setDb($this->company->db);
|
||||
App::forgetInstance('translator');
|
||||
App::setLocale($this->company->locale());
|
||||
@ -356,7 +371,7 @@ class ProfitLoss
|
||||
|
||||
$csv->insertOne(['--------------------']);
|
||||
|
||||
$csv->insertOne([ctrans('texts.total_revenue'), Number::formatMoney($this->income, $this->company)]);
|
||||
$csv->insertOne([ctrans('texts.total_revenue'). "[".ctrans('texts.tax')." " .ctrans('texts.exclusive'). "]", Number::formatMoney($this->income, $this->company)]);
|
||||
|
||||
//total taxes
|
||||
|
||||
@ -371,12 +386,12 @@ class ProfitLoss
|
||||
//total expense taxes
|
||||
|
||||
$csv->insertOne(['--------------------']);
|
||||
$csv->insertOne([ctrans('texts.total_expenses'), Number::formatMoney(array_sum(array_column($this->expense_break_down, 'total')), $this->company)]);
|
||||
$csv->insertOne([ctrans('texts.total_expenses'). "[".ctrans('texts.tax')." " .ctrans('texts.exclusive'). "]", Number::formatMoney(array_sum(array_column($this->expense_break_down, 'total')), $this->company)]);
|
||||
|
||||
$csv->insertOne([ctrans('texts.total_taxes'), Number::formatMoney(array_sum(array_column($this->expense_break_down, 'tax')), $this->company)]);
|
||||
|
||||
$csv->insertOne(['--------------------']);
|
||||
$csv->insertOne([ctrans('texts.total_profit'), Number::formatMoney($this->income - $this->income_taxes - array_sum(array_column($this->expense_break_down, 'total')) - array_sum(array_column($this->expense_break_down, 'tax')), $this->company)]);
|
||||
$csv->insertOne([ctrans('texts.total_profit'), Number::formatMoney($this->income - array_sum(array_column($this->expense_break_down, 'total')), $this->company)]);
|
||||
|
||||
//net profit
|
||||
|
||||
@ -384,11 +399,25 @@ class ProfitLoss
|
||||
$csv->insertOne(['']);
|
||||
$csv->insertOne(['']);
|
||||
|
||||
|
||||
$csv->insertOne(['--------------------']);
|
||||
$csv->insertOne([ctrans('texts.revenue')]);
|
||||
$csv->insertOne(['--------------------']);
|
||||
|
||||
$csv->insertOne([ctrans('texts.currency'), ctrans('texts.amount'), ctrans('texts.total_taxes')]);
|
||||
foreach ($this->foreign_income as $foreign_income) {
|
||||
$csv->insertOne([$foreign_income['currency'], ($foreign_income['amount'] - $foreign_income['total_taxes']), $foreign_income['total_taxes']]);
|
||||
}
|
||||
|
||||
$csv->insertOne(['']);
|
||||
$csv->insertOne(['']);
|
||||
$csv->insertOne(['--------------------']);
|
||||
$csv->insertOne([ctrans('texts.expenses')]);
|
||||
$csv->insertOne(['--------------------']);
|
||||
foreach($this->expenses as $expense){
|
||||
$csv->insertOne([$expense->currency, ($expense->total - $expense->foreign_tax_amount), $expense->foreign_tax_amount]);
|
||||
}
|
||||
|
||||
return $csv->toString();
|
||||
}
|
||||
|
||||
@ -421,6 +450,11 @@ class ProfitLoss
|
||||
private function expenseData()
|
||||
{
|
||||
$expenses = Expense::query()->where('company_id', $this->company->id)
|
||||
->where(function ($query){
|
||||
$query->whereNull('client_id')->orWhereHas('client', function ($q){
|
||||
$q->where('is_deleted', 0);
|
||||
});
|
||||
})
|
||||
->where('is_deleted', 0)
|
||||
->withTrashed()
|
||||
->whereBetween('date', [$this->start_date, $this->end_date])
|
||||
@ -428,19 +462,21 @@ class ProfitLoss
|
||||
|
||||
$this->expenses = [];
|
||||
|
||||
$company_currency_code = $this->company->currency()->code;
|
||||
|
||||
foreach ($expenses as $expense) {
|
||||
$map = new \stdClass();
|
||||
|
||||
$amount = $expense->amount;
|
||||
|
||||
$expense_tax_total = $this->getTax($expense);
|
||||
$map->total = $expense->amount;
|
||||
$map->converted_total = $converted_total = $this->getConvertedTotal($expense->amount, $expense->exchange_rate);
|
||||
$map->tax = $tax = $this->getTax($expense);
|
||||
$map->net_converted_total = $expense->uses_inclusive_taxes ? ($converted_total - $tax) : $converted_total;
|
||||
$map->converted_total = $converted_total = $this->getConvertedTotal($expense->amount, $expense->exchange_rate); //converted to company currency
|
||||
$map->tax = $tax = $this->getConvertedTotal($expense_tax_total, $expense->exchange_rate); //tax component
|
||||
$map->net_converted_total = $expense->uses_inclusive_taxes ? ($converted_total - $tax) : $converted_total; //excludes all taxes
|
||||
$map->category_id = $expense->category_id;
|
||||
$map->category_name = $expense->category ? $expense->category->name : 'No Category Defined';
|
||||
$map->currency_id = $expense->currency_id ?: $expense->company->settings->currency_id;
|
||||
|
||||
$map->currency = $expense->currency ? $expense->currency->code : $company_currency_code;
|
||||
$map->foreign_tax_amount = $expense_tax_total;
|
||||
$this->expenses[] = $map;
|
||||
}
|
||||
|
||||
@ -480,10 +516,6 @@ class ProfitLoss
|
||||
//is amount tax
|
||||
|
||||
if ($expense->calculate_tax_by_amount) {
|
||||
nlog($expense->tax_amount1);
|
||||
nlog($expense->tax_amount2);
|
||||
nlog($expense->tax_amount3);
|
||||
|
||||
return $expense->tax_amount1 + $expense->tax_amount2 + $expense->tax_amount3;
|
||||
}
|
||||
|
||||
|
@ -75,8 +75,8 @@ class TaxSummaryReport extends BaseExport
|
||||
|
||||
$query = Invoice::query()
|
||||
->withTrashed()
|
||||
->whereIn('status_id', [2,3,4])
|
||||
->where('company_id', $this->company->id)
|
||||
->whereIn('status_id', [2,3,4])
|
||||
->where('is_deleted', 0)
|
||||
->orderBy('balance', 'desc');
|
||||
|
||||
|
@ -52,6 +52,7 @@ class DocumentTransformer extends EntityTransformer
|
||||
'created_at' => (int) $document->created_at,
|
||||
'is_deleted' => (bool) false,
|
||||
'is_public' => (bool) $document->is_public,
|
||||
'link' => (string) $document->link(),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -397,7 +397,8 @@ class HtmlEngine
|
||||
$data['$credit.date'] = ['value' => $this->translateDate($this->entity->date, $this->client->date_format(), $this->client->locale()), 'label' => ctrans('texts.credit_date')];
|
||||
$data['$balance'] = ['value' => Number::formatMoney($this->getBalance(), $this->client) ?: ' ', 'label' => ctrans('texts.balance')];
|
||||
$data['$credit.balance'] = ['value' => Number::formatMoney($this->entity_calc->getBalance(), $this->client) ?: ' ', 'label' => ctrans('texts.credit_balance')];
|
||||
|
||||
$data['$client.credit_balance'] = &$data['$credit.balance'];
|
||||
|
||||
$data['$invoice.balance'] = &$data['$balance'];
|
||||
$data['$taxes'] = ['value' => Number::formatMoney($this->entity_calc->getItemTotalTaxes(), $this->client) ?: ' ', 'label' => ctrans('texts.taxes')];
|
||||
$data['$invoice.taxes'] = &$data['$taxes'];
|
||||
|
@ -93,35 +93,102 @@ class Number
|
||||
* @param string $value The formatted number to be converted back to float
|
||||
* @return float The formatted value
|
||||
*/
|
||||
public static function parseFloat($value)
|
||||
public static function parseFloat2($value)
|
||||
{
|
||||
if(!$value)
|
||||
return 0;
|
||||
|
||||
$multiplier = false;
|
||||
//remove everything except for numbers, decimals, commas and hyphens
|
||||
$value = preg_replace('/[^0-9.,-]+/', '', $value);
|
||||
|
||||
if(substr($value, 0,1) == '-')
|
||||
$multiplier = -1;
|
||||
$decimal = strpos($value, '.');
|
||||
$comma = strpos($value, ',');
|
||||
|
||||
if($comma === false) //no comma must be a decimal number already
|
||||
return (float) $value;
|
||||
|
||||
// convert "," to "."
|
||||
$s = str_replace(',', '.', $value);
|
||||
|
||||
// remove everything except numbers and dot "."
|
||||
$s = preg_replace("/[^0-9\.]/", '', $s);
|
||||
|
||||
if ($s < 1) {
|
||||
return (float) $s;
|
||||
if($decimal < $comma){ //decimal before a comma = euro
|
||||
$value = str_replace(['.',','], ['','.'], $value);
|
||||
// $value = str_replace(',', '.', $value);
|
||||
return (float) $value;
|
||||
}
|
||||
|
||||
// remove all separators from first part and keep the end
|
||||
$s = str_replace('.', '', substr($s, 0, -3)).substr($s, -3);
|
||||
//comma first = traditional thousan separator
|
||||
$value = str_replace(',', '', $value);
|
||||
|
||||
return (float)$value;
|
||||
|
||||
|
||||
// if(!$value)
|
||||
// return 0;
|
||||
|
||||
if($multiplier)
|
||||
$s = floatval($s)*-1;
|
||||
// $multiplier = false;
|
||||
|
||||
return (float) $s;
|
||||
// if(substr($value, 0,1) == '-')
|
||||
// $multiplier = -1;
|
||||
|
||||
// $s = str_replace(',', '.', $value);
|
||||
|
||||
// $s = preg_replace("/[^0-9\.]/", '', $s);
|
||||
|
||||
// if ($s < 1) {
|
||||
// return (float) $s;
|
||||
// }
|
||||
|
||||
// $s = str_replace('.', '', substr($s, 0, -3)).substr($s, -3);
|
||||
|
||||
// if($multiplier)
|
||||
// $s = floatval($s)*-1;
|
||||
|
||||
// return (float) $s;
|
||||
}
|
||||
|
||||
|
||||
//next iteration of float parsing
|
||||
public static function parseFloat($value)
|
||||
{
|
||||
|
||||
if(!$value) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
//remove everything except for numbers, decimals, commas and hyphens
|
||||
$value = preg_replace('/[^0-9.,-]+/', '', $value);
|
||||
|
||||
$decimal = strpos($value, '.');
|
||||
$comma = strpos($value, ',');
|
||||
|
||||
//check the 3rd last character
|
||||
if(!in_array(substr($value, -3, 1), [".", ","])) {
|
||||
|
||||
if($comma && (substr($value, -3, 1) != ".")) {
|
||||
$value .= ".00";
|
||||
} elseif($decimal && (substr($value, -3, 1) != ",")) {
|
||||
$value .= ",00";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$decimal = strpos($value, '.');
|
||||
$comma = strpos($value, ',');
|
||||
|
||||
if($comma === false) { //no comma must be a decimal number already
|
||||
return (float) $value;
|
||||
}
|
||||
|
||||
if($decimal < $comma) { //decimal before a comma = euro
|
||||
$value = str_replace(['.',','], ['','.'], $value);
|
||||
return (float) $value;
|
||||
}
|
||||
|
||||
//comma first = traditional thousan separator
|
||||
$value = str_replace(',', '', $value);
|
||||
|
||||
return (float)$value;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static function parseStringFloat($value)
|
||||
{
|
||||
$value = preg_replace('/[^0-9-.]+/', '', $value);
|
||||
|
@ -84,6 +84,7 @@ class SystemHealth
|
||||
'trailing_slash' => (bool) self::checkUrlState(),
|
||||
'file_permissions' => (string) self::checkFileSystem(),
|
||||
'exchange_rate_api_not_configured' => (bool)self::checkCurrencySanity(),
|
||||
'api_version' => (string) config('ninja.app_version'),
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -17,8 +17,8 @@ return [
|
||||
'require_https' => env('REQUIRE_HTTPS', true),
|
||||
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
||||
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
||||
'app_version' => env('APP_VERSION', '5.8.27'),
|
||||
'app_tag' => env('APP_TAG', '5.8.27'),
|
||||
'app_version' => env('APP_VERSION', '5.8.32'),
|
||||
'app_tag' => env('APP_TAG', '5.8.32'),
|
||||
'minimum_client_version' => '5.0.16',
|
||||
'terms_version' => '1.0.1',
|
||||
'api_secret' => env('API_SECRET', false),
|
||||
|
@ -19,7 +19,7 @@ return new class extends Migration
|
||||
$table->text('smtp_username')->nullable();
|
||||
$table->text('smtp_password')->nullable();
|
||||
$table->string('smtp_local_domain')->nullable();
|
||||
$table->boolean('smtp_verify_peer')->default(0);
|
||||
$table->boolean('smtp_verify_peer')->default(true);
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -3849,7 +3849,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'الإلغاء معلق ، سنكون على اتصال!',
|
||||
'list_of_payments' => 'قائمة المدفوعات',
|
||||
'payment_details' => 'تفاصيل الدفع',
|
||||
'list_of_payment_invoices' => 'قائمة الفواتير المتأثرة بالدفع',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'قائمة طرق الدفع',
|
||||
'payment_method_details' => 'تفاصيل طريقة الدفع',
|
||||
'permanently_remove_payment_method' => 'قم بإزالة طريقة الدفع هذه بشكل دائم.',
|
||||
@ -4906,7 +4906,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'لا توجد مهام قابلة للفوترة لهذا المشروع',
|
||||
'authorization_failure' => 'أذونات غير كافية لتنفيذ هذا الإجراء',
|
||||
'authorization_sms_failure' => 'يرجى التحقق من حسابك لإرسال رسائل البريد الإلكتروني.',
|
||||
'white_label_body' => 'شكرا لشرائك رخصة البطاقة البيضاء.<br><br> مفتاح الترخيص الخاص بك هو:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'كلارنا',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'مستحق الدفع paydate: صافي أيام الدفع payeddue: تاريخ الدفع',
|
||||
@ -5101,7 +5101,7 @@ $lang = array(
|
||||
'set_private' => 'تعيين خاص',
|
||||
'individual' => 'فردي',
|
||||
'business' => 'عمل',
|
||||
'partnership' => 'شراكة',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'يثق',
|
||||
'charity' => 'صدقة',
|
||||
'government' => 'حكومة',
|
||||
@ -5202,7 +5202,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3868,7 +3868,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!',
|
||||
'list_of_payments' => 'List of payments',
|
||||
'payment_details' => 'Details of the payment',
|
||||
'list_of_payment_invoices' => 'List of invoices affected by the payment',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'List of payment methods',
|
||||
'payment_method_details' => 'Details of payment method',
|
||||
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
|
||||
@ -4925,7 +4925,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'No hi ha cap tasca cobrable a aquest projecte',
|
||||
'authorization_failure' => 'Permisos insuficients per a realitzar aquesta acció',
|
||||
'authorization_sms_failure' => 'Verifiqueu el vostre compte per a poder enviar missatges de correu.',
|
||||
'white_label_body' => 'Gràcies per comprar una llicència de marca blanca. <br><br>La vostra clau de llicència és: <br><br>:license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Transferència Interac E',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
@ -5120,7 +5120,7 @@ $lang = array(
|
||||
'set_private' => 'Set private',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Business',
|
||||
'partnership' => 'partnership',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charity',
|
||||
'government' => 'Government',
|
||||
@ -5221,7 +5221,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3869,7 +3869,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!',
|
||||
'list_of_payments' => 'Seznam plateb',
|
||||
'payment_details' => 'Detaily platby',
|
||||
'list_of_payment_invoices' => 'List of invoices affected by the payment',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Seznam platebních metod',
|
||||
'payment_method_details' => 'Detail platební metody',
|
||||
'permanently_remove_payment_method' => 'Trvale odstranit tuto platební metodu.',
|
||||
@ -4926,7 +4926,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'No billable tasks for this project',
|
||||
'authorization_failure' => 'Insufficient permissions to perform this action',
|
||||
'authorization_sms_failure' => 'Please verify your account to send emails.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
@ -5121,7 +5121,7 @@ $lang = array(
|
||||
'set_private' => 'Nastavit jako soukromé',
|
||||
'individual' => 'Jednotlivec',
|
||||
'business' => 'Podnik',
|
||||
'partnership' => 'Partnerství',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charita',
|
||||
'government' => 'Vláda',
|
||||
@ -5222,7 +5222,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3867,7 +3867,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Aflysning afventer, vi kontakter dig!',
|
||||
'list_of_payments' => 'Liste over Betalinger',
|
||||
'payment_details' => 'Detaljer om Betaling',
|
||||
'list_of_payment_invoices' => 'Liste over Fakturaer berørt af Betaling',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Liste over Betaling',
|
||||
'payment_method_details' => 'Detaljer om Betaling',
|
||||
'permanently_remove_payment_method' => 'Fjern denne Betaling permanent.',
|
||||
@ -4924,7 +4924,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'Ingen fakturerbare opgaver for dette projekt',
|
||||
'authorization_failure' => 'Utilstrækkelige tilladelser til at udføre denne handling',
|
||||
'authorization_sms_failure' => 'Bekræft venligst din konto for at sende e-mails.',
|
||||
'white_label_body' => 'Tak fordi du har købt en Hvidmærke licens.<br><br> Din licensnøgle er:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Betales inden for :payeddue dage netto indtil :paydate',
|
||||
@ -5119,7 +5119,7 @@ $lang = array(
|
||||
'set_private' => 'Indstil privat',
|
||||
'individual' => 'Individuel',
|
||||
'business' => 'Forretning',
|
||||
'partnership' => 'partnerskab',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Tillid',
|
||||
'charity' => 'Velgørenhed',
|
||||
'government' => 'Regering',
|
||||
@ -5220,7 +5220,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -694,9 +694,9 @@ $lang = array(
|
||||
'disable' => 'Deaktivieren',
|
||||
'invoice_quote_number' => 'Rechnungs- und Angebotsnummern',
|
||||
'invoice_charges' => 'Rechnungsgebühren',
|
||||
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact. <br><br> :error',
|
||||
'notification_invoice_bounced' => 'Wir waren nicht in der Lage, die Rechnung :invoice an :contact zu liefern. \n :error',
|
||||
'notification_invoice_bounced_subject' => 'Rechnung :invoice nicht zugestellt.',
|
||||
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact. <br><br> :error',
|
||||
'notification_quote_bounced' => 'Wir waren nicht in der Lage, das Angebot :invoice an :contact zu liefern. \n :error',
|
||||
'notification_quote_bounced_subject' => 'Angebot :invoice wurde nicht zugestellt.',
|
||||
'custom_invoice_link' => 'Manueller Rechnungs-Link',
|
||||
'total_invoiced' => 'Rechnungs-Betrag',
|
||||
@ -3870,7 +3870,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
|
||||
'cancellation_pending' => 'Kündigung in Bearbeitung! Wir melden uns bei Ihnen...',
|
||||
'list_of_payments' => 'Liste der Zahlungen',
|
||||
'payment_details' => 'Details zu der Zahlung',
|
||||
'list_of_payment_invoices' => 'Liste der Rechnungen die von dieser Zahlung betroffenen sind',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Liste der Zahlungsmethoden',
|
||||
'payment_method_details' => 'Details zu der Zahlungsmethode',
|
||||
'permanently_remove_payment_method' => 'Zahlungsmethode endgültig entfernen.',
|
||||
@ -4927,7 +4927,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
|
||||
'no_assigned_tasks' => 'Keine abzurechenden Aufgaben für diese Rechnung',
|
||||
'authorization_failure' => 'Unzureichende Berechtigungen um diese Aktion auszuführen',
|
||||
'authorization_sms_failure' => 'Bitte bestätigen Sie Ihr Konto um E-Mails zu versenden',
|
||||
'white_label_body' => 'Vielen Dank für den Kauf einer White-Label-Lizenz. <br> <br> Ihr Lizenzschlüssel lautet: <br> <br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E-Übertragung',
|
||||
'xinvoice_payable' => 'Zahlbar innerhalb von :payeddue Tagen netto bis :paydate',
|
||||
@ -5151,14 +5151,14 @@ Leistungsempfängers',
|
||||
'load_template_description' => 'Das Template wird auf Folgendes angewendet:',
|
||||
'run_template' => 'Template anwenden',
|
||||
'statement_design' => 'Statement Design',
|
||||
'delivery_note_design' => 'Delivery Note Design',
|
||||
'payment_receipt_design' => 'Payment Receipt Design',
|
||||
'payment_refund_design' => 'Payment Refund Design',
|
||||
'task_extension_banner' => 'Add the Chrome extension to manage your tasks',
|
||||
'delivery_note_design' => 'Lieferschein Design',
|
||||
'payment_receipt_design' => 'Zahlungsbeleg Design',
|
||||
'payment_refund_design' => 'Gutschrift Design',
|
||||
'task_extension_banner' => 'Die Chrome Erweiterung hinzufügen, um Aufgaben zu bearbeiten',
|
||||
'watch_video' => 'Video ansehen',
|
||||
'view_extension' => 'View Extension',
|
||||
'view_extension' => 'Erweiterung ansehen',
|
||||
'reactivate_email' => 'E-Mail reaktivieren',
|
||||
'email_reactivated' => 'Successfully reactivated email',
|
||||
'email_reactivated' => 'Email erfolgreich reaktiviert',
|
||||
'template_help' => 'Enable using the design as a template',
|
||||
'quarter' => 'Quartal',
|
||||
'item_description' => 'Item Description',
|
||||
@ -5225,7 +5225,22 @@ Leistungsempfängers',
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Später Zahlen',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -5249,6 +5249,11 @@ $lang = array(
|
||||
'add_step' => 'Add step',
|
||||
'steps' => 'Steps',
|
||||
'steps_order_help' => 'The order of the steps is important. The first step should not depend on any other step. The second step should depend on the first step, and so on.',
|
||||
'use_available_payments' => 'Use Available Payments',
|
||||
'test_email_sent' => 'Successfully sent email',
|
||||
'gateway_type' => 'Gateway Type',
|
||||
'save_template_body' => 'Would you like to save this import mapping as a template for future use?',
|
||||
'save_as_template' => 'Save Template Mapping'
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3867,7 +3867,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Cancelación pendiente, ¡nos pondremos en contacto!',
|
||||
'list_of_payments' => 'Lista de pagos',
|
||||
'payment_details' => 'Detalles del pago',
|
||||
'list_of_payment_invoices' => 'Lista de facturas afectadas por el pago',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Lista de métodos de pago',
|
||||
'payment_method_details' => 'Detalles del método de pago',
|
||||
'permanently_remove_payment_method' => 'Eliminar permanentemente este método de pago.',
|
||||
@ -4924,7 +4924,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'No hay tareas facturables para este proyecto',
|
||||
'authorization_failure' => 'Permisos insuficientes para realizar esta acción',
|
||||
'authorization_sms_failure' => 'Por favor verifique su cuenta para enviar correos electrónicos.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Transferencia Interac E',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
@ -5119,7 +5119,7 @@ $lang = array(
|
||||
'set_private' => 'Establecer privado',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Negocio',
|
||||
'partnership' => 'camaradería',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Confianza',
|
||||
'charity' => 'Caridad',
|
||||
'government' => 'Gobierno',
|
||||
@ -5220,7 +5220,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -693,9 +693,9 @@ $lang = array(
|
||||
'disable' => 'Deshabilitado',
|
||||
'invoice_quote_number' => 'Números de Factura y Presupuesto',
|
||||
'invoice_charges' => 'Recargos de Factura',
|
||||
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact. <br><br> :error',
|
||||
'notification_invoice_bounced' => 'No pudimos entregar la factura :invoice a :contact. <br><br> :error',
|
||||
'notification_invoice_bounced_subject' => 'No se puede entregar la factura :invoice',
|
||||
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact. <br><br> :error',
|
||||
'notification_quote_bounced' => 'No pudimos entregar el presupuesto :invoice a :contact. <br><br> :error',
|
||||
'notification_quote_bounced_subject' => 'No se puede entregar el presupuesto :invoice',
|
||||
'custom_invoice_link' => 'Enlace a Factura personalizado',
|
||||
'total_invoiced' => 'Total Facturado',
|
||||
@ -3006,7 +3006,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
|
||||
'hosted_login' => 'Acceso alojado',
|
||||
'selfhost_login' => 'Acceso auto alojado',
|
||||
'google_login' => 'Acceso con Google',
|
||||
'thanks_for_patience' => 'Thank for your patience while we work to implement these features.<br><br>We hope to have them completed in the next few months.<br><br>Until then we\'ll continue to support the',
|
||||
'thanks_for_patience' => 'Gracias por su paciencia mientras trabajamos para implementar estas funciones.<br><br>Esperamos completarlas en los próximos meses.<br><br>Hasta entonces, continuaremos brindando soporte',
|
||||
'legacy_mobile_app' => 'app móvil heredada',
|
||||
'today' => 'Hoy',
|
||||
'current' => 'Actual',
|
||||
@ -3864,7 +3864,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
|
||||
'cancellation_pending' => 'Cancelación pendiente, ¡estaremos en contacto!',
|
||||
'list_of_payments' => 'Listado de pagos',
|
||||
'payment_details' => 'Detalles del pago',
|
||||
'list_of_payment_invoices' => 'Lista de facturas afectadas por el pago',
|
||||
'list_of_payment_invoices' => 'Facturas asociadas',
|
||||
'list_of_payment_methods' => 'Lista de medios de pago',
|
||||
'payment_method_details' => 'Detalles del medio de pago',
|
||||
'permanently_remove_payment_method' => 'Eliminar permanentemente este medio de pago.',
|
||||
@ -4921,7 +4921,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
|
||||
'no_assigned_tasks' => 'No hay tareas facturables para este proyecto',
|
||||
'authorization_failure' => 'Permisos insuficientes para realizar esta acción',
|
||||
'authorization_sms_failure' => 'Por favor verifique su cuenta para enviar correos electrónicos.',
|
||||
'white_label_body' => 'Gracias por comprar una licencia de marca blanca.<br><br> Su clave de licencia es:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Pagadero dentro de :payeddue días de pago vencido neto hasta :paydate',
|
||||
@ -5117,7 +5117,7 @@ De lo contrario, este campo deberá dejarse en blanco.',
|
||||
'set_private' => 'Establecer privado',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Negocio',
|
||||
'partnership' => 'asociación',
|
||||
'partnership' => 'Asociación',
|
||||
'trust' => 'Confianza',
|
||||
'charity' => 'Caridad',
|
||||
'government' => 'Gobierno',
|
||||
@ -5210,15 +5210,30 @@ De lo contrario, este campo deberá dejarse en blanco.',
|
||||
'nordigen_requisition_body' => 'El acceso a los feeds de cuentas bancarias ha caducado según lo establecido en el Acuerdo de usuario final. <br><br>Inicie sesión en Invoice Ninja y vuelva a autenticarse con sus bancos para continuar recibiendo transacciones.',
|
||||
'participant' => 'Participante',
|
||||
'participant_name' => 'Nombre del participante',
|
||||
'client_unsubscribed' => 'Client unsubscribed from emails.',
|
||||
'client_unsubscribed_help' => 'Client :client has unsubscribed from your e-mails. The client needs to consent to receive future emails from you.',
|
||||
'resubscribe' => 'Resubscribe',
|
||||
'subscribe' => 'Subscribe',
|
||||
'subscribe_help' => 'You are currently subscribed and will continue to receive email communications.',
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'client_unsubscribed' => 'El cliente se dio de baja de los correos electrónicos.',
|
||||
'client_unsubscribed_help' => 'El cliente :client se ha dado de baja de sus correos electrónicos. El cliente debe dar su consentimiento para recibir futuros correos electrónicos.',
|
||||
'resubscribe' => 'Volver a suscribirse',
|
||||
'subscribe' => 'Suscribirse',
|
||||
'subscribe_help' => 'Actualmente está suscrito y seguirá recibiendo comunicaciones por correo electrónico.',
|
||||
'unsubscribe_help' => 'Actualmente no estás suscrito y, por lo tanto, no recibirás correos electrónicos en este momento.',
|
||||
'notification_purchase_order_bounced' => 'No pudimos entregar la orden de compra :invoice a :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'No se puede entregar la orden de compra :invoice',
|
||||
'show_pdfhtml_on_mobile' => 'Mostrar la versión HTML de la entidad cuando se visualiza en un dispositivo móvil',
|
||||
'show_pdfhtml_on_mobile_help' => 'Para una visualización mejorada, muestra una versión HTML de la factura/presupuesto cuando se visualiza en el dispositivo móvil.',
|
||||
'please_select_an_invoice_or_credit' => 'Por favor seleccione una factura o crédito',
|
||||
'mobile_version' => 'Version móvil',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Paga después',
|
||||
'local_domain' => 'Dominio local',
|
||||
'verify_peer' => 'Verificar par',
|
||||
'nordigen_help' => 'Nota: conectar una cuenta requiere una clave API de GoCardless/Nordigen',
|
||||
'ar_detailed' => 'Cuentas por cobrar detalladas',
|
||||
'ar_summary' => 'Resumen de cuentas por cobrar',
|
||||
'client_sales' => 'Ventas al cliente',
|
||||
'user_sales' => 'Ventas de usuarios',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'Usuario dado de baja de los correos electrónicos :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3868,7 +3868,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'cancellation_pending' => 'Annulation en cours, nous vous contacterons !',
|
||||
'list_of_payments' => 'Liste des paiements',
|
||||
'payment_details' => 'Détails du paiement',
|
||||
'list_of_payment_invoices' => 'Liste des factures affectées par le paiement',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Liste des moyens de paiement',
|
||||
'payment_method_details' => 'Détails du mode de paiement',
|
||||
'permanently_remove_payment_method' => 'Supprimer définitivement ce mode de paiement.',
|
||||
@ -4925,7 +4925,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'no_assigned_tasks' => 'Aucune tâche facturable pour ce projet',
|
||||
'authorization_failure' => 'Autorisations insuffisantes pour effectuer cette action',
|
||||
'authorization_sms_failure' => 'Veuillez vérifier votre compte pour envoyer des e-mails.',
|
||||
'white_label_body' => 'Merci d\'avoir acheté une licence en marque blanche. <br> <br> Votre clé de licence est : <br> <br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Virement Interac E',
|
||||
'xinvoice_payable' => 'Payable sous :payeddue days net jusqu\'au :paydate',
|
||||
@ -5120,7 +5120,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'set_private' => 'Définir comme privé',
|
||||
'individual' => 'Individuel',
|
||||
'business' => 'Entreprise',
|
||||
'partnership' => 'Partenariat',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Confiance',
|
||||
'charity' => 'Charité',
|
||||
'government' => 'Gouvernement',
|
||||
@ -5221,7 +5221,22 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3865,7 +3865,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'cancellation_pending' => 'Annulation en attente. Nous vous tiendrons au courant.',
|
||||
'list_of_payments' => 'Liste des paiements',
|
||||
'payment_details' => 'Détails du paiement',
|
||||
'list_of_payment_invoices' => 'Liste des factures affectées par le paiement',
|
||||
'list_of_payment_invoices' => 'Associer les factures',
|
||||
'list_of_payment_methods' => 'Liste des modes de paiement',
|
||||
'payment_method_details' => 'Détails du mode de paiement',
|
||||
'permanently_remove_payment_method' => 'Supprimer de façon définitive ce mode de paiement',
|
||||
@ -4295,7 +4295,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'expense_tax_help' => 'Les taxes par article sont désactivées',
|
||||
'enable_markdown' => 'Activer Markdown',
|
||||
'enable_markdown_help' => 'Convertir Markdown en HTML dans le PDF',
|
||||
'add_second_contact' => 'Ajouter un dexième contact',
|
||||
'add_second_contact' => 'Ajouter un deuxième contact',
|
||||
'previous_page' => 'Page précédente',
|
||||
'next_page' => 'Page suivante',
|
||||
'export_colors' => 'Exporter les couleurs',
|
||||
@ -4922,7 +4922,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'no_assigned_tasks' => 'Aucune tâche facturable pour ce projet.',
|
||||
'authorization_failure' => 'Permissions insuffisantes pour accomplir cette action',
|
||||
'authorization_sms_failure' => 'Veuillez vérifier votre compte pour l\'envoi de courriel.',
|
||||
'white_label_body' => 'Merci d\'avoir acheté une licence. <br><br> Votre clé de licence est: <br><br> :license_key',
|
||||
'white_label_body' => 'Merci d\'avoir acheté une licence sans marque. <br><br> Votre clé de licence est : <br><br> :license_key <br><br> Vous pouvez gérer votre licence ici : https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Transfert Interac',
|
||||
'xinvoice_payable' => 'Payable d\'ici :payeddue jours jusqu\'à :paydate',
|
||||
@ -5117,7 +5117,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'set_private' => 'Privé',
|
||||
'individual' => 'Individuel',
|
||||
'business' => 'Entreprise',
|
||||
'partnership' => 'partenaire',
|
||||
'partnership' => 'Partenariat',
|
||||
'trust' => 'Fiducie',
|
||||
'charity' => 'Organisation caritative',
|
||||
'government' => 'Gouvernement',
|
||||
@ -5218,7 +5218,26 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'unsubscribe_help' => 'Vous n\'êtes actuellement pas abonné et vous ne recevrez pas de courriels pour le moment.',
|
||||
'notification_purchase_order_bounced' => 'Nous n\'avons pas pu émettre le bon de commande :invoice à :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Impossible de livrer le bon de commande :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Afficher la version HTML lors de la visualisation sur mobile.',
|
||||
'show_pdfhtml_on_mobile_help' => 'Pour une meilleure visualisation, affiche une version HTML de la facture/soumission lors de la consultation sur mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Veuillez sélectionner une facture ou un crédit.',
|
||||
'mobile_version' => 'Version mobile',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Payer plus tard',
|
||||
'local_domain' => 'Domaine local',
|
||||
'verify_peer' => 'Vérifier le pair',
|
||||
'nordigen_help' => 'Note: la connexion d\'un compte nécessite une clé d\'API GoCardless/Nordigen.',
|
||||
'ar_detailed' => 'Détails des comptes clients',
|
||||
'ar_summary' => 'Résumé des comptes clients',
|
||||
'client_sales' => 'Ventes du client',
|
||||
'user_sales' => 'Ventes de l\'utilisateur',
|
||||
'iframe_url' => 'URL de l\'iFrame',
|
||||
'user_unsubscribed' => 'Utilisateur désabonné des courriels :link',
|
||||
'use_available_payments' => 'Utilisez les paiements disponibles',
|
||||
'test_email_sent' => 'Le courriel a été envoyé',
|
||||
'gateway_type' => 'Type de passerelle',
|
||||
'save_template_body' => 'Souhaitez-vous enregistrer cette correspondance d\'importation en tant que modèle pour une utilisation future ?',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3865,7 +3865,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'cancellation_pending' => 'Annulation en attente. Nous vous tiendrons au courant.',
|
||||
'list_of_payments' => 'Liste des paiements',
|
||||
'payment_details' => 'Détails du paiement',
|
||||
'list_of_payment_invoices' => 'Liste des factures affectées par le paiement',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Liste des modes de paiement',
|
||||
'payment_method_details' => 'Détails du mode de paiement',
|
||||
'permanently_remove_payment_method' => 'Supprimer de façon définitive ce mode de paiement',
|
||||
@ -4922,7 +4922,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'no_assigned_tasks' => 'Aucune intervetion facturable pour ce projet',
|
||||
'authorization_failure' => 'Insufficient permissions to perform this action',
|
||||
'authorization_sms_failure' => 'Please verify your account to send emails.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Payable sous :payeddue jours net jusqu'à :paydate',
|
||||
@ -5117,7 +5117,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'set_private' => 'Définir comme privé',
|
||||
'individual' => 'Individuel',
|
||||
'business' => 'Entreprise',
|
||||
'partnership' => 'partenaire',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Confiance',
|
||||
'charity' => 'Charité',
|
||||
'government' => 'Gouvernement',
|
||||
@ -5218,7 +5218,22 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3866,7 +3866,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'הביטול בהמתנה, ניצור איתך קשר!',
|
||||
'list_of_payments' => 'רשימת תשלומים',
|
||||
'payment_details' => 'פרטי התשלום',
|
||||
'list_of_payment_invoices' => 'רשימת חשבוניות שיושפעו מהתשלום',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'רשימת אמצעי תשלום',
|
||||
'payment_method_details' => 'פרטים על אמצעי תשלום',
|
||||
'permanently_remove_payment_method' => 'הסר לצמיתות את אמצעי התשלום הזה.',
|
||||
@ -4923,7 +4923,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'אין משימות שניתנות לחיוב עבור הפרויקט הזה',
|
||||
'authorization_failure' => 'אין מספיק הרשאות לביצוע פעולה זו',
|
||||
'authorization_sms_failure' => 'אנא אמת את חשבונך כדי לשלוח אימיילים.',
|
||||
'white_label_body' => 'תודה שרכשת רישיון לבן תווית.<br><br> מפתח הרישיון שלך הוא:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'קלרנה',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'ניתן לשלם תוך :payeddue ימים נטו עד :paydate',
|
||||
@ -5118,7 +5118,7 @@ $lang = array(
|
||||
'set_private' => 'הגדר פרטי',
|
||||
'individual' => 'אִישִׁי',
|
||||
'business' => 'עֵסֶק',
|
||||
'partnership' => 'שׁוּתָפוּת',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'אמון',
|
||||
'charity' => 'צדקה',
|
||||
'government' => 'מֶמְשָׁלָה',
|
||||
@ -5219,7 +5219,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3852,7 +3852,7 @@ adva :date',
|
||||
'cancellation_pending' => 'Lemondás folyamatban',
|
||||
'list_of_payments' => 'Fizetések listája',
|
||||
'payment_details' => 'Fizetési részletek',
|
||||
'list_of_payment_invoices' => 'Fizetési számlák listája',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Fizetési módok listája',
|
||||
'payment_method_details' => 'Fizetési mód részletei',
|
||||
'permanently_remove_payment_method' => 'Fizetési mód végleges eltávolítása',
|
||||
@ -4909,7 +4909,7 @@ adva :date',
|
||||
'no_assigned_tasks' => 'nincsenek hozzárendelt feladatok',
|
||||
'authorization_failure' => 'engedélyezési hiba',
|
||||
'authorization_sms_failure' => 'engedélyezési SMS-hiba',
|
||||
'white_label_body' => 'fehér címke szövege',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'fizetési típus: Klarna',
|
||||
'payment_type_Interac E Transfer' => 'fizetési típus: Interac E átutalás',
|
||||
'xinvoice_payable' => 'XInvoice fizetendő',
|
||||
@ -5104,7 +5104,7 @@ adva :date',
|
||||
'set_private' => 'Privát beállítás',
|
||||
'individual' => 'Egyedi',
|
||||
'business' => 'Üzleti',
|
||||
'partnership' => 'partnerség',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Bizalom',
|
||||
'charity' => 'Adomány',
|
||||
'government' => 'Kormány',
|
||||
@ -5205,7 +5205,22 @@ adva :date',
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3859,7 +3859,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Cancellazione in corso, ci metteremo in contatto!',
|
||||
'list_of_payments' => 'Elenco dei pagamenti',
|
||||
'payment_details' => 'Dettagli del pagamento',
|
||||
'list_of_payment_invoices' => 'Elenco delle fatture interessate dal pagamento',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Elenco dei metodi di pagamento',
|
||||
'payment_method_details' => 'Dettagli del metodo di pagamento',
|
||||
'permanently_remove_payment_method' => 'Rimuovi definitivamente questo metodo di pagamento.',
|
||||
@ -4916,7 +4916,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'Nessuna attività fatturabile per questo progetto',
|
||||
'authorization_failure' => 'Autorizzazioni insufficienti per eseguire questa azione',
|
||||
'authorization_sms_failure' => 'Verifica il tuo account per inviare e-mail.',
|
||||
'white_label_body' => 'Grazie per aver acquistato una licenza white label.<br><br> La tua chiave di licenza è:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Clarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Trasferimento',
|
||||
'xinvoice_payable' => 'Pagabile entro :payeddue giorni netti fino :paydate',
|
||||
@ -5111,7 +5111,7 @@ $lang = array(
|
||||
'set_private' => 'Imposta privato',
|
||||
'individual' => 'Individuale',
|
||||
'business' => 'Attività commerciale',
|
||||
'partnership' => 'associazione',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Fiducia',
|
||||
'charity' => 'Beneficenza',
|
||||
'government' => 'Governo',
|
||||
@ -5212,7 +5212,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3868,7 +3868,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!',
|
||||
'list_of_payments' => 'List of payments',
|
||||
'payment_details' => 'Details of the payment',
|
||||
'list_of_payment_invoices' => 'List of invoices affected by the payment',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'List of payment methods',
|
||||
'payment_method_details' => 'Details of payment method',
|
||||
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
|
||||
@ -4925,7 +4925,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'No billable tasks for this project',
|
||||
'authorization_failure' => 'Insufficient permissions to perform this action',
|
||||
'authorization_sms_failure' => 'Please verify your account to send emails.',
|
||||
'white_label_body' => 'ホワイトレーベルライセンスをお買い上げいただき、誠にありがとうございます。<br><br>ライセンス キーは次のとおりです。<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => ':paydate まで正味 :payeddue 日以内に支払い可能',
|
||||
@ -5120,7 +5120,7 @@ $lang = array(
|
||||
'set_private' => 'Set private',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Business',
|
||||
'partnership' => 'partnership',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charity',
|
||||
'government' => 'Government',
|
||||
@ -5221,7 +5221,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3848,7 +3848,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'រង់ចាំការលុបចោល យើងនឹងទាក់ទងទៅ!',
|
||||
'list_of_payments' => 'បញ្ជីនៃការទូទាត់',
|
||||
'payment_details' => 'ព័ត៌មានលម្អិតនៃការទូទាត់',
|
||||
'list_of_payment_invoices' => 'បញ្ជីវិក្កយបត្រដែលរងផលប៉ះពាល់ដោយការទូទាត់',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'បញ្ជីវិធីបង់ប្រាក់',
|
||||
'payment_method_details' => 'ព័ត៌មានលម្អិតអំពីវិធីបង់ប្រាក់',
|
||||
'permanently_remove_payment_method' => 'លុបវិធីបង់ប្រាក់នេះចេញជាអចិន្ត្រៃយ៍។',
|
||||
@ -4905,7 +4905,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'មិនមានកិច្ចការដែលអាចទូទាត់បានសម្រាប់គម្រោងនេះទេ។',
|
||||
'authorization_failure' => 'ការអនុញ្ញាតមិនគ្រប់គ្រាន់ដើម្បីអនុវត្តសកម្មភាពនេះ។',
|
||||
'authorization_sms_failure' => 'សូមផ្ទៀងផ្ទាត់គណនីរបស់អ្នក ដើម្បីផ្ញើអ៊ីមែល។',
|
||||
'white_label_body' => 'សូមអរគុណសម្រាប់ការទិញអាជ្ញាប័ណ្ណស្លាកពណ៌ស។<br><br> លេខកូដអាជ្ញាប័ណ្ណរបស់អ្នកគឺ៖<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'ក្លាណា',
|
||||
'payment_type_Interac E Transfer' => 'ការផ្ទេរ Interac E',
|
||||
'xinvoice_payable' => 'អាចបង់បានក្នុងរយៈពេល :payeddue ថ្ងៃសុទ្ធរហូតដល់ :paydate',
|
||||
@ -5100,7 +5100,7 @@ $lang = array(
|
||||
'set_private' => 'កំណត់ឯកជន',
|
||||
'individual' => 'បុគ្គល',
|
||||
'business' => 'អាជីវកម្ម',
|
||||
'partnership' => 'ភាពជាដៃគូ',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'ទុកចិត្ត',
|
||||
'charity' => 'សប្បុរសធម៌',
|
||||
'government' => 'រដ្ឋាភិបាល',
|
||||
@ -5201,7 +5201,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3868,7 +3868,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'ລໍຖ້າການຍົກເລີກ, ພວກເຮົາຈະຕິດຕໍ່ຫາ!',
|
||||
'list_of_payments' => 'ລາຍຊື່ການຈ່າຍເງິນ',
|
||||
'payment_details' => 'ລາຍລະອຽດຂອງການຈ່າຍເງິນ',
|
||||
'list_of_payment_invoices' => 'ລາຍຊື່ໃບແຈ້ງໜີ້ທີ່ໄດ້ຮັບຜົນກະທົບຈາກການຈ່າຍເງິນ',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'ລາຍຊື່ວິທີຈ່າຍເງິນ',
|
||||
'payment_method_details' => 'ລາຍລະອຽດຂອງວິທີການຊໍາລະ',
|
||||
'permanently_remove_payment_method' => 'ລຶບວິທີການຈ່າຍເງິນນີ້ອອກຖາວອນ.',
|
||||
@ -4925,7 +4925,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'ບໍ່ມີໜ້າວຽກທີ່ສາມາດເກັບເງິນໄດ້ສຳລັບໂຄງການນີ້',
|
||||
'authorization_failure' => 'ການອະນຸຍາດບໍ່ພຽງພໍເພື່ອປະຕິບັດການນີ້',
|
||||
'authorization_sms_failure' => 'ກະລຸນາກວດສອບບັນຊີຂອງທ່ານເພື່ອສົ່ງອີເມວ.',
|
||||
'white_label_body' => 'ຂອບໃຈທີ່ຊື້ໃບຂັບຂີ່ປ້າຍຂາວ. <br><br> ກະແຈໃບອະນຸຍາດຂອງທ່ານແມ່ນ: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'ຄລານາ',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'ຊໍາລະພາຍໃນ: payeddue ວັນສຸດທິຈົນກ່ວາ: paydate',
|
||||
@ -5120,7 +5120,7 @@ $lang = array(
|
||||
'set_private' => 'ຕັ້ງເປັນສ່ວນຕົວ',
|
||||
'individual' => 'ບຸກຄົນ',
|
||||
'business' => 'ທຸລະກິດ',
|
||||
'partnership' => 'ຫຸ້ນສ່ວນ',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'ຄວາມໄວ້ວາງໃຈ',
|
||||
'charity' => 'ການກຸສົນ',
|
||||
'government' => 'ລັດຖະບານ',
|
||||
@ -5221,7 +5221,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3865,7 +3865,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
|
||||
'cancellation_pending' => 'Annulatie in aanvraag, we nemen contact met u op!',
|
||||
'list_of_payments' => 'Lijst met betalingen',
|
||||
'payment_details' => 'Details van de betaling',
|
||||
'list_of_payment_invoices' => 'Lijst met facturen waarop de betaling betrekking heeft',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Lijst met betalingsmethodes',
|
||||
'payment_method_details' => 'Details van betalingsmethodes',
|
||||
'permanently_remove_payment_method' => 'Verwijder deze betalingsmethode definitief',
|
||||
@ -4925,7 +4925,7 @@ Email: :email<b><br><b>',
|
||||
'no_assigned_tasks' => 'Geen factureerbare taken voor dit project',
|
||||
'authorization_failure' => 'Onvoldoende machtigingen om deze actie uit te voeren',
|
||||
'authorization_sms_failure' => 'Verifieer uw account om e-mails te verzenden.',
|
||||
'white_label_body' => 'Bedankt voor het aanschaffen van een white label licentie. <br> <br> Uw licentiesleutel is: <br> <br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E-overdracht',
|
||||
'xinvoice_payable' => 'Te betalen binnen :payeddue vervaldagen netto tot :paydate',
|
||||
@ -5120,7 +5120,7 @@ Email: :email<b><br><b>',
|
||||
'set_private' => 'Privé instellen',
|
||||
'individual' => 'Individueel',
|
||||
'business' => 'Bedrijf',
|
||||
'partnership' => 'vennootschap',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Vertrouwen',
|
||||
'charity' => 'Goed doel',
|
||||
'government' => 'Regering',
|
||||
@ -5221,7 +5221,22 @@ Email: :email<b><br><b>',
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3866,7 +3866,7 @@ Gdy przelewy zostaną zaksięgowane na Twoim koncie, wróć do tej strony i klik
|
||||
'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!',
|
||||
'list_of_payments' => 'Lista płatności',
|
||||
'payment_details' => 'Szczegóły płatności',
|
||||
'list_of_payment_invoices' => 'Lista faktur, których dotyczy płatność',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Lista metod płatności',
|
||||
'payment_method_details' => 'Szczegóły metody płatności',
|
||||
'permanently_remove_payment_method' => 'Trwale usuń tę metodę płatności.',
|
||||
@ -4923,7 +4923,7 @@ Gdy przelewy zostaną zaksięgowane na Twoim koncie, wróć do tej strony i klik
|
||||
'no_assigned_tasks' => 'No billable tasks for this project',
|
||||
'authorization_failure' => 'Niewystarczające uprawnienia do wykonania tej czynności',
|
||||
'authorization_sms_failure' => 'Zweryfikuj swoje konto, aby wysyłać e-maile.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
@ -5118,7 +5118,7 @@ Gdy przelewy zostaną zaksięgowane na Twoim koncie, wróć do tej strony i klik
|
||||
'set_private' => 'Set private',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Business',
|
||||
'partnership' => 'partnership',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charity',
|
||||
'government' => 'Government',
|
||||
@ -5219,7 +5219,22 @@ Gdy przelewy zostaną zaksięgowane na Twoim koncie, wróć do tej strony i klik
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3865,7 +3865,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
|
||||
'cancellation_pending' => 'Cancelamento pendente, entraremos em contato!',
|
||||
'list_of_payments' => 'Lista de pagamentos',
|
||||
'payment_details' => 'Detalhes do pagamento',
|
||||
'list_of_payment_invoices' => 'Lista de faturas afetadas pelo pagamento',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Lista de métodos de pagamento',
|
||||
'payment_method_details' => 'Detalhes da forma de pagamento',
|
||||
'permanently_remove_payment_method' => 'Remova permanentemente esta forma de pagamento.',
|
||||
@ -4922,7 +4922,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
|
||||
'no_assigned_tasks' => 'Nenhuma tarefa faturável para este projeto',
|
||||
'authorization_failure' => 'Permissões insuficientes para executar esta ação',
|
||||
'authorization_sms_failure' => 'Verifique sua conta para enviar e-mails.',
|
||||
'white_label_body' => 'Obrigado por adquirir uma licença de marca branca.<br><br> Sua chave de licença é:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Transferência Interac E',
|
||||
'xinvoice_payable' => 'A pagar dentro de :payeddue dias líquidos até :paydate',
|
||||
@ -5117,7 +5117,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
|
||||
'set_private' => 'Definir como privado',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Negócios',
|
||||
'partnership' => 'parceria',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Confiar',
|
||||
'charity' => 'Caridade',
|
||||
'government' => 'Governo',
|
||||
@ -5218,7 +5218,22 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3867,7 +3867,7 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
|
||||
'cancellation_pending' => 'Cancelamento pendente, entraremos em contacto muito brevemente!',
|
||||
'list_of_payments' => 'Lista de pagamentos',
|
||||
'payment_details' => 'Detalhes do pagamento',
|
||||
'list_of_payment_invoices' => 'Lista de notas de pagamento afetadas pelo pagamento',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Lista de métodos de pagamento',
|
||||
'payment_method_details' => 'Detalhes do método de pagamento',
|
||||
'permanently_remove_payment_method' => 'Eliminar permanentemente este método de pagamento.',
|
||||
@ -4925,7 +4925,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
|
||||
'no_assigned_tasks' => 'Nenhuma tarefa faturável para este projeto',
|
||||
'authorization_failure' => 'Permissões insuficientes para executar esta ação',
|
||||
'authorization_sms_failure' => 'Verifique sua conta para enviar e-mails.',
|
||||
'white_label_body' => 'Obrigado por adquirir uma licença de marca branca.<br><br> Sua chave de licença é:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Pagável dentro de :payeddue dias líquidos até :paydate',
|
||||
@ -5120,7 +5120,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
|
||||
'set_private' => 'Definir como privado',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Negócios',
|
||||
'partnership' => 'parceria',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Confiar',
|
||||
'charity' => 'Caridade',
|
||||
'government' => 'Governo',
|
||||
@ -5221,7 +5221,22 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3869,7 +3869,7 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
|
||||
'cancellation_pending' => 'Anulare în așteptare. Vă vom contacta.',
|
||||
'list_of_payments' => 'Listă plăți',
|
||||
'payment_details' => 'Detalii plată',
|
||||
'list_of_payment_invoices' => 'Listă facturi afectate de plată',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Listă metode de plată',
|
||||
'payment_method_details' => 'Detalii metodă de plată',
|
||||
'permanently_remove_payment_method' => 'Îndepărtați permanent această metodă de plată.',
|
||||
@ -4926,7 +4926,7 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
|
||||
'no_assigned_tasks' => 'No billable tasks for this project',
|
||||
'authorization_failure' => 'Insufficient permissions to perform this action',
|
||||
'authorization_sms_failure' => 'Please verify your account to send emails.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
@ -5121,7 +5121,7 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
|
||||
'set_private' => 'Set private',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Business',
|
||||
'partnership' => 'partnership',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charity',
|
||||
'government' => 'Government',
|
||||
@ -5222,7 +5222,22 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3855,7 +3855,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Čaká sa na zrušenie, budeme vás kontaktovať!',
|
||||
'list_of_payments' => 'Zoznam platieb',
|
||||
'payment_details' => 'Podrobnosti o platbe',
|
||||
'list_of_payment_invoices' => 'Zoznam faktúr ovplyvnených platbou',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Zoznam spôsobov platby',
|
||||
'payment_method_details' => 'Podrobnosti o spôsobe platby',
|
||||
'permanently_remove_payment_method' => 'Natrvalo odstrániť tento spôsob platby.',
|
||||
@ -4912,7 +4912,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'Žiadne fakturovateľné úlohy pre tento projekt',
|
||||
'authorization_failure' => 'Nedostatočné povolenia na vykonanie tejto akcie',
|
||||
'authorization_sms_failure' => 'Ak chcete odosielať e-maily, overte svoj účet.',
|
||||
'white_label_body' => 'Ďakujeme, že ste si zakúpili licenciu s bielym štítkom.<br><br> Váš licenčný kľúč je:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Splatné do :payeddue dní netto do :paydate',
|
||||
@ -5107,7 +5107,7 @@ $lang = array(
|
||||
'set_private' => 'Nastaviť ako súkromné',
|
||||
'individual' => 'Individuálne',
|
||||
'business' => 'Podnikanie',
|
||||
'partnership' => 'partnerstvo',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Dôvera',
|
||||
'charity' => 'Dobročinnosť',
|
||||
'government' => 'vláda',
|
||||
@ -5208,7 +5208,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3868,7 +3868,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
|
||||
'cancellation_pending' => 'Otkazivanje je na čekanju, u kontaktu smo!',
|
||||
'list_of_payments' => 'Spisak uplata',
|
||||
'payment_details' => 'Detalji o uplati',
|
||||
'list_of_payment_invoices' => 'Spisak računa na koje utiče plaćanje',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Spisak metoda plaćanja',
|
||||
'payment_method_details' => 'Detalji o metodu plaćanja',
|
||||
'permanently_remove_payment_method' => 'Trajno uklonite ovaj način plaćanja.',
|
||||
@ -4925,7 +4925,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
|
||||
'no_assigned_tasks' => 'No billable tasks for this project',
|
||||
'authorization_failure' => 'Insufficient permissions to perform this action',
|
||||
'authorization_sms_failure' => 'Please verify your account to send emails.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
@ -5120,7 +5120,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
|
||||
'set_private' => 'Set private',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Business',
|
||||
'partnership' => 'partnership',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charity',
|
||||
'government' => 'Government',
|
||||
@ -5221,7 +5221,22 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3876,7 +3876,7 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
|
||||
'cancellation_pending' => 'Väntande avslut, vi hör av oss!',
|
||||
'list_of_payments' => 'Lista över betalningar',
|
||||
'payment_details' => 'Detaljer om betalningen',
|
||||
'list_of_payment_invoices' => 'Lista över fakturor som påverkas av betalningen',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => 'Lista över betalningsmetoder',
|
||||
'payment_method_details' => 'Information om betalningsmetod',
|
||||
'permanently_remove_payment_method' => 'Ta bort denna betalningsmetod permanent.',
|
||||
@ -4933,7 +4933,7 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
|
||||
'no_assigned_tasks' => 'No billable tasks for this project',
|
||||
'authorization_failure' => 'Insufficient permissions to perform this action',
|
||||
'authorization_sms_failure' => 'Please verify your account to send emails.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
@ -5128,7 +5128,7 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
|
||||
'set_private' => 'Set private',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Business',
|
||||
'partnership' => 'partnership',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charity',
|
||||
'government' => 'Government',
|
||||
@ -5229,7 +5229,22 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -3868,7 +3868,7 @@ $lang = array(
|
||||
'cancellation_pending' => '取消待定,我們會聯絡您!',
|
||||
'list_of_payments' => '付款清單',
|
||||
'payment_details' => '付款詳情',
|
||||
'list_of_payment_invoices' => '受付款影響的發票列表',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_methods' => '付款方式一覽',
|
||||
'payment_method_details' => '付款方式詳情',
|
||||
'permanently_remove_payment_method' => '永久刪除此付款方式。',
|
||||
@ -4925,7 +4925,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => '該項目沒有計費任務',
|
||||
'authorization_failure' => '權限不足,無法執行此操作',
|
||||
'authorization_sms_failure' => '請驗證您的帳戶以發送電子郵件。',
|
||||
'white_label_body' => '感謝您購買白標許可證。<br><br>您的許可證密鑰是:<br><br> :license_key',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => '克拉納',
|
||||
'payment_type_Interac E Transfer' => 'Interac E 傳輸',
|
||||
'xinvoice_payable' => '在:payeddue天內支付,直至:paydate',
|
||||
@ -5120,7 +5120,7 @@ $lang = array(
|
||||
'set_private' => '設定私人',
|
||||
'individual' => '個人',
|
||||
'business' => '商業',
|
||||
'partnership' => '合夥',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => '相信',
|
||||
'charity' => '慈善機構',
|
||||
'government' => '政府',
|
||||
@ -5221,7 +5221,22 @@ $lang = array(
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -11,13 +11,14 @@
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use Tests\TestCase;
|
||||
use App\Models\Task;
|
||||
use App\Models\Document;
|
||||
use Tests\MockAccountData;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Tests\MockAccountData;
|
||||
use Tests\TestCase;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
|
||||
/**
|
||||
* @test
|
||||
@ -44,6 +45,135 @@ class DocumentsApiTest extends TestCase
|
||||
Model::reguard();
|
||||
}
|
||||
|
||||
public function testDocumentFilters()
|
||||
{
|
||||
Document::query()->withTrashed()->cursor()->each(function ($d){
|
||||
$d->forceDelete();
|
||||
});
|
||||
|
||||
$d = Document::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'name' => 'searchable.jpg',
|
||||
'type' => 'jpg',
|
||||
]);
|
||||
|
||||
$this->client->documents()->save($d);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get("/api/v1/documents/{$d->hashed_id}?client_id={$this->client->hashed_id}");
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$this->assertCount(1, $response->json());
|
||||
}
|
||||
|
||||
|
||||
public function testDocumentFilters2()
|
||||
{
|
||||
Document::query()->withTrashed()->cursor()->each(function ($d){
|
||||
$d->forceDelete();
|
||||
});
|
||||
|
||||
$d = Document::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'name' => 'searchable.jpg',
|
||||
'type' => 'jpg',
|
||||
]);
|
||||
|
||||
$this->task->documents()->save($d);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get("/api/v1/documents/{$d->hashed_id}?client_id={$this->client->hashed_id}");
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$this->assertCount(1, $response->json());
|
||||
}
|
||||
|
||||
public function testDocumentFilters3()
|
||||
{
|
||||
Document::query()->withTrashed()->cursor()->each(function ($d){
|
||||
$d->forceDelete();
|
||||
});
|
||||
|
||||
$d = Document::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'name' => 'searchable.jpg',
|
||||
'type' => 'jpg',
|
||||
]);
|
||||
|
||||
$t = Task::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'client_id' => $this->client->id,
|
||||
]);
|
||||
|
||||
$t->documents()->save($d);
|
||||
|
||||
$dd = Document::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'name' => 'searchable2.jpg',
|
||||
'type' => 'jpg',
|
||||
]);
|
||||
|
||||
$this->client->documents()->save($dd);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get("/api/v1/documents?client_id={$this->client->hashed_id}");
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$this->assertCount(2, $response->json()['data']);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get("/api/v1/documents?client_id={$this->client->hashed_id}&filter=craycray");
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$this->assertCount(0, $response->json()['data']);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get("/api/v1/documents?client_id={$this->client->hashed_id}&filter=s");
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$this->assertCount(2, $response->json()['data']);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get("/api/v1/documents?client_id={$this->client->hashed_id}&filter=searchable");
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$this->assertCount(2, $response->json()['data']);
|
||||
|
||||
$response = $this->withHeaders([
|
||||
'X-API-SECRET' => config('ninja.api_secret'),
|
||||
'X-API-TOKEN' => $this->token,
|
||||
])->get("/api/v1/documents?client_id={$this->client->hashed_id}&filter=searchable2");
|
||||
|
||||
$response->assertStatus(200);
|
||||
|
||||
$this->assertCount(1, $response->json()['data']);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testIsPublicTypesForDocumentRequest()
|
||||
{
|
||||
$d = Document::factory()->create([
|
||||
|
241
tests/Unit/InvoiceBalanceTest.php
Normal file
241
tests/Unit/InvoiceBalanceTest.php
Normal file
@ -0,0 +1,241 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\DataMapper\InvoiceItem;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\PurchaseOrder;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Tests\MockAccountData;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers App\Helpers\Invoice\InvoiceSum
|
||||
*/
|
||||
class InvoiceBalanceTest extends TestCase
|
||||
{
|
||||
use MockAccountData;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->makeTestData();
|
||||
}
|
||||
|
||||
public function testInvoiceBalances()
|
||||
{
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost = 100;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i = Invoice::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'client_id' => $this->client->id,
|
||||
'line_items' => [$item],
|
||||
'status_id' => 1,
|
||||
'tax_rate1' => 0,
|
||||
'tax_rate2' => 0,
|
||||
'tax_rate3' => 0,
|
||||
'tax_name1' => '',
|
||||
'tax_name2' => '',
|
||||
'tax_name3' => '',
|
||||
'discount' => 0,
|
||||
'paid_to_date' => 0,
|
||||
]);
|
||||
|
||||
|
||||
$this->assertEquals(1, $i->status_id);
|
||||
|
||||
$i = $i->calc()->getInvoice()->service()->markSent()->save();
|
||||
|
||||
$this->assertEquals(100, $i->amount);
|
||||
$this->assertEquals(100, $i->balance);
|
||||
$this->assertEquals(2, $i->status_id);
|
||||
$this->assertEquals(0, $i->paid_to_date);
|
||||
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost = 30.37;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i->line_items = [$item];
|
||||
|
||||
$i = $i->calc()->getInvoice();
|
||||
|
||||
// nlog($i->withoutRelations()->toArray());
|
||||
|
||||
$this->assertEquals(30.37, $i->amount);
|
||||
$this->assertEquals(30.37, $i->balance);
|
||||
$this->assertEquals(2, $i->status_id);
|
||||
$this->assertEquals(0, $i->paid_to_date);
|
||||
|
||||
$i = $i->service()->applyPaymentAmount(10.37, 'paid')->save();
|
||||
|
||||
// nlog($i->withoutRelations()->toArray());
|
||||
|
||||
$this->assertEquals(30.37, $i->amount);
|
||||
$this->assertEquals(20.00, $i->balance);
|
||||
$this->assertEquals(3, $i->status_id);
|
||||
$this->assertEquals(10.37, $i->paid_to_date);
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost = 15;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i->line_items = [$item];
|
||||
|
||||
$i = $i->calc()->getInvoice();
|
||||
|
||||
$this->assertEquals(15, $i->amount);
|
||||
$this->assertEquals(15-10.37, $i->balance);
|
||||
$this->assertEquals(3, $i->status_id);
|
||||
$this->assertEquals(10.37, $i->paid_to_date);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function testInvoiceBalancesWithNegatives()
|
||||
{
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost = -100;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i = Invoice::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'client_id' => $this->client->id,
|
||||
'line_items' => [$item],
|
||||
'status_id' => 1,
|
||||
'tax_rate1' => 0,
|
||||
'tax_rate2' => 0,
|
||||
'tax_rate3' => 0,
|
||||
'tax_name1' => '',
|
||||
'tax_name2' => '',
|
||||
'tax_name3' => '',
|
||||
'discount' => 0,
|
||||
'paid_to_date' => 0,
|
||||
]);
|
||||
|
||||
|
||||
$this->assertEquals(1, $i->status_id);
|
||||
|
||||
$i = $i->calc()->getInvoice()->service()->markSent()->save();
|
||||
|
||||
$this->assertEquals(-100, $i->amount);
|
||||
$this->assertEquals(-100, $i->balance);
|
||||
$this->assertEquals(2, $i->status_id);
|
||||
$this->assertEquals(0, $i->paid_to_date);
|
||||
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost = -30.37;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i->line_items = [$item];
|
||||
|
||||
$i = $i->calc()->getInvoice();
|
||||
|
||||
$this->assertEquals(-30.37, $i->amount);
|
||||
$this->assertEquals(-30.37, $i->balance);
|
||||
$this->assertEquals(2, $i->status_id);
|
||||
$this->assertEquals(0, $i->paid_to_date);
|
||||
|
||||
$i = $i->service()->markPaid()->save();
|
||||
|
||||
$this->assertEquals(0, $i->balance);
|
||||
$this->assertEquals(-30.37, $i->paid_to_date);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function testPurchaseOrderBalances()
|
||||
{
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost = 100;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i = PurchaseOrder::factory()->create([
|
||||
'company_id' => $this->company->id,
|
||||
'user_id' => $this->user->id,
|
||||
'vendor_id' => $this->vendor->id,
|
||||
'line_items' => [$item],
|
||||
'status_id' => 1,
|
||||
'tax_rate1' => 0,
|
||||
'tax_rate2' => 0,
|
||||
'tax_rate3' => 0,
|
||||
'tax_name1' => '',
|
||||
'tax_name2' => '',
|
||||
'tax_name3' => '',
|
||||
'discount' => 0,
|
||||
'paid_to_date' => 0,
|
||||
]);
|
||||
|
||||
$this->assertEquals(1, $i->status_id);
|
||||
|
||||
$i = $i->calc()->getPurchaseOrder();
|
||||
$i = $i->service()->markSent()->save();
|
||||
|
||||
$this->assertEquals(100, $i->amount);
|
||||
$this->assertEquals(100, $i->balance);
|
||||
$this->assertEquals(2, $i->status_id);
|
||||
$this->assertEquals(0, $i->paid_to_date);
|
||||
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost = 30.37;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i->line_items = [$item];
|
||||
|
||||
$i = $i->calc()->getPurchaseOrder();
|
||||
$i = $i->service()->markSent()->save();
|
||||
|
||||
$this->assertEquals(30.37, $i->amount);
|
||||
$this->assertEquals(30.37, $i->balance);
|
||||
$this->assertEquals(2, $i->status_id);
|
||||
$this->assertEquals(0, $i->paid_to_date);
|
||||
|
||||
$item = new InvoiceItem();
|
||||
$item->quantity = 1;
|
||||
$item->cost =10.37;
|
||||
$item->type_id = '1';
|
||||
|
||||
$i->line_items = [$item];
|
||||
|
||||
$i = $i->calc()->getPurchaseOrder();
|
||||
$i = $i->service()->markSent()->save();
|
||||
|
||||
$this->assertEquals(10.37, $i->amount);
|
||||
$this->assertEquals(10.37, $i->balance);
|
||||
$this->assertEquals(2, $i->status_id);
|
||||
$this->assertEquals(0, $i->paid_to_date);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -66,6 +66,8 @@ class InvoiceInclusiveTest extends TestCase
|
||||
|
||||
public function testInvoiceTotals()
|
||||
{
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
@ -76,6 +78,8 @@ class InvoiceInclusiveTest extends TestCase
|
||||
{
|
||||
$this->invoice->discount = 5;
|
||||
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
@ -88,6 +92,8 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->discount = 5;
|
||||
$this->invoice->custom_surcharge1 = 5;
|
||||
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
@ -103,6 +109,8 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->tax_rate1 = 10;
|
||||
$this->invoice->is_amount_discount = true;
|
||||
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
@ -119,6 +127,7 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->tax_rate1 = 10;
|
||||
$this->invoice->is_amount_discount = false;
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
@ -135,6 +144,7 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->uses_inclusive_taxes = true;
|
||||
$this->invoice->is_amount_discount = true;
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
@ -154,6 +164,8 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->uses_inclusive_taxes = true;
|
||||
$this->invoice->is_amount_discount = true;
|
||||
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
@ -170,7 +182,10 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$item->cost = 10;
|
||||
$item->tax_rate1 = 10;
|
||||
$item->tax_name1 = 10;
|
||||
|
||||
$item->tax_rate2 = 0;
|
||||
$item->tax_name2 = '';
|
||||
$item->tax_rate3 = 0;
|
||||
$item->tax_name3 = '';
|
||||
$line_items[] = $item;
|
||||
|
||||
$item = InvoiceItemFactory::create();
|
||||
@ -178,6 +193,10 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$item->cost = 10;
|
||||
$item->tax_rate1 = 10;
|
||||
$item->tax_name1 = 10;
|
||||
$item->tax_rate2 = 0;
|
||||
$item->tax_name2 = '';
|
||||
$item->tax_rate3 = 0;
|
||||
$item->tax_name3 = '';
|
||||
|
||||
$line_items[] = $item;
|
||||
|
||||
@ -223,14 +242,17 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->discount = 0;
|
||||
$this->invoice->custom_surcharge1 = 0;
|
||||
|
||||
$this->invoice->tax_name1 = 'dog';
|
||||
$this->invoice->tax_name2 = 'cat';
|
||||
$this->invoice->tax_rate1 = 10;
|
||||
$this->invoice->tax_rate2 = 10;
|
||||
|
||||
$this->invoice_calc = null;
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice, $this->settings);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 20);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 5.46);
|
||||
$this->assertEquals(20, $this->invoice_calc->getSubTotal());
|
||||
$this->assertEquals(5.46, $this->invoice_calc->getTotalTaxes());
|
||||
$this->assertEquals(count($this->invoice_calc->getTaxMap()), 1);
|
||||
$this->assertEquals($this->invoice_calc->getTotal(), 20);
|
||||
$this->assertEquals($this->invoice_calc->getBalance(), 20);
|
||||
@ -244,7 +266,7 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$item->quantity = 1;
|
||||
$item->cost = 10;
|
||||
$item->tax_rate1 = 10;
|
||||
$item->tax_name1 = 10;
|
||||
$item->tax_name1 = 'a10';
|
||||
$item->discount = 5;
|
||||
|
||||
$line_items[] = $item;
|
||||
@ -253,7 +275,7 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$item->quantity = 1;
|
||||
$item->cost = 10;
|
||||
$item->tax_rate1 = 10;
|
||||
$item->tax_name1 = 10;
|
||||
$item->tax_name1 = 'a10';
|
||||
$item->discount = 5;
|
||||
|
||||
$line_items[] = $item;
|
||||
@ -267,17 +289,20 @@ class InvoiceInclusiveTest extends TestCase
|
||||
|
||||
$this->invoice->tax_rate1 = 10;
|
||||
$this->invoice->tax_rate2 = 10;
|
||||
$this->invoice->tax_name1 = 'VAT';
|
||||
$this->invoice->tax_name2 = 'VAT';
|
||||
|
||||
$this->invoice_calc = null;
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice, $this->settings);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
$line_items = $this->invoice_calc->invoice_items->getLineItems();
|
||||
nlog($this->invoice_calc->getTaxMap());
|
||||
|
||||
$this->assertEquals($this->invoice_calc->getSubTotal(), 19);
|
||||
$this->assertEquals($this->invoice_calc->getTotalDiscount(), 0.95);
|
||||
$this->assertEquals($this->invoice_calc->getTotalTaxes(), 4.92);
|
||||
$this->assertEquals(19, $this->invoice_calc->getSubTotal());
|
||||
$this->assertEquals(0.95, $this->invoice_calc->getTotalDiscount());
|
||||
$this->assertEquals(4.92, $this->invoice_calc->getTotalTaxes());
|
||||
|
||||
// nlog($this->invoice_calc->getTaxMap());
|
||||
|
||||
$this->assertEquals(count($this->invoice_calc->getTaxMap()), 1);
|
||||
$this->assertEquals($this->invoice_calc->getTotal(), 18.05);
|
||||
@ -316,6 +341,9 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->tax_rate1 = 10;
|
||||
$this->invoice->tax_rate2 = 10;
|
||||
|
||||
$this->invoice->tax_name1 = 'dog';
|
||||
$this->invoice->tax_name2 = 'cat';
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice, $this->settings);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
@ -361,6 +389,9 @@ class InvoiceInclusiveTest extends TestCase
|
||||
$this->invoice->tax_rate1 = 10;
|
||||
$this->invoice->tax_rate2 = 10;
|
||||
|
||||
$this->invoice->tax_name1 = 'dog';
|
||||
$this->invoice->tax_name2 = 'cat';
|
||||
|
||||
$this->invoice_calc = new InvoiceSumInclusive($this->invoice, $this->settings);
|
||||
$this->invoice_calc->build();
|
||||
|
||||
|
@ -36,6 +36,42 @@ class InvoiceItemTest extends TestCase
|
||||
}
|
||||
|
||||
|
||||
public function testEdgeCasewithDiscountsPercentageAndTaxCalculations()
|
||||
{
|
||||
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
|
||||
$invoice->client_id = $this->client->id;
|
||||
$invoice->uses_inclusive_taxes = false;
|
||||
$invoice->is_amount_discount =false;
|
||||
$invoice->discount = 0;
|
||||
$invoice->tax_rate1 = 0;
|
||||
$invoice->tax_rate2 = 0;
|
||||
$invoice->tax_rate3 = 0;
|
||||
$invoice->tax_name1 = '';
|
||||
$invoice->tax_name2 = '';
|
||||
$invoice->tax_name3 = '';
|
||||
|
||||
$line_items = [];
|
||||
|
||||
$line_item = new InvoiceItem;
|
||||
$line_item->quantity = 1;
|
||||
$line_item->cost = 100;
|
||||
$line_item->tax_rate1 = 22;
|
||||
$line_item->tax_name1 = 'Km';
|
||||
$line_item->product_key = 'Test';
|
||||
$line_item->notes = 'Test';
|
||||
$line_item->is_amount_discount = false;
|
||||
$line_items[] = $line_item;
|
||||
|
||||
$invoice->line_items = $line_items;
|
||||
$invoice->save();
|
||||
|
||||
$invoice = $invoice->calc()->getInvoice();
|
||||
|
||||
$this->assertEquals(122, $invoice->amount);
|
||||
$this->assertEquals(22, $invoice->total_taxes);
|
||||
}
|
||||
|
||||
|
||||
public function testDiscountsWithInclusiveTaxes()
|
||||
{
|
||||
$invoice = InvoiceFactory::create($this->company->id, $this->user->id);
|
||||
|
@ -21,6 +21,83 @@ use Tests\TestCase;
|
||||
class NumberTest extends TestCase
|
||||
{
|
||||
|
||||
public function testRangeOfNumberFormats()
|
||||
{
|
||||
|
||||
|
||||
$floatvals = [
|
||||
"22000.76" =>"22 000,76",
|
||||
"22000.76" =>"22.000,76",
|
||||
"22000.76" =>"22,000.76",
|
||||
"22000" =>"22 000",
|
||||
"22000" =>"22,000",
|
||||
"22000" =>"22.000",
|
||||
"22000.76" =>"22000.76",
|
||||
"22000.76" =>"22000,76",
|
||||
"1022000.76" =>"1.022.000,76",
|
||||
"1022000.76" =>"1,022,000.76",
|
||||
"1000000" =>"1,000,000",
|
||||
"1000000" =>"1.000.000",
|
||||
"1022000.76" =>"1022000.76",
|
||||
"1022000.76" =>"1022000,76",
|
||||
"1022000" =>"1022000",
|
||||
"0.76" =>"0.76",
|
||||
"0.76" =>"0,76",
|
||||
"0" =>"0.00",
|
||||
"0" =>"0,00",
|
||||
"1" =>"1.00",
|
||||
"1" =>"1,00",
|
||||
"423545" =>"423545 €",
|
||||
"423545" =>"423,545 €",
|
||||
"423545" =>"423.545 €",
|
||||
"1" =>"1,00 €",
|
||||
"1.02" =>"€ 1.02",
|
||||
"1000.02" =>"1'000,02 EUR",
|
||||
"1000.02" =>"1 000.02$",
|
||||
"1000.02" =>"1,000.02$",
|
||||
"1000.02" =>"1.000,02 EURO"
|
||||
];
|
||||
|
||||
|
||||
foreach($floatvals as $key => $value) {
|
||||
|
||||
$this->assertEquals($key, Number::parseFloat($value));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function testNegativeFloatParse()
|
||||
{
|
||||
|
||||
$value = '-22,00';
|
||||
|
||||
$res = Number::parseFloat($value);
|
||||
|
||||
$this->assertEquals(-22.0, $res);
|
||||
|
||||
$value = '-22.00';
|
||||
|
||||
$res = Number::parseFloat($value);
|
||||
|
||||
$this->assertEquals(-22.0, $res);
|
||||
|
||||
$value = '-2200,00';
|
||||
|
||||
$res = Number::parseFloat($value);
|
||||
|
||||
$this->assertEquals(-2200.0, $res);
|
||||
|
||||
$value = '-2.200,00';
|
||||
|
||||
$res = Number::parseFloat($value);
|
||||
|
||||
$this->assertEquals(-2200.0, $res);
|
||||
|
||||
$this->assertEquals(-2200, $res);
|
||||
|
||||
}
|
||||
|
||||
public function testConvertDecimalCommaFloats()
|
||||
{
|
||||
$value = '22,00';
|
||||
@ -123,4 +200,22 @@ class NumberTest extends TestCase
|
||||
|
||||
$this->assertEquals(7.99, $converted_amount);
|
||||
}
|
||||
|
||||
public function testMultiCommaNumber()
|
||||
{
|
||||
$amount = '100,100.00';
|
||||
|
||||
$converted_amount = Number::parseFloat($amount);
|
||||
|
||||
$this->assertEquals(100100, $converted_amount);
|
||||
}
|
||||
|
||||
public function testMultiDecimalNumber()
|
||||
{
|
||||
$amount = '100.1000.000,00';
|
||||
|
||||
$converted_amount = Number::parseFloat($amount);
|
||||
|
||||
$this->assertEquals(1001000000, $converted_amount);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user