diff --git a/VERSION.txt b/VERSION.txt
index ec3ee550d57c..035b3d682934 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-5.5.72
\ No newline at end of file
+5.5.74
\ No newline at end of file
diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php
index 05b9ee944f6a..b5aa38a104b9 100644
--- a/app/DataMapper/CompanySettings.php
+++ b/app/DataMapper/CompanySettings.php
@@ -463,7 +463,7 @@ class CompanySettings extends BaseSettings
public $accept_client_input_quote_approval = false;
- public $allow_billable_task_items = false;
+ public $allow_billable_task_items = true;
public $show_task_item_description = false;
diff --git a/app/Filters/UserFilters.php b/app/Filters/UserFilters.php
index ec3c0a08fd9a..b0079e339189 100644
--- a/app/Filters/UserFilters.php
+++ b/app/Filters/UserFilters.php
@@ -88,4 +88,25 @@ class UserFilters extends QueryFilters
->orderByRaw("{$this->with_property} = ? DESC", [$value])
->where('account_id', auth()->user()->account_id);
}
+
+ /**
+ * Exclude a list of user_ids, can pass multiple
+ * user IDs by separating them with a comma.
+ *
+ * @param string $user_id
+ * @return Builder
+ */
+ public function without(string $user_id = ''): Builder
+ {
+ if (strlen($user_id) == 0) {
+ return $this->builder;
+ }
+
+ $user_array = $this->transformKeys(explode(',', $user_id));
+
+ return $this->builder->where(function ($query) use ($user_array) {
+ $query->whereNotIn('id', $user_array)
+ ->where('account_id', auth()->user()->account_id);
+ });
+ }
}
diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php
index 39190ee809fc..9afcc12c7155 100644
--- a/app/Http/Controllers/BaseController.php
+++ b/app/Http/Controllers/BaseController.php
@@ -555,7 +555,8 @@ class BaseController extends Controller
private function resolveQueryLimit(): int
{
if (request()->has('per_page')) {
- return abs((int)request()->input('per_page', 20));
+ return min(abs((int)request()->input('per_page', 20)), 5000);
+ // return abs((int)request()->input('per_page', 20));
}
return 20;
diff --git a/app/Jobs/Entity/EmailEntity.php b/app/Jobs/Entity/EmailEntity.php
index cdf5235dbd6f..26998794040d 100644
--- a/app/Jobs/Entity/EmailEntity.php
+++ b/app/Jobs/Entity/EmailEntity.php
@@ -172,6 +172,7 @@ class EmailEntity implements ShouldQueue
public function failed($e)
{
- // nlog($e->getMessage());
+ nlog("EmailEntity");
+ nlog($e->getMessage());
}
}
diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php
index ca6c8143650c..4d12e8948d14 100644
--- a/app/Jobs/Util/Import.php
+++ b/app/Jobs/Util/Import.php
@@ -514,6 +514,8 @@ class Import implements ShouldQueue
$data['portal_domain'] = '';
}
+ $company_settings->font_size = 16;
+
$data['settings'] = $company_settings;
}
diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php
index 5244510f2d40..87b5d2bb33f8 100644
--- a/app/Models/Gateway.php
+++ b/app/Models/Gateway.php
@@ -104,6 +104,7 @@ class Gateway extends StaticModel
return [
GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true, 'webhooks' => ['payment_intent.succeeded']],
GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'customer.source.updated','payment_intent.processing']],
+ GatewayType::DIRECT_DEBIT => ['refund' => false, 'token_billing' => false, 'webhooks' => ['payment_intent.processing','payment_intent.succeeded','payment_intent.partially_funded']],
GatewayType::ALIPAY => ['refund' => false, 'token_billing' => false],
GatewayType::APPLE_PAY => ['refund' => false, 'token_billing' => false],
GatewayType::SOFORT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded']],
@@ -141,6 +142,7 @@ class Gateway extends StaticModel
return [
GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true, 'webhooks' => ['payment_intent.succeeded']],
GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'customer.source.updated','payment_intent.processing']],
+ GatewayType::DIRECT_DEBIT => ['refund' => false, 'token_billing' => false, 'webhooks' => ['payment_intent.processing','payment_intent.succeeded','payment_intent.partially_funded']],
GatewayType::ALIPAY => ['refund' => false, 'token_billing' => false],
GatewayType::APPLE_PAY => ['refund' => false, 'token_billing' => false],
GatewayType::SOFORT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded']],
diff --git a/app/Models/PaymentHash.php b/app/Models/PaymentHash.php
index dd9c618b3fea..96396a65379f 100644
--- a/app/Models/PaymentHash.php
+++ b/app/Models/PaymentHash.php
@@ -25,6 +25,11 @@ class PaymentHash extends Model
{
return $this->data->invoices;
}
+
+ public function amount_with_fee()
+ {
+ return $this->data->amount_with_fee;
+ }
public function credits_total()
{
diff --git a/app/PaymentDrivers/BaseDriver.php b/app/PaymentDrivers/BaseDriver.php
index a8ed03cb2daf..f68391de2734 100644
--- a/app/PaymentDrivers/BaseDriver.php
+++ b/app/PaymentDrivers/BaseDriver.php
@@ -11,34 +11,35 @@
namespace App\PaymentDrivers;
-use App\Events\Invoice\InvoiceWasPaid;
-use App\Events\Payment\PaymentWasCreated;
-use App\Exceptions\PaymentFailed;
-use App\Factory\PaymentFactory;
-use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
-use App\Jobs\Mail\NinjaMailer;
-use App\Jobs\Mail\NinjaMailerJob;
-use App\Jobs\Mail\NinjaMailerObject;
-use App\Jobs\Mail\PaymentFailedMailer;
-use App\Jobs\Util\SystemLogger;
-use App\Mail\Admin\ClientPaymentFailureObject;
+use App\Utils\Ninja;
+use App\Utils\Number;
use App\Models\Client;
-use App\Models\ClientContact;
-use App\Models\ClientGatewayToken;
-use App\Models\CompanyGateway;
-use App\Models\GatewayType;
+use App\Utils\Helpers;
use App\Models\Invoice;
use App\Models\Payment;
-use App\Models\PaymentHash;
use App\Models\SystemLog;
-use App\Services\Subscription\SubscriptionService;
-use App\Utils\Helpers;
-use App\Utils\Ninja;
-use App\Utils\Traits\MakesHash;
-use App\Utils\Traits\SystemLogTrait;
-use Illuminate\Http\Request;
-use Illuminate\Support\Carbon;
+use App\Models\GatewayType;
+use App\Models\PaymentHash;
use Illuminate\Support\Str;
+use Illuminate\Http\Request;
+use App\Models\ClientContact;
+use App\Jobs\Mail\NinjaMailer;
+use App\Models\CompanyGateway;
+use Illuminate\Support\Carbon;
+use App\Factory\PaymentFactory;
+use App\Jobs\Util\SystemLogger;
+use App\Utils\Traits\MakesHash;
+use App\Exceptions\PaymentFailed;
+use App\Jobs\Mail\NinjaMailerJob;
+use App\Models\ClientGatewayToken;
+use App\Jobs\Mail\NinjaMailerObject;
+use App\Utils\Traits\SystemLogTrait;
+use App\Events\Invoice\InvoiceWasPaid;
+use App\Jobs\Mail\PaymentFailedMailer;
+use App\Events\Payment\PaymentWasCreated;
+use App\Mail\Admin\ClientPaymentFailureObject;
+use App\Services\Subscription\SubscriptionService;
+use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
/**
* Class BaseDriver.
@@ -725,17 +726,35 @@ class BaseDriver extends AbstractPaymentDriver
*/
public function getDescription(bool $abbreviated = true)
{
- if (! $this->payment_hash) {
- return '';
+ if (! $this->payment_hash || !$this->client) {
+ return 'No description';
}
- if ($abbreviated) {
- return \implode(', ', collect($this->payment_hash->invoices())->pluck('invoice_number')->toArray());
+ $invoices_string = \implode(', ', collect($this->payment_hash->invoices())->pluck('invoice_number')->toArray()) ?: null;
+ $amount = Number::formatMoney($this->payment_hash?->amount_with_fee() ?: 0, $this->client);
+
+ if ($abbreviated || ! $invoices_string) {
+ return ctrans('texts.gateway_payment_text_no_invoice', [
+ 'amount' => $amount,
+ 'client' => $this->client->present()->name(),
+ ]);
}
+ return ctrans('texts.gateway_payment_text', [
+ 'invoices' => $invoices_string,
+ 'amount' => $amount,
+ 'client' => $this->client->present()->name(),
+ ]);
+
return sprintf('%s: %s', ctrans('texts.invoices'), \implode(', ', collect($this->payment_hash->invoices())->pluck('invoice_number')->toArray()));
- }
+ }
+
+ /**
+ * Stub for disconnecting from the gateway.
+ *
+ * @return void
+ */
public function disconnect()
{
return true;
diff --git a/app/PaymentDrivers/Stripe/ACH.php b/app/PaymentDrivers/Stripe/ACH.php
index cc1dee538202..34825fd35d35 100644
--- a/app/PaymentDrivers/Stripe/ACH.php
+++ b/app/PaymentDrivers/Stripe/ACH.php
@@ -20,13 +20,11 @@ use App\Jobs\Util\SystemLogger;
use App\Mail\Gateways\ACHVerificationNotification;
use App\Models\ClientGatewayToken;
use App\Models\GatewayType;
-use App\Models\Invoice;
use App\Models\Payment;
use App\Models\PaymentHash;
use App\Models\PaymentType;
use App\Models\SystemLog;
use App\PaymentDrivers\StripePaymentDriver;
-use App\Utils\Number;
use App\Utils\Traits\MakesHash;
use Exception;
use Stripe\Customer;
@@ -158,20 +156,6 @@ class ACH
$bank_account = Customer::retrieveSource($request->customer, $request->source, [], $this->stripe->stripe_connect_auth);
- // /* Catch externally validated bank accounts and mark them as verified */
- // if(isset($bank_account->status) && $bank_account->status == 'verified'){
-
- // $meta = $token->meta;
- // $meta->state = 'authorized';
- // $token->meta = $meta;
- // $token->save();
-
- // return redirect()
- // ->route('client.payment_methods.show', $token->hashed_id)
- // ->with('message', __('texts.payment_method_verified'));
-
- // }
-
try {
$bank_account->verify(['amounts' => request()->transactions]);
@@ -198,18 +182,8 @@ class ACH
$data['payment_method_id'] = GatewayType::BANK_TRANSFER;
$data['customer'] = $this->stripe->findOrCreateCustomer();
$data['amount'] = $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency());
- $amount = $data['total']['amount_with_fee'];
-
- $invoice = Invoice::whereIn('id', $this->transformKeys(array_column($this->stripe->payment_hash->invoices(), 'invoice_id')))
- ->withTrashed()
- ->first();
-
- if ($invoice) {
- $description = ctrans('texts.stripe_payment_text', ['invoicenumber' => $invoice->number, 'amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- } else {
- $description = ctrans('texts.stripe_payment_text_without_invoice', ['amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- }
+ $description = $this->stripe->getDescription(false);
$intent = false;
@@ -239,18 +213,11 @@ class ACH
public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash)
{
$amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total;
- $invoice = Invoice::whereIn('id', $this->transformKeys(array_column($payment_hash->invoices(), 'invoice_id')))
- ->withTrashed()
- ->first();
- if ($invoice) {
- $description = ctrans('texts.stripe_payment_text', ['invoicenumber' => $invoice->number, 'amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- } else {
- $description = ctrans('texts.stripe_payment_text_without_invoice', ['amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- }
+ $description = $this->stripe->getDescription(false);
if (substr($cgt->token, 0, 2) === 'pm') {
- return $this->paymentIntentTokenBilling($amount, $invoice, $description, $cgt, false);
+ return $this->paymentIntentTokenBilling($amount, $description, $cgt, false);
}
$this->stripe->init();
@@ -291,7 +258,7 @@ class ACH
}
}
- public function paymentIntentTokenBilling($amount, $invoice, $description, $cgt, $client_present = true)
+ public function paymentIntentTokenBilling($amount, $description, $cgt, $client_present = true)
{
$this->stripe->init();
@@ -483,18 +450,11 @@ class ACH
$this->stripe->payment_hash->save();
$amount = array_sum(array_column($this->stripe->payment_hash->invoices(), 'amount')) + $this->stripe->payment_hash->fee_total;
- $invoice = Invoice::whereIn('id', $this->transformKeys(array_column($this->stripe->payment_hash->invoices(), 'invoice_id')))
- ->withTrashed()
- ->first();
- if ($invoice) {
- $description = ctrans('texts.stripe_payment_text', ['invoicenumber' => $invoice->number, 'amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- } else {
- $description = ctrans('texts.stripe_payment_text_without_invoice', ['amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- }
+ $description = $this->stripe->getDescription(false);
if (substr($source->token, 0, 2) === 'pm') {
- return $this->paymentIntentTokenBilling($amount, $invoice, $description, $source);
+ return $this->paymentIntentTokenBilling($amount, $description, $source);
}
try {
diff --git a/app/PaymentDrivers/Stripe/ACSS.php b/app/PaymentDrivers/Stripe/ACSS.php
index fb364ce25dab..0cfa8f0812f4 100644
--- a/app/PaymentDrivers/Stripe/ACSS.php
+++ b/app/PaymentDrivers/Stripe/ACSS.php
@@ -143,7 +143,7 @@ class ACSS
'setup_future_usage' => 'off_session',
'payment_method_types' => ['acss_debit'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::ACSS,
@@ -185,7 +185,7 @@ class ACSS
$this->stripe->payment_hash->save();
if (property_exists($gateway_response, 'status') && $gateway_response->status == 'processing') {
- // $this->storePaymentMethod($gateway_response);
+
return $this->processSuccessfulPayment($gateway_response->id);
}
diff --git a/app/PaymentDrivers/Stripe/Alipay.php b/app/PaymentDrivers/Stripe/Alipay.php
index f87bc189e68b..01a5329bc700 100644
--- a/app/PaymentDrivers/Stripe/Alipay.php
+++ b/app/PaymentDrivers/Stripe/Alipay.php
@@ -33,13 +33,25 @@ class Alipay
public function paymentView(array $data)
{
+
+ $intent = \Stripe\PaymentIntent::create([
+ 'amount' => $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
+ 'currency' => $this->stripe->client->currency()->code,
+ 'payment_method_types' => ['alipay'],
+ 'customer' => $this->stripe->findOrCreateCustomer(),
+ 'description' => $this->stripe->getDescription(false),
+ 'metadata' => [
+ 'payment_hash' => $this->stripe->payment_hash->hash,
+ 'gateway_type_id' => GatewayType::ALIPAY,
+ ],
+ ], $this->stripe->stripe_connect_auth);
+
+
$data['gateway'] = $this->stripe;
$data['return_url'] = $this->buildReturnUrl();
- $data['currency'] = $this->stripe->client->getCurrencyCode();
- $data['stripe_amount'] = $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency());
- $data['invoices'] = $this->stripe->payment_hash->invoices();
+ $data['ci_intent'] = $intent->client_secret;
- $this->stripe->payment_hash->data = array_merge((array) $this->stripe->payment_hash->data, ['stripe_amount' => $data['stripe_amount']]);
+ $this->stripe->payment_hash->data = array_merge((array) $this->stripe->payment_hash->data, ['stripe_amount' => $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency())]);
$this->stripe->payment_hash->save();
return render('gateways.stripe.alipay.pay', $data);
@@ -56,30 +68,50 @@ class Alipay
public function paymentResponse(PaymentResponseRequest $request)
{
+ $this->stripe->init();
+
+ $this->stripe->setPaymentHash($request->getPaymentHash());
+ $this->stripe->client = $this->stripe->payment_hash->fee_invoice->client;
+
$this->stripe->payment_hash->data = array_merge((array) $this->stripe->payment_hash->data, $request->all());
$this->stripe->payment_hash->save();
- if (in_array($request->redirect_status, ['succeeded', 'pending'])) {
- return $this->processSuccesfulRedirect($request->source);
+ if($request->payment_intent){
+
+ $pi = \Stripe\PaymentIntent::retrieve(
+ $request->payment_intent,
+ $this->stripe->stripe_connect_auth
+ );
+
+ nlog($pi);
+
+ if (in_array($pi->status, ['succeeded', 'pending'])) {
+ return $this->processSuccesfulRedirect($pi);
+ }
+
+ if($pi->status == 'requires_source_action') {
+ return redirect($pi->next_action->alipay_handle_redirect->url);
+ }
+
}
return $this->processUnsuccesfulRedirect();
}
- public function processSuccesfulRedirect(string $source)
+ public function processSuccesfulRedirect($payment_intent)
{
$this->stripe->init();
$data = [
- 'payment_method' => $this->stripe->payment_hash->data->source,
+ 'payment_method' => $payment_intent->payment_method,
'payment_type' => PaymentType::ALIPAY,
'amount' => $this->stripe->convertFromStripeAmount($this->stripe->payment_hash->data->stripe_amount, $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
- 'transaction_reference' => $source,
+ 'transaction_reference' => $payment_intent->id,
'gateway_type_id' => GatewayType::ALIPAY,
];
- $payment = $this->stripe->createPayment($data, Payment::STATUS_PENDING);
+ $payment = $this->stripe->createPayment($data, $payment_intent->status == 'pending' ? Payment::STATUS_PENDING : Payment::STATUS_COMPLETED);
SystemLogger::dispatch(
['response' => $this->stripe->payment_hash->data, 'data' => $data],
diff --git a/app/PaymentDrivers/Stripe/BECS.php b/app/PaymentDrivers/Stripe/BECS.php
index f2ccc0a69674..a6069065a7da 100644
--- a/app/PaymentDrivers/Stripe/BECS.php
+++ b/app/PaymentDrivers/Stripe/BECS.php
@@ -55,7 +55,7 @@ class BECS
'payment_method_types' => ['au_becs_debit'],
'setup_future_usage' => 'off_session',
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::BECS,
diff --git a/app/PaymentDrivers/Stripe/Bancontact.php b/app/PaymentDrivers/Stripe/Bancontact.php
index f4aa0ba1c3c6..2fe4e6409471 100644
--- a/app/PaymentDrivers/Stripe/Bancontact.php
+++ b/app/PaymentDrivers/Stripe/Bancontact.php
@@ -5,7 +5,7 @@
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
- * @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
+* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/
@@ -51,7 +51,7 @@ class Bancontact
'currency' => 'eur',
'payment_method_types' => ['bancontact'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::BANCONTACT,
diff --git a/app/PaymentDrivers/Stripe/BankTransfer.php b/app/PaymentDrivers/Stripe/BankTransfer.php
new file mode 100644
index 000000000000..29b83c6c9aed
--- /dev/null
+++ b/app/PaymentDrivers/Stripe/BankTransfer.php
@@ -0,0 +1,209 @@
+stripe = $stripe;
+ }
+
+ public function paymentView(array $data)
+ {
+ $this->stripe->init();
+
+ $intent = \Stripe\PaymentIntent::create([
+ 'amount' => $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
+ 'currency' => $this->stripe->client->currency()->code,
+ 'customer' => $this->stripe->findOrCreateCustomer()->id,
+ 'description' => $this->stripe->getDescription(false),
+ 'payment_method_types' => ['customer_balance'],
+ 'payment_method_data' => [
+ 'type' => 'customer_balance',
+ ],
+ 'payment_method_options' => [
+ 'customer_balance' => [
+ 'funding_type' => 'bank_transfer',
+ 'bank_transfer' => $this->resolveBankType()
+ ],
+ ],
+ 'metadata' => [
+ 'payment_hash' => $this->stripe->payment_hash->hash,
+ 'gateway_type_id' => GatewayType::DIRECT_DEBIT,
+ ],
+ ], $this->stripe->stripe_connect_auth);
+
+
+ $this->stripe->payment_hash->data = array_merge((array) $this->stripe->payment_hash->data, ['stripe_amount' => $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency())]);
+ $this->stripe->payment_hash->save();
+
+ $data = [];
+ $data['return_url'] = $this->buildReturnUrl();
+ $data['gateway'] = $this->stripe;
+ $data['client_secret'] = $intent ? $intent->client_secret : false;
+
+ return render('gateways.stripe.bank_transfer.pay', $data);
+ }
+
+ /**
+ * Resolve the bank type based on the currency
+ *
+ * @return void
+ */
+ private function resolveBankType()
+ {
+
+ return match($this->stripe->client->currency()->code){
+ 'GBP' => ['type' => 'gb_bank_transfer'],
+ 'EUR' => ['type' => 'eu_bank_transfer', 'eu_bank_transfer' => ['country' => $this->stripe->client->country->iso_3166_2]],
+ 'JPY' => ['type' => 'jp_bank_transfer'],
+ 'MXN' => ['type' =>'mx_bank_transfer'],
+ };
+
+ }
+
+ /**
+ * Return URL
+ *
+ * @return string
+ */
+ private function buildReturnUrl(): string
+ {
+ return route('client.payments.response.get', [
+ 'company_gateway_id' => $this->stripe->company_gateway->id,
+ 'payment_hash' => $this->stripe->payment_hash->hash,
+ 'payment_method_id' => GatewayType::DIRECT_DEBIT,
+ ]);
+ }
+
+
+ public function paymentResponse(PaymentResponseRequest $request)
+ {
+
+ $this->stripe->init();
+
+ $this->stripe->setPaymentHash($request->getPaymentHash());
+ $this->stripe->client = $this->stripe->payment_hash->fee_invoice->client;
+
+ if($request->payment_intent){
+
+ $pi = \Stripe\PaymentIntent::retrieve(
+ $request->payment_intent,
+ $this->stripe->stripe_connect_auth
+ );
+
+ if (in_array($pi->status, ['succeeded', 'processing'])) {
+ return $this->processSuccesfulRedirect($pi);
+ }
+
+ /* Create a pending payment */
+ if($pi->status == 'requires_action') {
+
+ $data = [
+ 'payment_method' => $pi->payment_method,
+ 'payment_type' => PaymentType::DIRECT_DEBIT,
+ 'amount' => $this->stripe->convertFromStripeAmount($this->stripe->payment_hash->data->stripe_amount, $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
+ 'transaction_reference' => $pi->id,
+ 'gateway_type_id' => GatewayType::DIRECT_DEBIT,
+
+ ];
+
+ $payment = $this->stripe->createPayment($data, Payment::STATUS_PENDING);
+
+ SystemLogger::dispatch(
+ ['response' => $this->stripe->payment_hash->data, 'data' => $data],
+ SystemLog::CATEGORY_GATEWAY_RESPONSE,
+ SystemLog::EVENT_GATEWAY_SUCCESS,
+ SystemLog::TYPE_STRIPE,
+ $this->stripe->client,
+ $this->stripe->client->company,
+ );
+
+ return redirect($pi->next_action->display_bank_transfer_instructions->hosted_instructions_url);
+
+ }
+ return $this->processUnsuccesfulRedirect();
+
+ }
+
+ }
+
+ public function processSuccesfulRedirect($payment_intent)
+ {
+ $this->stripe->init();
+
+ $data = [
+ 'payment_method' => $payment_intent->payment_method,
+ 'payment_type' => PaymentType::DIRECT_DEBIT,
+ 'amount' => $this->stripe->convertFromStripeAmount($this->stripe->payment_hash->data->stripe_amount, $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
+ 'transaction_reference' => $payment_intent->id,
+ 'gateway_type_id' => GatewayType::DIRECT_DEBIT,
+
+ ];
+
+ $payment = $this->stripe->createPayment($data, $payment_intent->status == 'processing' ? Payment::STATUS_PENDING : Payment::STATUS_COMPLETED);
+
+ SystemLogger::dispatch(
+ ['response' => $this->stripe->payment_hash->data, 'data' => $data],
+ SystemLog::CATEGORY_GATEWAY_RESPONSE,
+ SystemLog::EVENT_GATEWAY_SUCCESS,
+ SystemLog::TYPE_STRIPE,
+ $this->stripe->client,
+ $this->stripe->client->company,
+ );
+
+ return redirect()->route('client.payments.show', ['payment' => $this->stripe->encodePrimaryKey($payment->id)]);
+ }
+
+ public function processUnsuccesfulRedirect()
+ {
+ $server_response = $this->stripe->payment_hash->data;
+
+ $this->stripe->sendFailureMail($server_response->redirect_status);
+
+ $message = [
+ 'server_response' => $server_response,
+ 'data' => $this->stripe->payment_hash->data,
+ ];
+
+ SystemLogger::dispatch(
+ $message,
+ SystemLog::CATEGORY_GATEWAY_RESPONSE,
+ SystemLog::EVENT_GATEWAY_FAILURE,
+ SystemLog::TYPE_STRIPE,
+ $this->stripe->client,
+ $this->stripe->client->company,
+ );
+
+ throw new PaymentFailed('Failed to process the payment.', 500);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/PaymentDrivers/Stripe/BrowserPay.php b/app/PaymentDrivers/Stripe/BrowserPay.php
index 27607aa02259..f058475f11ac 100644
--- a/app/PaymentDrivers/Stripe/BrowserPay.php
+++ b/app/PaymentDrivers/Stripe/BrowserPay.php
@@ -70,7 +70,7 @@ class BrowserPay implements MethodInterface
'amount' => $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
'currency' => $this->stripe->client->getCurrencyCode(),
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::APPLE_PAY,
diff --git a/app/PaymentDrivers/Stripe/Charge.php b/app/PaymentDrivers/Stripe/Charge.php
index f40918129707..2dea5f9e7ef1 100644
--- a/app/PaymentDrivers/Stripe/Charge.php
+++ b/app/PaymentDrivers/Stripe/Charge.php
@@ -55,13 +55,8 @@ class Charge
}
$amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total;
- $invoice = Invoice::whereIn('id', $this->transformKeys(array_column($payment_hash->invoices(), 'invoice_id')))->withTrashed()->first();
- if ($invoice) {
- $description = ctrans('texts.stripe_payment_text', ['invoicenumber' => $invoice->number, 'amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- } else {
- $description = ctrans('texts.stripe_payment_text_without_invoice', ['amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- }
+ $description = $this->stripe->getDescription(false);
$this->stripe->init();
diff --git a/app/PaymentDrivers/Stripe/CreditCard.php b/app/PaymentDrivers/Stripe/CreditCard.php
index fadce23f6ac7..e53ffe3da27f 100644
--- a/app/PaymentDrivers/Stripe/CreditCard.php
+++ b/app/PaymentDrivers/Stripe/CreditCard.php
@@ -60,9 +60,8 @@ class CreditCard
public function paymentView(array $data)
{
- $invoice_numbers = collect($data['invoices'])->pluck('invoice_number')->implode(',');
- $description = ctrans('texts.stripe_payment_text', ['invoicenumber' => $invoice_numbers, 'amount' => Number::formatMoney($data['total']['amount_with_fee'], $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
-
+ $description = $this->stripe->getDescription(false);
+
$payment_intent_data = [
'amount' => $this->stripe->convertToStripeAmount($data['total']['amount_with_fee'], $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
'currency' => $this->stripe->client->getCurrencyCode(),
@@ -81,19 +80,6 @@ class CreditCard
return render('gateways.stripe.credit_card.pay', $data);
}
- private function decodeUnicodeString($string)
- {
- return html_entity_decode($string, ENT_QUOTES, 'UTF-8');
- // return iconv("UTF-8", "ISO-8859-1//TRANSLIT", $this->decode_encoded_utf8($string));
- }
-
- private function decode_encoded_utf8($string)
- {
- return preg_replace_callback('#\\\\u([0-9a-f]{4})#ism', function ($matches) {
- return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UCS-2BE');
- }, $string);
- }
-
public function paymentResponse(PaymentResponseRequest $request)
{
$this->stripe->init();
@@ -166,8 +152,6 @@ class CreditCard
$this->stripe->client->company,
);
- //If the user has come from a subscription double check here if we need to redirect.
- //08-08-2022
if ($payment->invoices()->whereHas('subscription')->exists()) {
$subscription = $payment->invoices()->first()->subscription;
@@ -175,7 +159,6 @@ class CreditCard
return redirect($subscription->webhook_configuration['return_url']);
}
}
- //08-08-2022
return redirect()->route('client.payments.show', ['payment' => $this->stripe->encodePrimaryKey($payment->id)]);
}
diff --git a/app/PaymentDrivers/Stripe/EPS.php b/app/PaymentDrivers/Stripe/EPS.php
index 0608c715c4eb..8acefe476616 100644
--- a/app/PaymentDrivers/Stripe/EPS.php
+++ b/app/PaymentDrivers/Stripe/EPS.php
@@ -51,7 +51,7 @@ class EPS
'currency' => 'eur',
'payment_method_types' => ['eps'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::EPS,
diff --git a/app/PaymentDrivers/Stripe/FPX.php b/app/PaymentDrivers/Stripe/FPX.php
index fa835e4eb59e..14402ff76634 100644
--- a/app/PaymentDrivers/Stripe/FPX.php
+++ b/app/PaymentDrivers/Stripe/FPX.php
@@ -52,7 +52,7 @@ class FPX
'currency' => $this->stripe->client->getCurrencyCode(),
'payment_method_types' => ['fpx'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::FPX,
diff --git a/app/PaymentDrivers/Stripe/GIROPAY.php b/app/PaymentDrivers/Stripe/GIROPAY.php
index 167d790eeab0..593a64920c92 100644
--- a/app/PaymentDrivers/Stripe/GIROPAY.php
+++ b/app/PaymentDrivers/Stripe/GIROPAY.php
@@ -51,7 +51,7 @@ class GIROPAY
'currency' => 'eur',
'payment_method_types' => ['giropay'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::GIROPAY,
diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentPartiallyFundedWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentPartiallyFundedWebhook.php
new file mode 100644
index 000000000000..382ac5569110
--- /dev/null
+++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentPartiallyFundedWebhook.php
@@ -0,0 +1,95 @@
+company_key);
+
+ $company = Company::where('company_key', $this->company_key)->first();
+
+ foreach ($this->stripe_request as $transaction) {
+ $payment_intent = false;
+
+ if (array_key_exists('payment_intent', $transaction)) {
+ $payment_intent = $transaction['payment_intent'];
+ } else {
+ $payment_intent = $transaction['id'];
+ }
+
+ if(!$payment_intent){
+ nlog("payment intent not found");
+ nlog($transaction);
+ return;
+ }
+
+ $payment = Payment::query()
+ ->where('company_id', $company->id)
+ ->where('transaction_reference', $payment_intent)
+ ->first();
+
+ if(!$payment){
+ nlog("paymentintent found but no payment");
+ }
+
+ $company_gateway = CompanyGateway::find($this->company_gateway_id);
+ $stripe_driver = $company_gateway->driver()->init();
+
+ $hash = isset($transaction['metadata']['payment_hash']) ? $transaction['metadata']['payment_hash'] : false;
+
+ if (!$hash) {
+ nlog("no hash found");
+ return;
+ }
+
+ $payment_hash = PaymentHash::where('hash', $hash)->first();
+
+ if (!$payment_hash) {
+ nlog("no payment hash found");
+ return;
+ }
+
+ $stripe_driver->client = $payment_hash->fee_invoice->client;
+
+ $pi = \Stripe\PaymentIntent::retrieve($payment_intent, $stripe_driver->stripe_connect_auth);
+
+ $amount = $stripe_driver->convertFromStripeAmount($pi->amount, $stripe_driver->client->currency()->precision, $stripe_driver->client->currency()->precision);
+ $amount_received = $stripe_driver->convertFromStripeAmount($pi->amount_received, $stripe_driver->client->currency()->precision, $stripe_driver->client->currency()->precision);
+
+ //at this point we just send notification emails to the client and advise of over/under payments.
+ }
+ }
+}
diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
index 5881d1196d82..92b7f6b81419 100644
--- a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
+++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
@@ -260,39 +260,6 @@ class PaymentIntentWebhook implements ShouldQueue
}
}
- // private function updateSepaPayment($payment_hash, $client, $meta)
- // {
-
- // $company_gateway = CompanyGateway::find($this->company_gateway_id);
- // $payment_method_type = GatewayType::SEPA;
- // $driver = $company_gateway->driver($client)->init()->setPaymentMethod($payment_method_type);
-
- // $payment_hash->data = array_merge((array) $payment_hash->data, $this->stripe_request);
- // $payment_hash->save();
- // $driver->setPaymentHash($payment_hash);
-
- // $data = [
- // 'payment_method' => $payment_hash->data->object->payment_method,
- // 'payment_type' => PaymentType::parseCardType(strtolower($meta['card_details'])) ?: PaymentType::CREDIT_CARD_OTHER,
- // 'amount' => $payment_hash->data->amount_with_fee,
- // 'transaction_reference' => $meta['transaction_reference'],
- // 'gateway_type_id' => GatewayType::CREDIT_CARD,
- // ];
-
- // $payment = $driver->createPayment($data, Payment::STATUS_COMPLETED);
-
- // SystemLogger::dispatch(
- // ['response' => $this->stripe_request, 'data' => $data],
- // SystemLog::CATEGORY_GATEWAY_RESPONSE,
- // SystemLog::EVENT_GATEWAY_SUCCESS,
- // SystemLog::TYPE_STRIPE,
- // $client,
- // $client->company,
- // );
-
-
- // }
-
private function updateCreditCardPayment($payment_hash, $client, $meta)
{
diff --git a/app/PaymentDrivers/Stripe/Klarna.php b/app/PaymentDrivers/Stripe/Klarna.php
index c15660c867c1..c794a4e22b53 100644
--- a/app/PaymentDrivers/Stripe/Klarna.php
+++ b/app/PaymentDrivers/Stripe/Klarna.php
@@ -47,15 +47,7 @@ class Klarna
$data['customer'] = $this->stripe->findOrCreateCustomer()->id;
$data['country'] = $this->stripe->client->country->iso_3166_2;
- $amount = $data['total']['amount_with_fee'];
-
- $invoice_numbers = collect($data['invoices'])->pluck('invoice_number');
-
- if ($invoice_numbers->count() > 0) {
- $description = ctrans('texts.stripe_payment_text', ['invoicenumber' => $invoice_numbers->implode(', '), 'amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- } else {
- $description = ctrans('texts.stripe_payment_text_without_invoice', ['amount' => Number::formatMoney($amount, $this->stripe->client), 'client' => $this->stripe->client->present()->name()], $this->stripe->client->company->locale());
- }
+ $description = $this->stripe->getDescription(false);
$intent = \Stripe\PaymentIntent::create([
'amount' => $data['stripe_amount'],
diff --git a/app/PaymentDrivers/Stripe/PRZELEWY24.php b/app/PaymentDrivers/Stripe/PRZELEWY24.php
index 206633034944..1ccfc73db49f 100644
--- a/app/PaymentDrivers/Stripe/PRZELEWY24.php
+++ b/app/PaymentDrivers/Stripe/PRZELEWY24.php
@@ -51,7 +51,7 @@ class PRZELEWY24
'currency' => 'eur',
'payment_method_types' => ['p24'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::PRZELEWY24,
diff --git a/app/PaymentDrivers/Stripe/SEPA.php b/app/PaymentDrivers/Stripe/SEPA.php
index 407aac4edc11..b5b5a7268d29 100644
--- a/app/PaymentDrivers/Stripe/SEPA.php
+++ b/app/PaymentDrivers/Stripe/SEPA.php
@@ -60,7 +60,7 @@ class SEPA
'payment_method_types' => ['sepa_debit'],
'setup_future_usage' => 'off_session',
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::SEPA,
diff --git a/app/PaymentDrivers/Stripe/SOFORT.php b/app/PaymentDrivers/Stripe/SOFORT.php
index 58067b9d5f18..52a90cb2f650 100644
--- a/app/PaymentDrivers/Stripe/SOFORT.php
+++ b/app/PaymentDrivers/Stripe/SOFORT.php
@@ -51,7 +51,7 @@ class SOFORT
'currency' => 'eur',
'payment_method_types' => ['sofort'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::SOFORT,
diff --git a/app/PaymentDrivers/Stripe/iDeal.php b/app/PaymentDrivers/Stripe/iDeal.php
index dd32756e0be8..5353181676e4 100644
--- a/app/PaymentDrivers/Stripe/iDeal.php
+++ b/app/PaymentDrivers/Stripe/iDeal.php
@@ -51,7 +51,7 @@ class iDeal
'currency' => 'eur',
'payment_method_types' => ['ideal'],
'customer' => $this->stripe->findOrCreateCustomer(),
- 'description' => $this->stripe->decodeUnicodeString(ctrans('texts.invoices').': '.collect($data['invoices'])->pluck('invoice_number')),
+ 'description' => $this->stripe->getDescription(false),
'metadata' => [
'payment_hash' => $this->stripe->payment_hash->hash,
'gateway_type_id' => GatewayType::IDEAL,
diff --git a/app/PaymentDrivers/StripePaymentDriver.php b/app/PaymentDrivers/StripePaymentDriver.php
index 2e0a352d53f4..99c8e1f3c404 100644
--- a/app/PaymentDrivers/StripePaymentDriver.php
+++ b/app/PaymentDrivers/StripePaymentDriver.php
@@ -12,51 +12,53 @@
namespace App\PaymentDrivers;
-use App\Exceptions\PaymentFailed;
-use App\Exceptions\StripeConnectFailure;
-use App\Http\Requests\Payments\PaymentWebhookRequest;
-use App\Http\Requests\Request;
-use App\Jobs\Util\SystemLogger;
-use App\Models\ClientGatewayToken;
-use App\Models\GatewayType;
-use App\Models\Payment;
-use App\Models\PaymentHash;
-use App\Models\SystemLog;
-use App\PaymentDrivers\Stripe\ACH;
-use App\PaymentDrivers\Stripe\ACSS;
-use App\PaymentDrivers\Stripe\Alipay;
-use App\PaymentDrivers\Stripe\Bancontact;
-use App\PaymentDrivers\Stripe\BECS;
-use App\PaymentDrivers\Stripe\BrowserPay;
-use App\PaymentDrivers\Stripe\Charge;
-use App\PaymentDrivers\Stripe\Connect\Verify;
-use App\PaymentDrivers\Stripe\CreditCard;
-use App\PaymentDrivers\Stripe\EPS;
-use App\PaymentDrivers\Stripe\FPX;
-use App\PaymentDrivers\Stripe\GIROPAY;
-use App\PaymentDrivers\Stripe\iDeal;
-use App\PaymentDrivers\Stripe\ImportCustomers;
-use App\PaymentDrivers\Stripe\Jobs\PaymentIntentFailureWebhook;
-use App\PaymentDrivers\Stripe\Jobs\PaymentIntentProcessingWebhook;
-use App\PaymentDrivers\Stripe\Jobs\PaymentIntentWebhook;
-use App\PaymentDrivers\Stripe\Klarna;
-use App\PaymentDrivers\Stripe\PRZELEWY24;
-use App\PaymentDrivers\Stripe\SEPA;
-use App\PaymentDrivers\Stripe\SOFORT;
-use App\PaymentDrivers\Stripe\UpdatePaymentMethods;
-use App\PaymentDrivers\Stripe\Utilities;
-use App\Utils\Traits\MakesHash;
use Exception;
-use Illuminate\Http\RedirectResponse;
-use Laracasts\Presenter\Exceptions\PresenterException;
+use Stripe\Stripe;
use Stripe\Account;
use Stripe\Customer;
-use Stripe\Exception\ApiErrorException;
+use App\Models\Payment;
+use Stripe\SetupIntent;
+use Stripe\StripeClient;
+use App\Models\SystemLog;
use Stripe\PaymentIntent;
use Stripe\PaymentMethod;
-use Stripe\SetupIntent;
-use Stripe\Stripe;
-use Stripe\StripeClient;
+use App\Models\GatewayType;
+use App\Models\PaymentHash;
+use App\Http\Requests\Request;
+use App\Jobs\Util\SystemLogger;
+use App\Utils\Traits\MakesHash;
+use App\Exceptions\PaymentFailed;
+use App\Models\ClientGatewayToken;
+use App\PaymentDrivers\Stripe\ACH;
+use App\PaymentDrivers\Stripe\EPS;
+use App\PaymentDrivers\Stripe\FPX;
+use App\PaymentDrivers\Stripe\ACSS;
+use App\PaymentDrivers\Stripe\BECS;
+use App\PaymentDrivers\Stripe\SEPA;
+use App\PaymentDrivers\Stripe\iDeal;
+use App\PaymentDrivers\Stripe\Alipay;
+use App\PaymentDrivers\Stripe\Charge;
+use App\PaymentDrivers\Stripe\Klarna;
+use App\PaymentDrivers\Stripe\SOFORT;
+use Illuminate\Http\RedirectResponse;
+use App\PaymentDrivers\Stripe\GIROPAY;
+use Stripe\Exception\ApiErrorException;
+use App\Exceptions\StripeConnectFailure;
+use App\PaymentDrivers\Stripe\Utilities;
+use App\PaymentDrivers\Stripe\Bancontact;
+use App\PaymentDrivers\Stripe\BrowserPay;
+use App\PaymentDrivers\Stripe\CreditCard;
+use App\PaymentDrivers\Stripe\PRZELEWY24;
+use App\PaymentDrivers\Stripe\BankTransfer;
+use App\PaymentDrivers\Stripe\Connect\Verify;
+use App\PaymentDrivers\Stripe\ImportCustomers;
+use App\PaymentDrivers\Stripe\UpdatePaymentMethods;
+use App\Http\Requests\Payments\PaymentWebhookRequest;
+use Laracasts\Presenter\Exceptions\PresenterException;
+use App\PaymentDrivers\Stripe\Jobs\PaymentIntentWebhook;
+use App\PaymentDrivers\Stripe\Jobs\PaymentIntentFailureWebhook;
+use App\PaymentDrivers\Stripe\Jobs\PaymentIntentProcessingWebhook;
+use App\PaymentDrivers\Stripe\Jobs\PaymentIntentPartiallyFundedWebhook;
class StripePaymentDriver extends BaseDriver
{
@@ -95,6 +97,7 @@ class StripePaymentDriver extends BaseDriver
GatewayType::ACSS => ACSS::class,
GatewayType::FPX => FPX::class,
GatewayType::KLARNA => Klarna::class,
+ GatewayType::DIRECT_DEBIT => BankTransfer::class,
];
const SYSTEM_LOG_TYPE = SystemLog::TYPE_STRIPE;
@@ -255,6 +258,14 @@ class StripePaymentDriver extends BaseDriver
$types[] = GatewayType::APPLE_PAY;
}
+ if (
+ $this->client
+ && isset($this->client->country)
+ && in_array($this->client->country->iso_3166_2, ['FR', 'IE', 'NL', 'GB', 'DE', 'ES', 'JP', 'MX'])
+ ) {
+ $types[] = GatewayType::DIRECT_DEBIT;
+ }
+
return $types;
}
@@ -657,6 +668,12 @@ class StripePaymentDriver extends BaseDriver
return response()->json([], 200);
}
+ if ($request->type === 'payment_intent.partially_funded') {
+ PaymentIntentPartiallyFundedWebhook::dispatch($request->data, $request->company_key, $this->company_gateway->id)->delay(now()->addSeconds(rand(5, 10)));
+
+ return response()->json([], 200);
+ }
+
if (in_array($request->type, ['payment_intent.payment_failed', 'charge.failed'])) {
PaymentIntentFailureWebhook::dispatch($request->data, $request->company_key, $this->company_gateway->id)->delay(now()->addSeconds(rand(5, 10)));
diff --git a/app/Services/Invoice/AutoBillInvoice.php b/app/Services/Invoice/AutoBillInvoice.php
index e0070d981dee..cb40857bcabb 100644
--- a/app/Services/Invoice/AutoBillInvoice.php
+++ b/app/Services/Invoice/AutoBillInvoice.php
@@ -121,7 +121,7 @@ class AutoBillInvoice extends AbstractService
$payment_hash = PaymentHash::create([
'hash' => Str::random(64),
- 'data' => ['invoices' => [['invoice_id' => $this->invoice->hashed_id, 'amount' => $amount, 'invoice_number' => $this->invoice->number]]],
+ 'data' => ['amount_with_fee' => $amount + $fee, 'invoices' => [['invoice_id' => $this->invoice->hashed_id, 'amount' => $amount, 'invoice_number' => $this->invoice->number]]],
'fee_total' => $fee,
'fee_invoice_id' => $this->invoice->id,
]);
diff --git a/config/ninja.php b/config/ninja.php
index 1c2d43812bf8..e35ce9d2f44f 100644
--- a/config/ninja.php
+++ b/config/ninja.php
@@ -14,8 +14,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
- 'app_version' => '5.5.72',
- 'app_tag' => '5.5.72',
+ 'app_version' => '5.5.74',
+ 'app_tag' => '5.5.74',
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', ''),
diff --git a/lang/ar/texts.php b/lang/ar/texts.php
index 2e86a79024ce..a65d6b498aa7 100644
--- a/lang/ar/texts.php
+++ b/lang/ar/texts.php
@@ -1,6 +1,6 @@
'الشركة ',
'name' => 'الاسم',
'website' => 'الموقع الإلكتروني',
@@ -203,7 +203,7 @@ $LANG = [
'invoice_error' => 'يرجى التأكد من تحديد العميل وتصحيح أي أخطاء',
'limit_clients' => 'نعتذر, ستتجاوز الحد المسموح به من العملاء المقدر ب :count . الرجاء الترقيه الى النسخه المدفوعه.',
'payment_error' => 'كان هناك خطأ في معالجة الدفع الخاص بك. الرجاء معاودة المحاولة في وقت لاحق',
- 'registration_required' => 'يرجى التسجيل لإرسال فاتورة بالبريد الإلكتروني',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'يرجى تأكيد عنوان بريدك الإلكتروني: رابط لإعادة إرسال رسالة التأكيد عبر البريد الإلكتروني.
',
'updated_client' => 'تم تحديث العميل بنجاح',
@@ -1904,6 +1904,7 @@ $LANG = [
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -4928,7 +4929,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4943,6 +4944,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/bg/texts.php b/lang/bg/texts.php
index 31d24cf5083f..c434b94a82b6 100644
--- a/lang/bg/texts.php
+++ b/lang/bg/texts.php
@@ -1,6 +1,6 @@
'Организация',
'name' => 'Име',
'website' => 'Уебсайт',
@@ -203,7 +203,7 @@ $LANG = [
'invoice_error' => 'Моля изберете клиент и коригирайте грешките',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'Имаше проблем при обработването на плащането Ви. Моля опитайте пак по късно.',
- 'registration_required' => 'Моля регистрирайте се за да изпратите фактура. ',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Моля потвърдете мейл адреса си, :link за да изпратите наново писмото за потвърждение ',
'updated_client' => 'Успешно редактиран клиент',
'archived_client' => 'Успешно архивиран клиент',
@@ -1902,6 +1902,7 @@ $LANG = [
'task' => 'Задача',
'contact_name' => 'Контакт - име',
'city_state_postal' => 'Град / Щат / Пощ. код',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Персонализирано поле',
'account_fields' => 'Фирмени полета',
'facebook_and_twitter' => 'Facebook и Twitter',
@@ -4908,7 +4909,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4923,6 +4924,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/ca/texts.php b/lang/ca/texts.php
index 3f06d96fc406..a9bb92d089ab 100644
--- a/lang/ca/texts.php
+++ b/lang/ca/texts.php
@@ -1,6 +1,6 @@
'Organització',
'name' => 'Nom',
'website' => 'Lloc web',
@@ -170,11 +170,11 @@ $LANG = [
'gateway_id' => 'Passarel·la',
'email_notifications' => 'Notificacions per correu electrònic',
'email_sent' => 'Envia\'m un correu electrònic quan la factura estigui enviada ',
- 'email_viewed' => 'Email me when an invoice is viewed',
- 'email_paid' => 'Email me when an invoice is paid',
+ 'email_viewed' => 'Avisa\'m per correu quan una factura es visualitze',
+ 'email_paid' => 'Avisa\'m per correu una una factura es pague',
'site_updates' => 'Actualitzacions del lloc',
'custom_messages' => 'Missatges personalitzats',
- 'default_email_footer' => 'Set default email signature',
+ 'default_email_footer' => 'Estableix una signatura de correu per defecte',
'select_file' => 'Si us plau, selecciona un fitxer',
'first_row_headers' => 'Utilitza la primera fila com a capçalera',
'column' => 'Columna',
@@ -183,7 +183,7 @@ $LANG = [
'client_will_create' => 'el client serà creat',
'clients_will_create' => 'els clients seràn creats',
'email_settings' => 'Configuració de correu electrònic',
- 'client_view_styling' => 'Client View Styling',
+ 'client_view_styling' => 'Estils de Visualització de Client',
'pdf_email_attachment' => 'Adjuntar PDF',
'custom_css' => 'CSS personalitzat',
'import_clients' => 'Importar dades de clients',
@@ -193,34 +193,34 @@ $LANG = [
'created_clients' => 'Creats :count client(s) correctament',
'updated_settings' => 'La configuració s\'ha actualitzat correctament',
'removed_logo' => 'El logo s\'ha eliminat correctament',
- 'sent_message' => 'Successfully sent message',
- 'invoice_error' => 'Please make sure to select a client and correct any errors',
- 'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
- 'payment_error' => 'There was an error processing your payment. Please try again later.',
- 'registration_required' => 'Please sign up to email an invoice',
- 'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
+ 'sent_message' => 'S\'ha enviat el missatge satisfactòriament',
+ 'invoice_error' => 'Per favor, assegura\'t de seleccionar un client, i corregeix els errors',
+ 'limit_clients' => 'Disculpa, açò superaria el límit de :count clients. Per favor, augmenta a un pla de pagament.',
+ 'payment_error' => 'Ha hagut un error al processar el teu pagament. Per favor, torna-ho a intentar més tard.',
+ 'registration_required' => 'Registration Required',
+ 'confirmation_required' => 'Per favor, confirma la teua adreça de correu electrònic, :link per a reenviar el missatge de confirmació.',
'updated_client' => 'Client actualitzat correctament',
- 'archived_client' => 'Successfully archived client',
+ 'archived_client' => 'S\'ha arxivat el client correctament',
'archived_clients' => ':count clients arxivats satisfactoriament',
- 'deleted_client' => 'Successfully deleted client',
- 'deleted_clients' => 'Successfully deleted :count clients',
- 'updated_invoice' => 'Successfully updated invoice',
- 'created_invoice' => 'Successfully created invoice',
- 'cloned_invoice' => 'Successfully cloned invoice',
- 'emailed_invoice' => 'Successfully emailed invoice',
+ 'deleted_client' => 'S\'ha eliminat el client correctament',
+ 'deleted_clients' => 'S\'han eliminat :count clients correctament',
+ 'updated_invoice' => 'S\'ha actualitzat la factura correctament',
+ 'created_invoice' => 'S\'ha creat la factura correctament',
+ 'cloned_invoice' => 'S\'ha clonat la factura correctament',
+ 'emailed_invoice' => 'S\'ha enviat la factura per correu correctament',
'and_created_client' => 'i client creat',
'archived_invoice' => 'Factura arxivada correctament',
'archived_invoices' => ':count factures arxivades correctament',
'deleted_invoice' => 'Factura eliminada correctament',
'deleted_invoices' => 'S\'han eliminades :count factures correctament ',
- 'created_payment' => 'Successfully created payment',
- 'created_payments' => 'Successfully created :count payment(s)',
- 'archived_payment' => 'Successfully archived payment',
- 'archived_payments' => 'Successfully archived :count payments',
- 'deleted_payment' => 'Successfully deleted payment',
- 'deleted_payments' => 'Successfully deleted :count payments',
- 'applied_payment' => 'Successfully applied payment',
- 'created_credit' => 'Successfully created credit',
+ 'created_payment' => 'S\'ha creat el pagament correctament',
+ 'created_payments' => 'S\'han creat :count pagament(s) correctament',
+ 'archived_payment' => 'S\'ha arxivat el pagament correctament',
+ 'archived_payments' => 'S\'han arxivat :count pagaments correctament',
+ 'deleted_payment' => 'S\'ha eliminat el pagament correctament',
+ 'deleted_payments' => 'S\'han eliminat :count pagaments correctament',
+ 'applied_payment' => 'S\'ha aplicat el pagament correctament',
+ 'created_credit' => 'S\'ha creat el crèdit correctament',
'archived_credit' => 'Successfully archived credit',
'archived_credits' => 'Successfully archived :count credits',
'deleted_credit' => 'Successfully deleted credit',
@@ -1896,6 +1896,7 @@ $LANG = [
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -4902,7 +4903,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4917,6 +4918,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/cs/texts.php b/lang/cs/texts.php
index 446f800cbf99..1712a11f9eda 100644
--- a/lang/cs/texts.php
+++ b/lang/cs/texts.php
@@ -1,6 +1,6 @@
'Organizace',
'name' => 'Název',
'website' => 'Stránky',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Ujistěte se, že máte zvoleného klienta a opravte případné chyby',
'limit_clients' => 'Omlouváme se, toto přesáhne limit :count klientů. Prosím vylepšete svoji instalaci na placenou.',
'payment_error' => 'Nastala chyba během zpracování Vaší platby. Zkuste to prosím znovu později.',
- 'registration_required' => 'Pro odeslání faktury se prosím zaregistrujte',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Prosím potvrďte vaší emailovou adresu. :link pro odeslání potvrzovacího emailu.',
'updated_client' => 'Klient úspěšně aktualizován',
'archived_client' => 'Klient úspěšně archivován',
@@ -1901,6 +1901,7 @@ $LANG = [
'task' => 'Task',
'contact_name' => 'Jméno',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Pole firmy',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -4907,7 +4908,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4922,6 +4923,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/da/texts.php b/lang/da/texts.php
index 5c16f1d3781f..0bde8e89e166 100644
--- a/lang/da/texts.php
+++ b/lang/da/texts.php
@@ -1,6 +1,6 @@
'Organisation',
'name' => 'Navn',
'website' => 'Hjemmeside',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Vælg venligst en kunde og ret eventuelle fejl',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'Det opstod en fejl under din betaling. Venligst prøv igen senere.',
- 'registration_required' => 'Venligst registrer dig for at sende e-mail faktura',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Venligst bekræft e-mail, :link Send bekræftelses e-mail igen.',
'updated_client' => 'Kunde opdateret',
'archived_client' => 'Kunde arkiveret',
@@ -1900,6 +1900,7 @@ $LANG = [
'task' => 'Opgave',
'contact_name' => 'Kontakt navn',
'city_state_postal' => 'By/Postnummer',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Brugerdefineret felt',
'account_fields' => 'Virksomheds felter',
'facebook_and_twitter' => 'Facebook og Twitter',
@@ -4906,7 +4907,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4921,6 +4922,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/de/texts.php b/lang/de/texts.php
index b7e30c8ae3fa..e918cdf74b71 100644
--- a/lang/de/texts.php
+++ b/lang/de/texts.php
@@ -1,6 +1,6 @@
'Unternehmen',
'name' => 'Name',
'website' => 'Webseite',
@@ -75,7 +75,7 @@ $LANG = [
'clients' => 'Kunden',
'invoices' => 'Rechnungen',
'payments' => 'Zahlungen',
- 'credits' => 'Guthaben',
+ 'credits' => 'Gutschrift',
'history' => 'Verlauf',
'search' => 'Suche',
'sign_up' => 'Anmeldung',
@@ -120,14 +120,14 @@ $LANG = [
'delete_client' => 'Kunde löschen',
'archive_payment' => 'Zahlung archivieren',
'delete_payment' => 'Zahlung löschen',
- 'archive_credit' => 'Guthaben archivieren',
- 'delete_credit' => 'Guthaben löschen',
+ 'archive_credit' => 'Gutschrift archivieren',
+ 'delete_credit' => 'Gutschrift löschen',
'show_archived_deleted' => 'Zeige archivierte/gelöschte',
'filter' => 'Filter',
'new_client' => 'Neuer Kunde',
'new_invoice' => 'Neue Rechnung',
'new_payment' => 'Zahlung eingeben',
- 'new_credit' => 'Guthaben eingeben',
+ 'new_credit' => 'Gutschrift eingeben',
'contact' => 'Kontakt',
'date_created' => 'Erstellungsdatum',
'last_login' => 'Letzter Login',
@@ -143,15 +143,15 @@ $LANG = [
'method' => 'Verfahren',
'payment_amount' => 'Zahlungsbetrag',
'payment_date' => 'Zahlungsdatum',
- 'credit_amount' => 'Guthabenbetrag',
- 'credit_balance' => 'Guthabenstand',
- 'credit_date' => 'Guthabendatum',
+ 'credit_amount' => 'Gutschriftsbetrag',
+ 'credit_balance' => 'Gutschrifsstand',
+ 'credit_date' => 'Gutschriftsdatum',
'empty_table' => 'Es sind keine Daten vorhanden',
'select' => 'Wählen',
'edit_client' => 'Kunde bearbeiten',
'edit_invoice' => 'Rechnung bearbeiten',
'create_invoice' => 'Rechnung erstellen',
- 'enter_credit' => 'Guthaben eingeben',
+ 'enter_credit' => 'Gutschrift eingeben',
'last_logged_in' => 'Zuletzt eingeloggt',
'details' => 'Details',
'standing' => 'Aktueller Stand',
@@ -203,7 +203,7 @@ $LANG = [
'invoice_error' => 'Bitte stelle sicher, dass ein Kunde ausgewählt und alle Fehler behoben wurden',
'limit_clients' => 'Entschuldigung aber das wird das Limit von :count Kunden überschreiten. Bitte führen Sie ein kostenpflichtiges Upgrade durch.',
'payment_error' => 'Es ist ein Fehler während der Zahlung aufgetreten. Bitte versuche es später noch einmal.',
- 'registration_required' => 'Bitte melde dich an um eine Rechnung zu versenden',
+ 'registration_required' => 'Registrierung erforderlich',
'confirmation_required' => 'Bitte verifiziere deine E-Mail Adresse, :link um die E-Mail Bestätigung erneut zu senden.',
'updated_client' => 'Kunde erfolgreich aktualisiert',
'archived_client' => 'Kunde erfolgreich archiviert',
@@ -226,11 +226,11 @@ $LANG = [
'deleted_payment' => 'Zahlung erfolgreich gelöscht',
'deleted_payments' => ':count Zahlungen erfolgreich gelöscht',
'applied_payment' => 'Zahlung erfolgreich angewandt',
- 'created_credit' => 'Guthaben erfolgreich erstellt',
- 'archived_credit' => 'Guthaben erfolgreich archiviert',
- 'archived_credits' => ':count Guthaben erfolgreich archiviert',
- 'deleted_credit' => 'Guthaben erfolgreich gelöscht',
- 'deleted_credits' => ':count Guthaben erfolgreich gelöscht',
+ 'created_credit' => 'Gutschrift erfolgreich erstellt',
+ 'archived_credit' => 'Gutschrift erfolgreich archiviert',
+ 'archived_credits' => ':count Gutschriften erfolgreich archiviert',
+ 'deleted_credit' => 'Gutschrift erfolgreich gelöscht',
+ 'deleted_credits' => ':count Gutschriften erfolgreich gelöscht',
'imported_file' => 'Datei erfolgreich importiert',
'updated_vendor' => 'Lieferant erfolgreich aktualisiert',
'created_vendor' => 'Lieferant erfolgreich erstellt',
@@ -416,13 +416,13 @@ $LANG = [
'restore_invoice' => 'Rechnung wiederherstellen',
'restore_quote' => 'Angebot wiederherstellen',
'restore_client' => 'Kunde wiederherstellen',
- 'restore_credit' => 'Guthaben wiederherstellen',
+ 'restore_credit' => 'Gutschrift wiederherstellen',
'restore_payment' => 'Zahlung wiederherstellen',
'restored_invoice' => 'Rechnung erfolgreich wiederhergestellt',
'restored_quote' => 'Angebot erfolgreich wiederhergestellt',
'restored_client' => 'Kunde erfolgreich wiederhergestellt',
'restored_payment' => 'Zahlung erfolgreich wiederhergestellt',
- 'restored_credit' => 'Guthaben erfolgreich wiederhergestellt',
+ 'restored_credit' => 'Gutschrift erfolgreich wiederhergestellt',
'reason_for_canceling' => 'Hilf uns bitte, unser Angebot zu verbessern, indem du uns mitteilst, weswegen du dich dazu entschieden hast, unseren Service nicht länger zu nutzen.',
'discount_percent' => 'Prozent',
'discount_amount' => 'Wert',
@@ -767,10 +767,10 @@ $LANG = [
'activity_11' => ':user aktualisierte Zahlung :payment',
'activity_12' => ':user archivierte Zahlung :payment',
'activity_13' => ':user löschte Zahlung :payment',
- 'activity_14' => ':user gab :credit Guthaben ein',
- 'activity_15' => ':user aktualisierte :credit Guthaben',
- 'activity_16' => ':user archivierte :credit Guthaben',
- 'activity_17' => ':user löschte :credit Guthaben',
+ 'activity_14' => ':user gab :credit Gutschrift ein',
+ 'activity_15' => ':user aktualisierte :credit Gutschrift',
+ 'activity_16' => ':user archivierte :credit Gutschrift',
+ 'activity_17' => ':user löschte :credit Gutschrift',
'activity_18' => ':user erstellte Angebot :quote',
'activity_19' => ':user aktualisierte Angebot :quote',
'activity_20' => ':user mailte Angebot :quote für :client an :contact',
@@ -781,7 +781,7 @@ $LANG = [
'activity_25' => ':user stellte Rechnung :invoice wieder her',
'activity_26' => ':user stellte Kunde :client wieder her',
'activity_27' => ':user stellte Zahlung :payment wieder her',
- 'activity_28' => ':user stellte Guthaben :credit wieder her',
+ 'activity_28' => ':user stellte Gutschrift :credit wieder her',
'activity_29' => ':contact akzeptierte Angebot :quote für :client',
'activity_30' => ':user hat Lieferant :vendor erstellt',
'activity_31' => ':user hat Lieferant :vendor archiviert',
@@ -818,7 +818,7 @@ $LANG = [
'quote_footer' => 'Angebots-Fußzeile',
'free' => 'Kostenlos',
'quote_is_approved' => 'Erfolgreich freigegeben',
- 'apply_credit' => 'Guthaben anwenden',
+ 'apply_credit' => 'Gutschrift anwenden',
'system_settings' => 'Systemeinstellungen',
'archive_token' => 'Token archivieren',
'archived_token' => 'Token erfolgreich archiviert',
@@ -1066,7 +1066,7 @@ $LANG = [
'list_expenses' => 'Ausgaben anzeigen',
'list_recurring_invoices' => 'Wiederkehrende Rechnungen anzeigen',
'list_payments' => 'Zahlungen anzeigen',
- 'list_credits' => 'Guthaben anzeigen',
+ 'list_credits' => 'Gutschriften anzeigen',
'tax_name' => 'Steuersatz Name',
'report_settings' => 'Bericht-Einstellungen',
'search_hotkey' => 'Kürzel ist /',
@@ -1429,7 +1429,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'freq_two_years' => 'Zwei Jahre',
// Payment types
- 'payment_type_Apply Credit' => 'Guthaben anwenden',
+ 'payment_type_Apply Credit' => 'Gutschrift anwenden',
'payment_type_Bank Transfer' => 'Überweisung',
'payment_type_Cash' => 'Bar',
'payment_type_Debit' => 'Debit',
@@ -2014,9 +2014,9 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'deleted_product' => 'Produkt erfolgreich gelöscht',
'deleted_products' => 'Erfolgreich :count Produkte gelöscht',
'restored_product' => 'Produkt erfolgreich wiederhergestellt',
- 'update_credit' => 'Saldo aktualisieren',
- 'updated_credit' => 'Saldo erfolgreich aktualisiert',
- 'edit_credit' => 'Saldo bearbeiten',
+ 'update_credit' => 'Gutschrift aktualisieren',
+ 'updated_credit' => 'Gutschrift erfolgreich aktualisiert',
+ 'edit_credit' => 'Gutschrift bearbeiten',
'realtime_preview' => 'Echtzeit Vorschau',
'realtime_preview_help' => 'Echtzeit Aktualisierung der PDF Vorschau während der Rechnungs-Bearbeitung.
Deaktivieren um die Performance während des Bearbeitens zu verbessern.',
'live_preview_help' => 'Live PDF Vorschau auf Rechnungsseite anzeigen.',
@@ -2153,9 +2153,9 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'updated_payment_term' => 'Zahlungsbedingung erfolgreich aktualisiert',
'archived_payment_term' => 'Zahlungsbedingung erfolgreich archiviert',
'resend_invite' => 'Einladung erneut versenden',
- 'credit_created_by' => 'Guthaben erstellt durch Zahlung :transaction_reference',
- 'created_payment_and_credit' => 'Zahlung und Guthaben erfolgreich erstellt',
- 'created_payment_and_credit_emailed_client' => 'Zahlung und Guthaben erfolgreich erstellt und Kunde per E-Mail benachrichtigt',
+ 'credit_created_by' => 'Gutschrift erstellt durch Zahlung :transaction_reference',
+ 'created_payment_and_credit' => 'Zahlung und Gutschrift erfolgreich erstellt',
+ 'created_payment_and_credit_emailed_client' => 'Zahlung und Gutschrift erfolgreich erstellt und Kunde per E-Mail benachrichtigt',
'create_project' => 'Projekt erstellen',
'create_vendor' => 'Lieferanten erstellen',
'create_expense_category' => 'Kategorie erstellen',
@@ -2207,7 +2207,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'credit_note' => 'Gutschrift',
'credit_issued_to' => 'Kreditkarte ausgestellt auf',
'credit_to' => 'Gutschreiben an',
- 'your_credit' => 'Ihr Guthaben',
+ 'your_credit' => 'Ihre Gutschrift',
'credit_number' => 'Gutschriftnummer',
'create_credit_note' => 'Gutschrift erstellen',
'menu' => 'Menü',
@@ -2242,7 +2242,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'contact_fields' => 'Kontaktfelder',
'custom_contact_fields_help' => 'Füge ein Kontaktfeld hinzu. Optional kann die Feldbezeichnung und der Feldwert auch in PDF-Dokumenten ausgegeben werden.',
'datatable_info' => 'Zeige Eintrag :start bis :end von :total',
- 'credit_total' => 'Gesamtguthaben',
+ 'credit_total' => 'Gesamtgutschrift',
'mark_billable' => 'zur Verrechnung kennzeichnen',
'billed' => 'Verrechnet',
'company_variables' => 'Firmen-Variablen',
@@ -2654,7 +2654,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'project_error_multiple_clients' => 'Die Projekte können nicht zu verschiedenen Kunden gehören',
'invoice_project' => 'Projekt berechnen',
'module_recurring_invoice' => 'Wiederkehrende Rechnungen',
- 'module_credit' => 'Guthaben',
+ 'module_credit' => 'Gutschriften',
'module_quote' => 'Angebote und Vorschläge',
'module_task' => 'Aufgaben und Projekte',
'module_expense' => 'Ausgaben & Lieferanten',
@@ -3336,7 +3336,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'adjust_fee_percent' => 'Anpassungszuschlag Prozent',
'configure_settings' => 'Einstellungen bearbeiten',
'about' => 'Über',
- 'credit_email' => 'Guthaben E-Mail',
+ 'credit_email' => 'Gutschrift E-Mail',
'domain_url' => 'Domain-URL',
'password_is_too_easy' => 'Das Passwort muss einen Großbuchstaben und eine Nummer enthalten',
'client_portal_tasks' => 'Kundenportal-Aufgaben',
@@ -3456,7 +3456,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'vendor_city' => 'Lieferanten-Stadt',
'vendor_state' => 'Lieferanten-Bundesland/Kanton',
'vendor_country' => 'Lieferanten-Land',
- 'credit_footer' => 'Guthaben-Fußzeile',
+ 'credit_footer' => 'Gutschrift-Fußzeile',
'credit_terms' => 'Gutschrift Bedingungen',
'untitled_company' => 'Unbenannte FIrma',
'added_company' => 'Erfolgreich Firma hinzugefügt',
@@ -3479,16 +3479,16 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'payment_success' => 'Bezahlung erfolgreich',
'payment_failure' => 'Bezahlung fehlgeschlagen',
'quote_sent' => 'Kostenvoranschlag versendet',
- 'credit_sent' => 'Guthaben gesendet',
+ 'credit_sent' => 'Gutschrift gesendet',
'invoice_viewed' => 'Rechnung angesehen',
'quote_viewed' => 'Kostenvoranschlag angesehen',
- 'credit_viewed' => 'Guthaben angesehen',
+ 'credit_viewed' => 'Gutschrift angesehen',
'quote_approved' => 'Kostenvoranschlag angenommen',
'receive_all_notifications' => 'Empfange alle Benachrichtigungen',
'purchase_license' => 'Lizenz kaufen',
'enable_modules' => 'Module aktivieren',
'converted_quote' => 'Angebot erfolgreichen konvertiert',
- 'credit_design' => 'Guthaben Design',
+ 'credit_design' => 'Gutschrift Design',
'includes' => 'Beinhaltet',
'css_framework' => 'CSS-Framework',
'custom_designs' => 'Benutzerdefinierte Designs',
@@ -3502,7 +3502,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'removed_design' => 'Design erfolgreich entfernt',
'restored_design' => 'Design erfolgreich wiederhergestellt',
'recurring_tasks' => 'Wiederkehrende Aufgabe',
- 'removed_credit' => 'Guthaben erfolgreich entfernt',
+ 'removed_credit' => 'Gutschrift erfolgreich entfernt',
'latest_version' => 'Neueste Version',
'update_now' => 'Jetzt aktualisieren',
'a_new_version_is_available' => 'Eine neue Version der Webapp ist verfügbar.',
@@ -3514,20 +3514,20 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'partial_payment' => 'Teilzahlung',
'partial_payment_email' => 'Teilzahlungsmail',
'clone_to_credit' => 'Zur Gutschrift duplizieren',
- 'emailed_credit' => 'Guthaben erfolgreich per E-Mail versendet',
- 'marked_credit_as_sent' => 'Guthaben erfolgreich als versendet markiert',
+ 'emailed_credit' => 'Gutschrift erfolgreich per E-Mail versendet',
+ 'marked_credit_as_sent' => 'Gutschrift erfolgreich als versendet markiert',
'email_subject_payment_partial' => 'E-Mail Teilzahlung Betreff',
'is_approved' => 'Wurde angenommen',
'migration_went_wrong' => 'Upps, da ist etwas schiefgelaufen! Stellen Sie sicher, dass Sie InvoiceNinja v5 richtig eingerichtet haben, bevor Sie die Migration starten.',
'cross_migration_message' => 'Kontoübergreifende Migration ist nicht erlaubt. Mehr Informationen finden Sie hier:
https://invoiceninja.github.io/docs/migration/#troubleshooting',
- 'email_credit' => 'Guthaben per E-Mail versenden',
+ 'email_credit' => 'Gutschrift per E-Mail versenden',
'client_email_not_set' => 'Es wurde noch keine E-Mail Adresse beim Kunden eingetragen.',
'ledger' => 'Hauptbuch',
'view_pdf' => 'Zeige PDF',
'all_records' => 'Alle Einträge',
'owned_by_user' => 'Eigentümer',
- 'credit_remaining' => 'Verbleibendes Guthaben',
+ 'credit_remaining' => 'Verbleibende Gutschrift',
'use_default' => 'Benutze Standardwert',
'reminder_endless' => 'Endlose Reminder',
'number_of_days' => 'Anzahl Tage',
@@ -3558,7 +3558,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'search_clients' => 'Suche Kunden',
'search_products' => 'Suche Produkte',
'search_quotes' => 'Suche Angebote',
- 'search_credits' => 'Suche Guthaben',
+ 'search_credits' => 'Suche Gutschrift',
'search_vendors' => 'Suche Lieferanten',
'search_users' => 'Suche Benutzer',
'search_tax_rates' => 'Suche Steuersatz',
@@ -3599,7 +3599,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'reminder3_sent' => 'Mahnung Nr. 3 verschickt',
'reminder_last_sent' => 'Letzte Mahnung verschickt',
'pdf_page_info' => 'Seite :current von :total',
- 'emailed_credits' => 'Guthaben erfolgreich per E-Mail versendet',
+ 'emailed_credits' => 'Gutschriften erfolgreich per E-Mail versendet',
'view_in_stripe' => 'In Stripe anzeigen',
'rows_per_page' => 'Einträge pro Seite',
'apply_payment' => 'Zahlungen anwenden',
@@ -3675,7 +3675,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'search_client' => 'Suche 1 Kunden',
'search_product' => 'Suche 1 Produkt',
'search_quote' => 'Suche 1 Angebot',
- 'search_credit' => 'Suche 1 Guthaben',
+ 'search_credit' => 'Suche 1 Gutschrift',
'search_vendor' => 'Suche 1 Hersteller',
'search_user' => 'Suche 1 Benutzer',
'search_tax_rate' => 'Suche 1 Steuersatz',
@@ -3763,9 +3763,9 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'removed_expense_category' => 'Ausgaben Kategorie erfolgreich entfernt',
'search_expense_category' => 'Suche 1 Ausgabenkategorie',
'search_expense_categories' => 'Suche :count Ausgabenkategorie',
- 'use_available_credits' => 'Verfügbares Guthaben verwenden',
+ 'use_available_credits' => 'Verfügbare Gutschriften verwenden',
'show_option' => 'Zeige Option',
- 'negative_payment_error' => 'Der Guthabenbetrag darf den Zahlungsbetrag nicht übersteigen',
+ 'negative_payment_error' => 'Der Gutschriftsbetrag darf den Zahlungsbetrag nicht übersteigen',
'should_be_invoiced_help' => 'Ermögliche diese Ausgabe in Rechnung zu stellen',
'configure_gateways' => 'Zahlungsanbieter bearbeiten',
'payment_partial' => 'Teilzahlung',
@@ -3834,7 +3834,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'archived_designs' => ':value Designs erfolgreich archiviert',
'deleted_designs' => ':value Designs erfolgreich gelöscht',
'restored_designs' => ':value Designs erfolgreich wiederhergestellt',
- 'restored_credits' => ':value Guthaben erfolgreich archiviert',
+ 'restored_credits' => ':value Gutschrift erfolgreich wiederhergestellt',
'archived_users' => ':value Benutzer erfolgreich archiviert',
'deleted_users' => ':value Benutzer erfolgreich gelöscht',
'removed_users' => ':value Benutzer erfolgreich entfernt',
@@ -3884,7 +3884,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'search_payment_terms' => 'Suche :count Zahlungsbedingungen',
'save_and_preview' => 'Speichern und Vorschau anzeigen',
'save_and_email' => 'Speichern und verschicken',
- 'converted_balance' => 'Guthabenstand',
+ 'converted_balance' => 'Gutschriftstand',
'is_sent' => 'Gesendet',
'document_upload' => 'Dokument hochladen',
'document_upload_help' => 'Erlaube Kunden Dokumente hochzuladen',
@@ -3907,10 +3907,10 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'complete' => 'Fertigstellen',
'next' => 'Weiter',
'next_step' => 'Nächster Schritt',
- 'notification_credit_sent_subject' => 'Rechnung :invoice wurde an Kunde gesendet.',
- 'notification_credit_viewed_subject' => 'Guthaben :invoice wurde angesehen von :client',
+ 'notification_credit_sent_subject' => 'Gutschrift :invoice wurde an Kunde gesendet.',
+ 'notification_credit_viewed_subject' => 'Gutschrift :invoice wurde von :client angesehen.',
'notification_credit_sent' => 'Der folgende Kunde :client hat eine Gutschrift :invoice über :amount erhalten.',
- 'notification_credit_viewed' => 'Der folgende Kunde :client hat Kredit :credit für :amount angeschaut.',
+ 'notification_credit_viewed' => 'Der folgende Kunde :client hat die Gutschrift :credit über :amount angeschaut.',
'reset_password_text' => 'Bitte geben Sie ihre E-Mail-Adresse an, um das Passwort zurücksetzen zu können.',
'password_reset' => 'Passwort zurücksetzten',
'account_login_text' => 'Willkommen! Schön Sie wieder zu sehen.',
@@ -3969,7 +3969,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'list_of_quotes' => 'Angebote',
'waiting_for_approval' => 'Annahme ausstehend',
'quote_still_not_approved' => 'Dieses Angebot wurde noch nicht angenommen.',
- 'list_of_credits' => 'Guthaben',
+ 'list_of_credits' => 'Gutschriften',
'required_extensions' => 'Benötigte PHP-Erweiterungen',
'php_version' => 'PHP Version',
'writable_env_file' => 'Beschreibbare .env-Datei',
@@ -3983,7 +3983,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'page' => 'Seite',
'per_page' => 'pro Seite',
'of' => 'von',
- 'view_credit' => 'Guthaben anzeigen',
+ 'view_credit' => 'Gutschrift anzeigen',
'to_view_entity_password' => 'Um :entity anzusehen, geben Sie bitte Ihr Passwort ein.',
'showing_x_of' => 'Zeige :first bis :last von :total Ergebnissen',
'no_results' => 'Kein Ergebnis gefunden.',
@@ -4035,9 +4035,9 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'saved_at' => 'Gespeichert um :time',
'credit_payment' => 'Gutschrift auf Rechnung :invoice_number angewendet',
'credit_subject' => 'Neue Kredit :number von :account',
- 'credit_message' => 'Um Ihr Guthaben für :amount einzusehen, klicken Sie auf den untenstehenden Link.',
+ 'credit_message' => 'Um Ihre Gutschrift über :amount einzusehen, klicken Sie auf den untenstehenden Link.',
'payment_type_Crypto' => 'Kryptowährung',
- 'payment_type_Credit' => 'Guthaben',
+ 'payment_type_Credit' => 'Gutschrift',
'store_for_future_use' => 'Für zukünftige Zahlung speichern',
'pay_with_credit' => 'Mit Kreditkarte zahlen',
'payment_method_saving_failed' => 'Die Zahlungsart konnte nicht für zukünftige Zahlungen gespeichert werden.',
@@ -4063,7 +4063,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'required_payment_information_more' => 'Um eine Zahlung abzuschließen, benötigen wir weitere Informationen über Sie.',
'required_client_info_save_label' => 'Wir speichern dies, so dass Sie es beim nächsten Mal nicht mehr eingeben müssen.',
'notification_credit_bounced' => 'Wir waren nicht in der Lage, die Gutschrift :invoice an :contact zu liefern. \n :error',
- 'notification_credit_bounced_subject' => 'Guthaben nicht auslieferbar :invoice',
+ 'notification_credit_bounced_subject' => 'Gutschrift nicht auslieferbar :invoice',
'save_payment_method_details' => 'Angaben zur Zahlungsart speichern',
'new_card' => 'Neue Kreditkarte',
'new_bank_account' => 'Bankverbindung hinzufügen',
@@ -4081,10 +4081,10 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'payment_id_required' => 'Zahlungs-ID notwendig.',
'unable_to_retrieve_payment' => 'Die angegebene Zahlung kann nicht abgerufen werden',
'invoice_not_related_to_payment' => 'Rechnungsnr. :invoice ist nicht mit dieser Zahlung verknüpft',
- 'credit_not_related_to_payment' => 'Guthabennr. :credit ist nicht mit dieser Zahlung verknüpft',
+ 'credit_not_related_to_payment' => 'Gutschrift :credit ist nicht mit dieser Zahlung verknüpft',
'max_refundable_invoice' => 'Es wurde versucht, mehr zu erstatten, als für die Rechnungs-ID :invoice zulässig ist, der maximal erstattungsfähige Betrag ist :amount',
'refund_without_invoices' => 'Wenn Sie versuchen, eine Zahlung mit beigefügten Rechnungen zu erstatten, geben Sie bitte gültige Rechnungen an, die erstattet werden sollen.',
- 'refund_without_credits' => 'Wenn Sie versuchen, eine Zahlung mit beigefügten Guthaben zu erstatten, geben Sie bitte gültige Guthaben an, die erstattet werden sollen.',
+ 'refund_without_credits' => 'Wenn Sie versuchen, eine Zahlung mit angefügter Gutschrift zu erstatten, geben Sie bitte eine gültige Gutschrift an, die erstattet werden sollen.',
'max_refundable_credit' => 'Versuch, mehr zu erstatten, als für die Gutschrift zugelassen ist :credit, maximal erstattungsfähiger Betrag ist :amount',
'project_client_do_not_match' => 'Projektkunde stimmt nicht mit Entitätskunde überein',
'quote_number_taken' => 'Angebotsnummer bereits in Verwendung',
@@ -4092,7 +4092,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'user_not_associated_with_account' => 'Kein mit diesem Konto verbundener Benutzer',
'amounts_do_not_balance' => 'Die Beträge sind nicht korrekt ausgeglichen.',
'insufficient_applied_amount_remaining' => 'Der angewandte Betrag reicht nicht aus, um die Zahlung zu decken.',
- 'insufficient_credit_balance' => 'Unzureichendes Guthaben auf dem Kredit.',
+ 'insufficient_credit_balance' => 'Unzureichende Gutschrift auf dem Kredit.',
'one_or_more_invoices_paid' => 'Eine oder mehrere dieser Rechnungen wurden bereits bezahlt',
'invoice_cannot_be_refunded' => 'Rechnung :number kann nicht erstattet werden',
'attempted_refund_failed' => 'Erstattungsversuch :amount nur :refundable_amount für Erstattung verfügbar',
@@ -4103,7 +4103,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'large_account_update_parameter' => 'Kann ein großes Konto ohne den Parameter updated_at nicht laden',
'no_backup_exists' => 'Für diese Aktivität ist keine Sicherung vorhanden',
'company_user_not_found' => 'Firma Benutzerdatensatz nicht gefunden',
- 'no_credits_found' => 'Kein Guthaben gefunden.',
+ 'no_credits_found' => 'Keine Gutschriften gefunden.',
'action_unavailable' => 'Die angeforderte Aktion :action ist nicht verfügbar.',
'no_documents_found' => 'Keine Dokumente gefunden.',
'no_group_settings_found' => 'Keine Gruppeneinstellungen gefunden',
@@ -4131,7 +4131,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'start_multiselect' => 'Mehrfachauswahl',
'email_sent_to_confirm_email' => 'Eine E-Mail wurde versandt um Ihre E-Mail-Adresse zu bestätigen.',
'converted_paid_to_date' => 'Umgewandelt Bezahlt bis Datum',
- 'converted_credit_balance' => 'Umgerechneter Guthabenbetrag',
+ 'converted_credit_balance' => 'Umgerechneter Gutschriftsbetrag',
'converted_total' => 'Umgerechnet Total',
'reply_to_name' => 'Name der Antwortadresse',
'payment_status_-2' => 'Teilweise nicht angewendet',
@@ -4367,7 +4367,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'for_best_performance' => 'Für die beste Leistung laden Sie die App herunter :app',
'bulk_email_invoice' => 'Email Rechnung',
'bulk_email_quote' => 'Angebot per E-Mail senden',
- 'bulk_email_credit' => 'Guthaben per E-Mail senden',
+ 'bulk_email_credit' => 'Gutschrift per E-Mail senden',
'removed_recurring_expense' => 'Erfolgreich wiederkehrende Ausgaben entfernt',
'search_recurring_expense' => 'Wiederkehrende Ausgaben suchen',
'search_recurring_expenses' => 'Wiederkehrende Ausgaben suchen',
@@ -4504,7 +4504,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'status_color_theme' => 'Status Farbschema',
'load_color_theme' => 'lade Farbschema',
'lang_Estonian' => 'estnisch',
- 'marked_credit_as_paid' => 'Guthaben erfolgreich als bezahlt markiert',
+ 'marked_credit_as_paid' => 'Gutschrift erfolgreich als bezahlt markiert',
'marked_credits_as_paid' => 'Erfolgreich Kredite als bezahlt markiert',
'wait_for_loading' => 'Daten werden geladen - bitte warten Sie, bis der Vorgang abgeschlossen ist',
'wait_for_saving' => 'Datenspeicherung - bitte warten Sie, bis der Vorgang abgeschlossen ist',
@@ -4540,7 +4540,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'file_saved_in_downloads_folder' => 'Die Datei wurde im Downloads-Ordner gespeichert',
'small' => 'Klein',
'quotes_backup_subject' => 'Deine Angebote stehen zum Download bereit',
- 'credits_backup_subject' => 'Deine Guthaben stehen zum Download bereit',
+ 'credits_backup_subject' => 'Die Gutschriften stehen zum Download bereit',
'document_download_subject' => 'Deine Dokumente stehen zum Download bereit',
'reminder_message' => 'Mahnung für Rechnung :number über :balance',
'gmail_credentials_invalid_subject' => 'Senden mit ungültigen GMail-Anmeldedaten',
@@ -4820,7 +4820,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'withdrawals' => 'Auszahlungen',
'matched' => 'übereinstimmend',
'unmatched' => 'nicht übereinstimmend',
- 'create_credit' => 'Guthaben erstellen',
+ 'create_credit' => 'Gutschrift erstellen',
'transactions' => 'Transaktionen',
'new_transaction' => 'Neue Transaktion',
'edit_transaction' => 'Transaktion bearbeiten',
@@ -4910,7 +4910,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'export_company' => 'Unternehmens Sicherungskopie erstellen',
'backup' => 'Sicherungskopie',
'notification_purchase_order_created_body' => 'Die folgende Bestellung :purchase_order wurde für den Lieferant :vendor in Höhe von :amount erstellt.',
- 'notification_purchase_order_created_subject' => 'Bestellung :purchase_order wurde für :vendor erstellt',
+ 'notification_purchase_order_created_subject' => 'Bestellung :purchase_order wurde für :vendor erstellt',
'notification_purchase_order_sent_subject' => 'Bestellung :purchase_order wurde an :vendor gesendet',
'notification_purchase_order_sent' => 'Der folgende Lieferant :vendor hat eine Bestellung :purchase_order über :amount erhalten.',
'subscription_blocked' => 'Dieses Produkt ist ein eingeschränkter Artikel, bitte kontaktieren Sie den Lieferant für weitere Informationen.',
@@ -4919,12 +4919,44 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'purchase_order_sent' => 'Bestellung gesendet ',
'purchase_order_viewed' => 'Bestellung angeschaut',
'purchase_order_accepted' => 'Bestellung angenommen',
- 'credit_payment_error' => 'Der Guthabenbetrag darf nicht größer sein als der Auszahlungsbetrag',
+ 'credit_payment_error' => 'Der Gutschriftsbetrag darf nicht größer sein als der Auszahlungsbetrag',
'convert_payment_currency_help' => 'Legen Sie einen Wechselkurs fest, wenn Sie eine manuelle Zahlung eingeben',
'convert_expense_currency_help' => 'Legen Sie beim Erstellen einer Ausgabe einen Wechselkurs fest',
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo ID',
'action_add_to_invoice' => 'Zur Rechnung hinzufügen',
-];
+ 'danger_zone' => 'Gefahrenbereich',
+ 'import_completed' => 'Import abgeschlossen',
+ 'client_statement_body' => 'Ihre Anweisung von :start_date bis :end_date ist beigefügt.',
+ 'email_queued' => 'E-Mail in der Warteschlange',
+ 'clone_to_recurring_invoice' => 'In eine wiederkehrende Rechnung kopieren',
+ 'inventory_threshold' => 'Inventargrenzwert',
+ 'emailed_statement' => 'Erfolgreich in die Versandwarteschlange eingereiht',
+ 'show_email_footer' => 'E-Mail Fußzeile anzeigen',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'E-Mail Ausrichtung',
+ 'pdf_preview_location' => 'PDF Vorschau Ort',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Klicke + um einen Eintrag hinzuzufügen',
+ 'last365_days' => 'Letzte 365 Tage',
+ 'import_design' => 'Design importieren',
+ 'imported_design' => 'Design wurde erfolgreich importiert',
+ 'invalid_design' => 'Das Design ist ungültig, die Sekion :value is missing',
+ 'setup_wizard_logo' => 'Möchtest Sie ein Logo hochladen?',
+ 'installed_version' => 'Installierte Version',
+ 'notify_vendor_when_paid' => 'Benachrichtige Lieferant bei Zahlung',
+ 'notify_vendor_when_paid_help' => 'Sende eine E-Mail an den Lieferanten wenn die Ausgabe als bezahlt markiert ist',
+ 'update_payment' => 'Zahlung aktualisieren',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/el/texts.php b/lang/el/texts.php
index 7571fbe703e9..371e637c5eb8 100644
--- a/lang/el/texts.php
+++ b/lang/el/texts.php
@@ -1,6 +1,6 @@
'Οργανισμός',
'name' => 'Επωνυμία',
'website' => 'Ιστοσελίδα',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Παρακαλώ σιγουρευτείτε ότι επιλέξατε ένα πελάτη και διορθώσατε τυχόν σφάλματα',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'Προέκυψε ένα σφάλμα κατά τη διαδικασία της πληρωμής. Παρακαλώ, δοκιμάστε ξανά σε λίγο.',
- 'registration_required' => 'Παρακαλώ, εγγραφείτε για να αποστείλετε ένα τιμολόγιο',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Παρακαλώ επιβεβαιώστε τη διεύθυνση email, :link για να ξαναστείλετε το email επιβεβαίωσης.',
'updated_client' => 'Επιτυχής ενημέρωση πελάτη',
'archived_client' => 'Επιτυχής αρχειοθέτηση πελάτη',
@@ -1901,6 +1901,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ
'task' => 'Εργασία',
'contact_name' => 'Όνομα Επαφής',
'city_state_postal' => 'Πόλη/Νομός/Τ.Κ.',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Προσαρμοσμένο Πεδίο',
'account_fields' => 'Πεδία Εταιρείας',
'facebook_and_twitter' => 'Facebook και Twitter',
@@ -4907,7 +4908,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4922,6 +4923,38 @@ email που είναι συνδεδεμένη με το λογαριασμό σ
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/en/texts.php b/lang/en/texts.php
index 3db8fac5acec..2c4e25ed62a9 100644
--- a/lang/en/texts.php
+++ b/lang/en/texts.php
@@ -1,6 +1,6 @@
'Organization',
'name' => 'Name',
'website' => 'Website',
@@ -2189,7 +2189,6 @@ $LANG = [
'logo_warning_too_large' => 'The image file is too large.',
'logo_warning_fileinfo' => 'Warning: To support gifs the fileinfo PHP extension needs to be enabled.',
'logo_warning_invalid' => 'There was a problem reading the image file, please try a different format.',
-
'error_refresh_page' => 'An error occurred, please refresh the page and try again.',
'data' => 'Data',
'imported_settings' => 'Successfully imported settings',
@@ -4586,7 +4585,7 @@ $LANG = [
'alternate_pdf_viewer' => 'Alternate PDF Viewer',
'alternate_pdf_viewer_help' => 'Improve scrolling over the PDF preview [BETA]',
'currency_cayman_island_dollar' => 'Cayman Island Dollar',
- 'download_report_description' => 'Your report(s) are attached.',
+ 'download_report_description' => 'Please see attached file to check your report.',
'left' => 'Left',
'right' => 'Right',
'center' => 'Center',
@@ -4908,7 +4907,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4952,10 +4951,59 @@ $LANG = [
'update_payment' => 'Update Payment',
'markup' => 'Markup',
'unlock_pro' => 'Unlock Pro',
- 'preferences' => 'Preferences',
+ 'upgrade_to_paid_plan_to_schedule' => 'Upgrade to a paid plan to create schedules',
+ 'next_run' => 'Next Run',
+ 'all_clients' => 'All Clients',
+ 'show_aging_table' => 'Show Aging Table',
+ 'show_payments_table' => 'Show Payments Table',
+ 'email_statement' => 'Email Statement',
+ 'once' => 'Once',
+ 'schedules' => 'Schedules',
+ 'new_schedule' => 'New Schedule',
+ 'edit_schedule' => 'Edit Schedule',
+ 'created_schedule' => 'Successfully created schedule',
+ 'updated_schedule' => 'Successfully updated schedule',
+ 'archived_schedule' => 'Successfully archived schedule',
+ 'deleted_schedule' => 'Successfully deleted schedule',
+ 'removed_schedule' => 'Successfully removed schedule',
+ 'restored_schedule' => 'Successfully restored schedule',
+ 'search_schedule' => 'Search Schedule',
+ 'search_schedules' => 'Search Schedules',
+ 'update_product' => 'Update Product',
+ 'create_purchase_order' => 'Create Purchase Order',
+ 'update_purchase_order' => 'Update Purchase Order',
+ 'sent_invoice' => 'Sent Invoice',
+ 'sent_quote' => 'Sent Quote',
+ 'sent_credit' => 'Sent Credit',
+ 'sent_purchase_order' => 'Sent Purchase Order',
+ 'image_url' => 'Image URL',
+ 'max_quantity' => 'Max Quantity',
+ 'test_url' => 'Test URL',
+ 'auto_bill_help_off' => 'Option is not shown',
+ 'auto_bill_help_optin' => 'Option is shown but not selected',
+ 'auto_bill_help_optout' => 'Option is shown and selected',
+ 'auto_bill_help_always' => 'Option is not shown',
+ 'view_all' => 'View All',
+ 'edit_all' => 'Edit All',
+ 'accept_purchase_order_number' => 'Accept Purchase Order Number',
+ 'accept_purchase_order_number_help' => 'Enable clients to provide a PO number when approving a quote',
+ 'from_email' => 'From Email',
+ 'show_preview' => 'Show Preview',
+ 'show_paid_stamp' => 'Show Paid Stamp',
+ 'show_shipping_address' => 'Show Shipping Address',
+ 'no_documents_to_download' => 'There are no documents in the selected records to download',
+ 'pixels' => 'Pixels',
+ 'logo_size' => 'Logo Size',
+ 'failed' => 'Failed',
+ 'client_contacts' => 'Client Contacts',
+ 'sync_from' => 'Sync From',
+ 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client',
+ 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client',
'click_to_variables' => 'Client here to see all variables.',
'ship_to' => 'Ship to',
-];
+);
return $LANG;
+
+?>
diff --git a/lang/en_GB/texts.php b/lang/en_GB/texts.php
index b80c6e368524..ffb0747bc855 100644
--- a/lang/en_GB/texts.php
+++ b/lang/en_GB/texts.php
@@ -1,6 +1,6 @@
'Organisation',
'name' => 'Name',
'website' => 'Website',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Please make sure to select a client and correct any errors',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'There was an error processing your payment. Please try again later.',
- 'registration_required' => 'Please sign up to email an invoice',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
'updated_client' => 'Successfully updated client',
'archived_client' => 'Successfully archived client',
@@ -4908,7 +4908,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4923,6 +4923,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/es/texts.php b/lang/es/texts.php
index 0e0f21b7528e..68b5e976a469 100644
--- a/lang/es/texts.php
+++ b/lang/es/texts.php
@@ -1,6 +1,6 @@
'Empresa',
'name' => 'Nombre',
'website' => 'Sitio Web',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Seleccionar cliente y corregir errores.',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'Ha habido un error en el proceso de tu pago. Inténtalo de nuevo más tarde.',
- 'registration_required' => 'Inscríbete para enviar una factura',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Por favor confirma tu dirección de correo electrónico, :link para reenviar el correo de confirmación.',
'updated_client' => 'Cliente actualizado con éxito',
'archived_client' => 'Cliente archivado con éxito',
@@ -1899,6 +1899,7 @@ $LANG = [
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Campos de Empresa',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -4905,7 +4906,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4920,6 +4921,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/es_ES/texts.php b/lang/es_ES/texts.php
index 8c7291c928a4..91696cdc535e 100644
--- a/lang/es_ES/texts.php
+++ b/lang/es_ES/texts.php
@@ -1,6 +1,6 @@
'Organización',
'name' => 'Nombre',
'website' => 'Página Web',
@@ -104,7 +104,7 @@ $LANG = [
:domain
as the domain in :link.',
'apple_pay_not_supported' => 'Sorry, Apple/Google Pay isn\'t supported by your browser',
'optional_payment_methods' => 'Optional Payment Methods',
- 'add_subscription' => 'Add Subscription',
+ 'add_subscription' => 'הוסף מנוי',
'target_url' => 'Target',
'target_url_help' => 'When the selected event occurs the app will post the entity to the target URL.',
'event' => 'Event',
@@ -2672,7 +2673,7 @@ $LANG = [
'kanban' => 'Kanban',
'backlog' => 'Backlog',
'ready_to_do' => 'Ready to do',
- 'in_progress' => 'In progress',
+ 'in_progress' => 'בתהליך',
'add_status' => 'Add status',
'archive_status' => 'Archive Status',
'new_status' => 'New Status',
@@ -2681,31 +2682,31 @@ $LANG = [
'improve_client_portal_link' => 'Set a subdomain to shorten the client portal link.',
'budgeted_hours' => 'Budgeted Hours',
'progress' => 'Progress',
- 'view_project' => 'View Project',
- 'summary' => 'Summary',
+ 'view_project' => 'צפה בפרוייקט',
+ 'summary' => 'סיכום',
'endless_reminder' => 'Endless Reminder',
'signature_on_invoice_help' => 'Add the following code to show your client\'s signature on the PDF.',
- 'signature_on_pdf' => 'Show on PDF',
+ 'signature_on_pdf' => 'פתח בPDF',
'signature_on_pdf_help' => 'הצג את חתימת הלקוח ב-PDF של החשבונית/הצעת המחיר.',
'expired_white_label' => 'The white label license has expired',
- 'return_to_login' => 'Return to Login',
+ 'return_to_login' => 'חזור להתחברות',
'convert_products_tip' => 'Note: add a :link named ":name" to see the exchange rate.',
'amount_greater_than_balance' => 'הסכום גדול מיתרת החשבונית, ייווצר זיכוי עם הסכום הנותר.',
'custom_fields_tip' => 'Use Label|Option1,Option2
to show a select box.',
- 'client_information' => 'Client Information',
- 'updated_client_details' => 'Successfully updated client details',
+ 'client_information' => 'פרטי לקוח',
+ 'updated_client_details' => 'פרטי לקוח עודכנו בהצלחה',
'auto' => 'Auto',
- 'tax_amount' => 'Tax Amount',
- 'tax_paid' => 'Tax Paid',
+ 'tax_amount' => 'סכום מס',
+ 'tax_paid' => 'מס ששולם',
'none' => 'None',
'proposal_message_button' => 'To view your proposal for :amount, click the button below.',
- 'proposal' => 'Proposal',
- 'proposals' => 'Proposals',
+ 'proposal' => 'הצעה',
+ 'proposals' => 'הצעות',
'list_proposals' => 'List Proposals',
- 'new_proposal' => 'New Proposal',
- 'edit_proposal' => 'Edit Proposal',
- 'archive_proposal' => 'Archive Proposal',
- 'delete_proposal' => 'Delete Proposal',
+ 'new_proposal' => 'הצעה חדשה',
+ 'edit_proposal' => 'ערוך הצעה',
+ 'archive_proposal' => 'העבר פרויקט לארכיון',
+ 'delete_proposal' => 'מחר הצעה',
'created_proposal' => 'Successfully created proposal',
'updated_proposal' => 'Successfully updated proposal',
'archived_proposal' => 'Successfully archived proposal',
@@ -4900,7 +4901,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4915,6 +4916,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/hr/texts.php b/lang/hr/texts.php
index d4663611e631..ef929fc92d0c 100644
--- a/lang/hr/texts.php
+++ b/lang/hr/texts.php
@@ -1,6 +1,6 @@
'Organizacija',
'name' => 'Ime',
'website' => 'Web',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Molimo provjerite da odaberete klijenta i korigirate greške',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'Došlo je do greške pri procesuiranju vaše uplate. Molimo pokušajte kasnije.',
- 'registration_required' => 'Molimo prijavite se prije slanja računa e-poštom',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
'updated_client' => 'Uspješno ažuriranje klijenta',
'archived_client' => 'Uspješno arhiviran klijent',
@@ -1902,6 +1902,7 @@ Nevažeći kontakt email',
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -4908,7 +4909,7 @@ Nevažeći kontakt email',
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4923,6 +4924,38 @@ Nevažeći kontakt email',
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/it/texts.php b/lang/it/texts.php
index 7a1e91f8a7f1..ae1b5bfb46e4 100644
--- a/lang/it/texts.php
+++ b/lang/it/texts.php
@@ -1,6 +1,6 @@
'Organizzazione',
'name' => 'Nome',
'website' => 'Sito web',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Per favore, assicurati di aver selezionato un cliente e correggi tutti gli errori',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'C\'è stato un errore durante il pagamento. Riprova più tardi, per favore.',
- 'registration_required' => 'Per favore, registrati per inviare una fattura',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Vogliate confermare il vostro indirizzo email, :link per rinviare una email di conferma',
'updated_client' => 'Cliente aggiornato con successo',
'archived_client' => 'Cliente archiviato con successo',
@@ -1903,6 +1903,7 @@ $LANG = [
'task' => 'Attività',
'contact_name' => 'Nome Contatto',
'city_state_postal' => 'Città/Stato/CAP',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Campo Personalizzato',
'account_fields' => 'Campi Azienda',
'facebook_and_twitter' => 'Facebook e Twitter',
@@ -4910,7 +4911,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4925,6 +4926,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/ja/texts.php b/lang/ja/texts.php
index 0a0bc3b1a8bf..ac1f5cadea4c 100644
--- a/lang/ja/texts.php
+++ b/lang/ja/texts.php
@@ -1,6 +1,6 @@
'組織',
'name' => '名前',
'website' => 'WEBサイト',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => '顧客を選択し、エラーを修正したことを確認してください。',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'There was an error processing your payment. Please try again later.',
- 'registration_required' => 'Please sign up to email an invoice',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'メールボックスを確認してください。確認メールを再送する場合は :link をクリックしてください。',
'updated_client' => '顧客を更新しました。',
'archived_client' => '顧客をアーカイブしました。',
@@ -1901,6 +1901,7 @@ $LANG = [
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -4907,7 +4908,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4922,6 +4923,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/lt/texts.php b/lang/lt/texts.php
index b423f3b5dc93..d3806f407b9d 100644
--- a/lang/lt/texts.php
+++ b/lang/lt/texts.php
@@ -1,6 +1,6 @@
'Įmonė',
'name' => 'Pavadinimas',
'website' => 'Internetinis puslapis',
@@ -41,7 +41,7 @@ $LANG = [
'quantity' => 'Kiekis',
'line_total' => 'Suma',
'subtotal' => 'Tarpinė suma',
- 'net_subtotal' => 'Net',
+ 'net_subtotal' => 'Neto',
'paid_to_date' => 'Apmokėta',
'balance_due' => 'Mokėtina suma',
'invoice_design_id' => 'Dizainas',
@@ -200,9 +200,9 @@ $LANG = [
'removed_logo' => 'Logo ištrintas sėkmingai',
'sent_message' => 'Žinutė išsiųsta',
'invoice_error' => 'Pasitinkite klientą ir pataisykite klaidas',
- 'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
+ 'limit_clients' => 'Atsiprašome, tai viršys :count klientų limitą. Atsinaujinkite į mokamą planą.',
'payment_error' => 'There was an error processing your payment. Please try again later.',
- 'registration_required' => 'Prašome prisijungti sąskaitos išsiuntimui',
+ 'registration_required' => 'Būtina registracija',
'confirmation_required' => 'Prašome patvirtinti jūsų el.pašto adresą, :link jei norite dar kartą atsiųsti patvirtinimo laišką.',
'updated_client' => 'Successfully updated client',
'archived_client' => 'Successfully archived client',
@@ -237,7 +237,7 @@ $LANG = [
'archived_vendors' => 'Sėkmingai suarchyvuoti :count tiekėjai',
'deleted_vendor' => 'Sėkmingai ištrintas tiekėjas',
'deleted_vendors' => 'Ištrinta :count tiekėjų',
- 'confirmation_subject' => 'Account Confirmation',
+ 'confirmation_subject' => 'Paskyros patvirtinimas',
'confirmation_header' => 'Paskyros patvirtinimas',
'confirmation_message' => 'Prašome paspausti nuorodą jei norite patvirtinti paskyrą.',
'invoice_subject' => 'Naujos sąskaitos :number iš :account',
@@ -254,7 +254,7 @@ $LANG = [
'notification_invoice_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.',
'notification_invoice_sent' => 'Klientui :client išsiųsta sąskaita :invoice sumai :amount.',
'notification_invoice_viewed' => 'Klientas :client žiūrėjo sąskaitą :invoice for :amount.',
- 'stripe_payment_text' => 'Invoice :invoicenumber for :amount for client :client',
+ 'stripe_payment_text' => 'Sąskaita faktūra :invoicenumber už :amount klientui :client',
'stripe_payment_text_without_invoice' => 'Payment with no invoice for amount :amount for client :client',
'reset_password' => 'You can reset your account password by clicking the following button:',
'secure_payment' => 'Secure Payment',
@@ -1901,6 +1901,7 @@ $LANG = [
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -2294,7 +2295,7 @@ $LANG = [
'update_payment_details' => 'Update payment details',
'updated_payment_details' => 'Successfully updated payment details',
'update_credit_card' => 'Update Credit Card',
- 'recurring_expenses' => 'Recurring Expenses',
+ 'recurring_expenses' => 'Pasikartojančios išlaidos',
'recurring_expense' => 'Recurring Expense',
'new_recurring_expense' => 'New Recurring Expense',
'edit_recurring_expense' => 'Edit Recurring Expense',
@@ -3308,7 +3309,7 @@ $LANG = [
'group2' => 'Custom Group 2',
'group3' => 'Custom Group 3',
'group4' => 'Custom Group 4',
- 'number' => 'Number',
+ 'number' => 'Numeris',
'count' => 'Count',
'is_active' => 'Is Active',
'contact_last_login' => 'Contact Last Login',
@@ -3775,9 +3776,9 @@ $LANG = [
'quote_expired' => 'Quote Expired',
'recurring_invoice_total' => 'Invoice Total',
'actions' => 'Actions',
- 'expense_number' => 'Expense Number',
+ 'expense_number' => 'Išlaidų numeris',
'task_number' => 'Task Number',
- 'project_number' => 'Project Number',
+ 'project_number' => 'Projekto numeris',
'view_settings' => 'View Settings',
'company_disabled_warning' => 'Warning: this company has not yet been activated',
'late_invoice' => 'Late Invoice',
@@ -4818,7 +4819,7 @@ $LANG = [
'matched' => 'Matched',
'unmatched' => 'Unmatched',
'create_credit' => 'Create Credit',
- 'transactions' => 'Transactions',
+ 'transactions' => 'Pervedimai',
'new_transaction' => 'New Transaction',
'edit_transaction' => 'Edit Transaction',
'created_transaction' => 'Successfully created transaction',
@@ -4907,7 +4908,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4922,6 +4923,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Spustelėkite +, kad sukurtumėte įrašą',
+ 'last365_days' => 'Paskutinės 365 dienos',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Atnaujinti apmokėjimą',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Atrakinti Pro galimybes',
+);
+
return $LANG;
+
+?>
diff --git a/lang/lv_LV/texts.php b/lang/lv_LV/texts.php
index 05a407bbc9f8..72d9d536042c 100644
--- a/lang/lv_LV/texts.php
+++ b/lang/lv_LV/texts.php
@@ -1,6 +1,6 @@
'Uzņēmums',
'name' => 'Nosaukums',
'website' => 'Mājas lapa',
@@ -75,7 +75,7 @@ $LANG = [
'clients' => 'Klienti',
'invoices' => 'Rēķini',
'payments' => 'Maksājumi',
- 'credits' => 'Kredīti',
+ 'credits' => 'Atgriešana',
'history' => 'Vēsture',
'search' => 'Meklēt',
'sign_up' => 'Sign Up',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Please make sure to select a client and correct any errors',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'There was an error processing your payment. Please try again later.',
- 'registration_required' => 'Please sign up to email an invoice',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
'updated_client' => 'Successfully updated client',
'archived_client' => 'Successfully archived client',
@@ -258,7 +258,7 @@ $LANG = [
'stripe_payment_text_without_invoice' => 'Payment with no invoice for amount :amount for client :client',
'reset_password' => 'You can reset your account password by clicking the following button:',
'secure_payment' => 'Secure Payment',
- 'card_number' => 'Card Number',
+ 'card_number' => 'Kartes numurs',
'expiration_month' => 'Expiration Month',
'expiration_year' => 'Expiration Year',
'cvv' => 'CVV',
@@ -441,7 +441,7 @@ $LANG = [
'payment_email' => 'Maksājumu e-pasts',
'quote_email' => 'Citēt e-pastu',
'reset_all' => 'Reset All',
- 'approve' => 'Approve',
+ 'approve' => 'Apstiprināt',
'token_billing_type_id' => 'Token Billing',
'token_billing_help' => 'Store payment details with WePay, Stripe, Braintree or GoCardless.',
'token_billing_1' => 'Disabled',
@@ -518,7 +518,7 @@ $LANG = [
'less_fields' => 'Less Fields',
'client_name' => 'Klienta vārds',
'pdf_settings' => 'PDF Settings',
- 'product_settings' => 'Product Settings',
+ 'product_settings' => 'Produktu iestatījumi',
'auto_wrap' => 'Auto Line Wrap',
'duplicate_post' => 'Warning: the previous page was submitted twice. The second submission had been ignored.',
'view_documentation' => 'View Documentation',
@@ -533,7 +533,7 @@ $LANG = [
'chart' => 'Chart',
'report' => 'Report',
'group_by' => 'Group by',
- 'paid' => 'Paid',
+ 'paid' => 'Apmaksāts',
'enable_report' => 'Report',
'enable_chart' => 'Chart',
'totals' => 'Totals',
@@ -544,7 +544,7 @@ $LANG = [
'recurring' => 'Atkārtojošie',
'last_invoice_sent' => 'Last invoice sent :date',
'processed_updates' => 'Successfully completed update',
- 'tasks' => 'Tasks',
+ 'tasks' => 'Uzdevumi',
'new_task' => 'New Task',
'start_time' => 'Start Time',
'created_task' => 'Successfully created task',
@@ -680,8 +680,8 @@ $LANG = [
'status_sent' => 'Sent',
'status_viewed' => 'Viewed',
'status_partial' => 'Partial',
- 'status_paid' => 'Paid',
- 'status_unpaid' => 'Unpaid',
+ 'status_paid' => 'Apmaksāts',
+ 'status_unpaid' => 'Neapmaksāts',
'status_all' => 'All',
'show_line_item_tax' => 'Display line item taxes inline',
'iframe_url' => 'Website',
@@ -711,7 +711,7 @@ $LANG = [
'sign_up_using' => 'Sign up using',
'invalid_credentials' => 'These credentials do not match our records',
'show_all_options' => 'Show all options',
- 'user_details' => 'User Details',
+ 'user_details' => 'Lietotāja dati',
'oneclick_login' => 'Connected Account',
'disable' => 'Disable',
'invoice_quote_number' => 'Invoice and Quote Numbers',
@@ -727,14 +727,14 @@ $LANG = [
'basic_settings' => 'Basic Settings',
'pro' => 'Pro',
'gateways' => 'Payment Gateways',
- 'next_send_on' => 'Send Next: :date',
+ 'next_send_on' => 'Nākošais sūtīts: :datums',
'no_longer_running' => 'This invoice is not scheduled to run',
'general_settings' => 'General Settings',
'customize' => 'Pielāgot',
'oneclick_login_help' => 'Connect an account to login without a password',
'referral_code_help' => 'Earn money by sharing our app online',
'enable_with_stripe' => 'Enable | Requires Stripe',
- 'tax_settings' => 'Tax Settings',
+ 'tax_settings' => 'Nodokļu iestatījumi',
'create_tax_rate' => 'Add Tax Rate',
'updated_tax_rate' => 'Successfully updated tax rate',
'created_tax_rate' => 'Successfully created tax rate',
@@ -752,7 +752,7 @@ $LANG = [
'see_options' => 'See options',
'invoice_counter' => 'Invoice Counter',
'quote_counter' => 'Quote Counter',
- 'type' => 'Type',
+ 'type' => 'Veids',
'activity_1' => ':user created client :client',
'activity_2' => ':user archived client :client',
'activity_3' => ':user deleted client :client',
@@ -816,7 +816,7 @@ $LANG = [
'default_invoice_footer' => 'Default Invoice Footer',
'quote_footer' => 'Quote Footer',
'free' => 'Free',
- 'quote_is_approved' => 'Successfully approved',
+ 'quote_is_approved' => 'Veiksmīgi apstiprināts',
'apply_credit' => 'Apply Credit',
'system_settings' => 'System Settings',
'archive_token' => 'Archive Token',
@@ -1003,10 +1003,10 @@ $LANG = [
'account_number' => 'Account Number',
'account_name' => 'Account Name',
'bank_account_error' => 'Failed to retrieve account details, please check your credentials.',
- 'status_approved' => 'Approved',
+ 'status_approved' => 'Apstiprināts',
'quote_settings' => 'Quote Settings',
'auto_convert_quote' => 'Auto Convert',
- 'auto_convert_quote_help' => 'Automatically convert a quote to an invoice when approved.',
+ 'auto_convert_quote_help' => 'Automatiski konvertēt apstiprinātu piedāvājumu rēķinā. ',
'validate' => 'Validate',
'info' => 'Info',
'imported_expenses' => 'Successfully created :count_vendors vendor(s) and :count_expenses expense(s)',
@@ -1086,7 +1086,7 @@ $LANG = [
'send_portal_password_help' => 'If no password is set, one will be generated and sent with the first invoice.',
'expired' => 'Expired',
- 'invalid_card_number' => 'The credit card number is not valid.',
+ 'invalid_card_number' => 'Nederīgs kartes numurs',
'invalid_expiry' => 'The expiration date is not valid.',
'invalid_cvv' => 'The CVV is not valid.',
'cost' => 'Cost',
@@ -1125,7 +1125,7 @@ $LANG = [
'december' => 'Decembris',
// Documents
- 'documents_header' => 'Documents:',
+ 'documents_header' => 'Dokumenti:',
'email_documents_header' => 'Documents:',
'email_documents_example_1' => 'Widgets Receipt.pdf',
'email_documents_example_2' => 'Final Deliverable.zip',
@@ -1168,7 +1168,7 @@ $LANG = [
'plan_term_changes_to' => ':plan (:term) on :date',
'cancel_plan_change' => 'Cancel Change',
'plan' => 'Plan',
- 'expires' => 'Expires',
+ 'expires' => 'Derīguma termiņš',
'renews' => 'Renews',
'plan_expired' => ':plan Plan Expired',
'trial_expired' => ':plan Plan Trial Ended',
@@ -1189,7 +1189,7 @@ $LANG = [
'updated_plan' => 'Updated plan settings',
'plan_paid' => 'Term Started',
'plan_started' => 'Plan Started',
- 'plan_expires' => 'Plan Expires',
+ 'plan_expires' => 'Abonementa termiņš',
'white_label_button' => 'White Label',
@@ -1220,13 +1220,13 @@ $LANG = [
'refund' => 'Refund',
'are_you_sure_refund' => 'Refund selected payments?',
'status_pending' => 'Pending',
- 'status_completed' => 'Completed',
+ 'status_completed' => 'Pabeigtie',
'status_failed' => 'Failed',
- 'status_partially_refunded' => 'Partially Refunded',
+ 'status_partially_refunded' => 'Daļēji atgriezts',
'status_partially_refunded_amount' => ':amount Refunded',
- 'status_refunded' => 'Refunded',
+ 'status_refunded' => 'Atgriezts',
'status_voided' => 'Cancelled',
- 'refunded_payment' => 'Refunded Payment',
+ 'refunded_payment' => 'Atgriezts maksājums',
'activity_39' => ':user cancelled a :payment_amount payment :payment',
'activity_40' => ':user refunded :adjustment of a :payment_amount payment :payment',
'card_expiration' => 'Exp: :expires',
@@ -1303,7 +1303,7 @@ $LANG = [
'link_manually' => 'Link Manually',
'secured_by_plaid' => 'Secured by Plaid',
'plaid_linked_status' => 'Your bank account at :bank',
- 'add_payment_method' => 'Add Payment Method',
+ 'add_payment_method' => 'Pievienot apmaksas veidu ',
'account_holder_type' => 'Account Holder Type',
'ach_authorization' => 'I authorize :company to use my bank account for future payments and, if necessary, electronically credit my account to correct erroneous debits. I understand that I may cancel this authorization at any time by removing the payment method or by contacting :email.',
'ach_authorization_required' => 'You must consent to ACH transactions.',
@@ -1838,7 +1838,7 @@ $LANG = [
'max_users_reached' => 'The maximum number of users has been reached.',
'buy_now_buttons' => 'Buy Now Buttons',
'landing_page' => 'Landing Page',
- 'payment_type' => 'Payment Type',
+ 'payment_type' => 'Maksājuma veids',
'form' => 'Form',
'link' => 'Link',
'fields' => 'Fields',
@@ -1901,6 +1901,7 @@ $LANG = [
'task' => 'Task',
'contact_name' => 'Contact Name',
'city_state_postal' => 'City/State/Postal',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Custom Field',
'account_fields' => 'Company Fields',
'facebook_and_twitter' => 'Facebook and Twitter',
@@ -2028,7 +2029,7 @@ $LANG = [
'toggle_menu' => 'Toggle Menu',
'new_...' => 'New ...',
'list_...' => 'List ...',
- 'created_at' => 'Date Created',
+ 'created_at' => 'Izveidošanas datums',
'contact_us' => 'Contact Us',
'user_guide' => 'User Guide',
'promo_message' => 'Upgrade before :expires and get :amount OFF your first year of our Pro or Enterprise packages.',
@@ -2089,7 +2090,7 @@ $LANG = [
'filters' => 'Filters',
'sort_by' => 'Sort By',
'draft' => 'Draft',
- 'unpaid' => 'Unpaid',
+ 'unpaid' => 'Neapmaksāts',
'aging' => 'Aging',
'age' => 'Age',
'days' => 'Days',
@@ -2541,7 +2542,7 @@ $LANG = [
'warn_payment_gateway' => 'Note: accepting online payments requires a payment gateway, :link to add one.',
'task_rate' => 'Task Rate',
'task_rate_help' => 'Set the default rate for invoiced tasks.',
- 'past_due' => 'Past Due',
+ 'past_due' => 'Kavētie',
'document' => 'Document',
'invoice_or_expense' => 'Invoice/Expense',
'invoice_pdfs' => 'Invoice PDFs',
@@ -2642,7 +2643,7 @@ $LANG = [
'subscription_event_18' => 'Created Task',
'subscription_event_19' => 'Updated Task',
'subscription_event_20' => 'Deleted Task',
- 'subscription_event_21' => 'Approved Quote',
+ 'subscription_event_21' => 'Apstiprinātie piedāvājumi',
'subscriptions' => 'Subscriptions',
'updated_subscription' => 'Successfully updated subscription',
'created_subscription' => 'Successfully created subscription',
@@ -2654,7 +2655,7 @@ $LANG = [
'module_recurring_invoice' => 'Recurring Invoices',
'module_credit' => 'Credits',
'module_quote' => 'Piedāvājumi un Priekšlikumi ',
- 'module_task' => 'Tasks & Projects',
+ 'module_task' => 'Uzdevumi un projekti',
'module_expense' => 'Expenses & Vendors',
'module_ticket' => 'Biļetes',
'reminders' => 'Reminders',
@@ -2830,10 +2831,10 @@ $LANG = [
'auto_archive_invoice_help' => 'Automatically archive invoices when paid.',
'auto_archive_quote' => 'Auto Archive',
'auto_archive_quote_help' => 'Automatically archive quotes when converted to invoice.',
- 'require_approve_quote' => 'Require approve quote',
+ 'require_approve_quote' => 'Nepieciešams apstiprināt piedāvājumu',
'require_approve_quote_help' => 'Pieprasīt Klientiem apstiprināt Piedāvājuu. ',
'allow_approve_expired_quote' => 'Atļaut apstiprināt Piedāvājumu, kura derīguma termiņš ir beidzies ',
- 'allow_approve_expired_quote_help' => 'Ļaut Klientiem apstiprināt Piedāvājuma cenas. ',
+ 'allow_approve_expired_quote_help' => 'Ļaut Klientiem apstiprināt novecojuša Piedāvājuma cenas. ',
'invoice_workflow' => 'Invoice Workflow',
'quote_workflow' => 'Quote Workflow',
'client_must_be_active' => 'Error: the client must be active',
@@ -2867,10 +2868,10 @@ $LANG = [
'custom_expense_fields_help' => 'Add a field when creating an expense.',
'custom_vendor_fields_help' => 'Add a field when creating a vendor.',
'messages' => 'Messages',
- 'unpaid_invoice' => 'Unpaid Invoice',
- 'paid_invoice' => 'Paid Invoice',
- 'unapproved_quote' => 'Unapproved Quote',
- 'unapproved_proposal' => 'Unapproved Proposal',
+ 'unpaid_invoice' => 'Neapmaksāts rēķins',
+ 'paid_invoice' => 'Apmaksāts rēķins',
+ 'unapproved_quote' => 'Neapstiprināts piedāvājums',
+ 'unapproved_proposal' => 'Neapstiprināts piedāvājums',
'autofills_city_state' => 'Auto-fills city/state',
'no_match_found' => 'No match found',
'password_strength' => 'Password Strength',
@@ -2927,11 +2928,11 @@ $LANG = [
'please_enter_a_quote_number' => 'Please enter a quote number',
'clients_invoices' => ':client\'s invoices',
'viewed' => 'Skatīts',
- 'approved' => 'Approved',
+ 'approved' => 'Apstiprināts',
'invoice_status_1' => 'Melnraksts',
'invoice_status_2' => 'Nosūtīts',
'invoice_status_3' => 'Viewed',
- 'invoice_status_4' => 'Approved',
+ 'invoice_status_4' => 'Apstiprināts',
'invoice_status_5' => 'Partial',
'invoice_status_6' => 'Apmaksāts',
'marked_invoice_as_sent' => 'Successfully marked invoice as sent',
@@ -2961,11 +2962,11 @@ $LANG = [
'payment_status_1' => 'Pending',
'payment_status_2' => 'Voided',
'payment_status_3' => 'Failed',
- 'payment_status_4' => 'Completed',
- 'payment_status_5' => 'Partially Refunded',
- 'payment_status_6' => 'Refunded',
+ 'payment_status_4' => 'Pabeigtie',
+ 'payment_status_5' => 'Daļēji atgriezts',
+ 'payment_status_6' => 'Atgriezts',
'send_receipt_to_client' => 'Send receipt to the client',
- 'refunded' => 'Refunded',
+ 'refunded' => 'Atgriezts',
'marked_quote_as_sent' => 'Cenu piedāvājums veiksmīgi atzīmēts kā nosūtīts',
'custom_module_settings' => 'Custom Module Settings',
'ticket' => 'Biļete',
@@ -3123,7 +3124,7 @@ $LANG = [
'if_you_like_it' => 'If you like it please',
'to_rate_it' => 'to rate it.',
'average' => 'Average',
- 'unapproved' => 'Unapproved',
+ 'unapproved' => 'Neapstiprināts',
'authenticate_to_change_setting' => 'Please authenticate to change this setting',
'locked' => 'Locked',
'authenticate' => 'Authenticate',
@@ -3380,7 +3381,7 @@ $LANG = [
'single_line_text' => 'Single-line text',
'multi_line_text' => 'Multi-line text',
'dropdown' => 'Dropdown',
- 'field_type' => 'Field Type',
+ 'field_type' => 'Lauka tips',
'recover_password_email_sent' => 'A password recovery email has been sent',
'removed_user' => 'Successfully removed user',
'freq_three_years' => 'Three Years',
@@ -3481,7 +3482,7 @@ $LANG = [
'invoice_viewed' => 'Invoice Viewed',
'quote_viewed' => 'Quote Viewed',
'credit_viewed' => 'Credit Viewed',
- 'quote_approved' => 'Quote Approved',
+ 'quote_approved' => 'Piedāvājums apstiprināts',
'receive_all_notifications' => 'Receive All Notifications',
'purchase_license' => 'Purchase License',
'enable_modules' => 'Enable Modules',
@@ -3515,7 +3516,7 @@ $LANG = [
'emailed_credit' => 'Successfully emailed credit',
'marked_credit_as_sent' => 'Successfully marked credit as sent',
'email_subject_payment_partial' => 'Email Partial Payment Subject',
- 'is_approved' => 'Is Approved',
+ 'is_approved' => 'ir apstiprināts',
'migration_went_wrong' => 'Oops, something went wrong! Please make sure you have setup an Invoice Ninja v5 instance before starting the migration.',
'cross_migration_message' => 'Cross account migration is not allowed. Please read more about it here: https://invoiceninja.github.io/docs/migration/#troubleshooting',
'email_credit' => 'Email Credit',
@@ -3548,7 +3549,7 @@ $LANG = [
'selfhosted' => 'Self-Hosted',
'hide_menu' => 'Hide Menu',
'show_menu' => 'Show Menu',
- 'partially_refunded' => 'Partially Refunded',
+ 'partially_refunded' => 'Daļēji atgriezts',
'search_documents' => 'Search Documents',
'search_designs' => 'Search Designs',
'search_invoices' => 'Search Invoices',
@@ -3602,9 +3603,9 @@ $LANG = [
'apply_payment' => 'Apply Payment',
'unapplied' => 'Unapplied',
'custom_labels' => 'Custom Labels',
- 'record_type' => 'Record Type',
+ 'record_type' => 'Ieraksta tips',
'record_name' => 'Record Name',
- 'file_type' => 'File Type',
+ 'file_type' => 'Faila tips',
'height' => 'Height',
'width' => 'Width',
'health_check' => 'Health Check',
@@ -3617,7 +3618,7 @@ $LANG = [
'client_created' => 'Client Created',
'online_payment_email' => 'Online Payment Email',
'manual_payment_email' => 'Manual Payment Email',
- 'completed' => 'Completed',
+ 'completed' => 'Pabeigtie',
'gross' => 'Gross',
'net_amount' => 'Net Amount',
'net_balance' => 'Net Balance',
@@ -3627,7 +3628,7 @@ $LANG = [
'selected_quotes' => 'Izvēlēties Piedāvājumu',
'selected_tasks' => 'Selected Tasks',
'selected_expenses' => 'Selected Expenses',
- 'past_due_invoices' => 'Past Due Invoices',
+ 'past_due_invoices' => 'Kavētie rēķini',
'create_payment' => 'Create Payment',
'update_quote' => 'Update Quote',
'update_invoice' => 'Update Invoice',
@@ -3638,10 +3639,10 @@ $LANG = [
'update_task' => 'Update Task',
'approve_quote' => 'Approve Quote',
'when_paid' => 'When Paid',
- 'expires_on' => 'Expires On',
+ 'expires_on' => 'Beidzas',
'show_sidebar' => 'Show Sidebar',
'hide_sidebar' => 'Hide Sidebar',
- 'event_type' => 'Event Type',
+ 'event_type' => 'Notikuma tips',
'copy' => 'Copy',
'must_be_online' => 'Please restart the app once connected to the internet',
'crons_not_enabled' => 'The crons need to be enabled',
@@ -3718,7 +3719,7 @@ $LANG = [
'last_day_of_the_month' => 'Last Day of the Month',
'use_payment_terms' => 'Use Payment Terms',
'endless' => 'Endless',
- 'next_send_date' => 'Next Send Date',
+ 'next_send_date' => 'Nākamais saņemšanas datums',
'remaining_cycles' => 'Remaining Cycles',
'created_recurring_invoice' => 'Successfully created recurring invoice',
'updated_recurring_invoice' => 'Successfully updated recurring invoice',
@@ -3754,7 +3755,7 @@ $LANG = [
'invoice_task_timelog_help' => 'Add time details to the invoice line items',
'auto_start_tasks_help' => 'Start tasks before saving',
'configure_statuses' => 'Configure Statuses',
- 'task_settings' => 'Task Settings',
+ 'task_settings' => 'Uzdevumu iestatījumi',
'configure_categories' => 'Configure Categories',
'edit_expense_category' => 'Edit Expense Category',
'removed_expense_category' => 'Successfully removed expense category',
@@ -3865,7 +3866,7 @@ $LANG = [
'map_to' => 'Map To',
'first_row_as_column_names' => 'Use first row as column names',
'no_file_selected' => 'No File Selected',
- 'import_type' => 'Import Type',
+ 'import_type' => 'Importa veids',
'draft_mode' => 'Draft Mode',
'draft_mode_help' => 'Preview updates faster but is less accurate',
'show_product_discount' => 'Show Product Discount',
@@ -3873,7 +3874,7 @@ $LANG = [
'tax_name3' => 'Tax Name 3',
'debug_mode_is_enabled' => 'Debug mode is enabled',
'debug_mode_is_enabled_help' => 'Warning: it is intended for use on local machines, it can leak credentials. Click to learn more.',
- 'running_tasks' => 'Running Tasks',
+ 'running_tasks' => 'Tekošie uzdevumi',
'recent_tasks' => 'Recent Tasks',
'recent_expenses' => 'Recent Expenses',
'upcoming_expenses' => 'Upcoming Expenses',
@@ -3922,7 +3923,7 @@ $LANG = [
'email_already_register' => 'This email is already linked to an account',
'locations' => 'Locations',
'freq_indefinitely' => 'Indefinitely',
- 'cycles_remaining' => 'Cycles remaining',
+ 'cycles_remaining' => 'Atlikuši cikli',
'i_understand_delete' => 'I understand, delete',
'download_files' => 'Download Files',
'download_timeframe' => 'Use this link to download your files, the link will expire in 1 hour.',
@@ -3965,7 +3966,7 @@ $LANG = [
'confirmation' => 'Confirmation',
'list_of_quotes' => 'Piedāvājumi',
'waiting_for_approval' => 'Waiting for approval',
- 'quote_still_not_approved' => 'This quote is still not approved',
+ 'quote_still_not_approved' => 'Šis piedāvājums joprojam nav apstiprināts',
'list_of_credits' => 'Credits',
'required_extensions' => 'Required extensions',
'php_version' => 'PHP version',
@@ -3978,12 +3979,12 @@ $LANG = [
'complete_your_payment' => 'Complete payment',
'authorize_for_future_use' => 'Authorize payment method for future use',
'page' => 'Page',
- 'per_page' => 'Per page',
+ 'per_page' => 'Uz lapas',
'of' => 'Of',
'view_credit' => 'View Credit',
'to_view_entity_password' => 'To view the :entity you need to enter password.',
'showing_x_of' => 'Showing :first to :last out of :total results',
- 'no_results' => 'No results found.',
+ 'no_results' => 'Nekas netika atrasts.',
'payment_failed_subject' => 'Payment failed for Client :client',
'payment_failed_body' => 'A payment made by client :client failed with message :message',
'register' => 'Register',
@@ -3993,13 +3994,13 @@ $LANG = [
'complete_your_bank_account_verification' => 'Before using a bank account it must be verified.',
'checkout_com' => 'Checkout.com',
'footer_label' => 'Copyright © :year :company.',
- 'credit_card_invalid' => 'Provided credit card number is not valid.',
+ 'credit_card_invalid' => 'Sniegtais kartes numurs ir nederīgs.',
'month_invalid' => 'Provided month is not valid.',
'year_invalid' => 'Provided year is not valid.',
'https_required' => 'HTTPS is required, form will fail',
'if_you_need_help' => 'If you need help you can post to our',
'update_password_on_confirm' => 'After updating password, your account will be confirmed.',
- 'bank_account_not_linked' => 'To pay with a bank account, first you have to add it as payment method.',
+ 'bank_account_not_linked' => 'Lai apmaksātu caur banku Jums vispirms ir japievieno to kā apmaksas veidu.',
'application_settings_label' => 'Let\'s store basic information about your Invoice Ninja!',
'recommended_in_production' => 'Highly recommended in production',
'enable_only_for_development' => 'Enable only for development',
@@ -4019,9 +4020,9 @@ $LANG = [
'allowed_file_types' => 'Allowed file types:',
'common_codes' => 'Common codes and their meanings',
'payment_error_code_20087' => '20087: Bad Track Data (invalid CVV and/or expiry date)',
- 'download_selected' => 'Download selected',
+ 'download_selected' => 'Lejupielādēt izvēlētos',
'to_pay_invoices' => 'To pay invoices, you have to',
- 'add_payment_method_first' => 'add payment method',
+ 'add_payment_method_first' => 'pievienot apmaksas veidu',
'no_items_selected' => 'No items selected.',
'payment_due' => 'Payment due',
'account_balance' => 'Account balance',
@@ -4192,7 +4193,7 @@ $LANG = [
'removed_subscription' => 'Successfully removed subscription',
'restored_subscription' => 'Successfully restored subscription',
'search_subscription' => 'Search 1 Subscription',
- 'search_subscriptions' => 'Search :count Subscriptions',
+ 'search_subscriptions' => 'Abonementi',
'subdomain_is_not_available' => 'Subdomain is not available',
'connect_gmail' => 'Connect Gmail',
'disconnect_gmail' => 'Disconnect Gmail',
@@ -4243,8 +4244,8 @@ $LANG = [
'migration_failed_label' => 'Migration failed',
'migration_failed' => 'Looks like something went wrong with the migration for the following company:',
'client_email_company_contact_label' => 'If you have any questions please contact us, we\'re here to help!',
- 'quote_was_approved_label' => 'Quote was approved',
- 'quote_was_approved' => 'We would like to inform you that quote was approved.',
+ 'quote_was_approved_label' => 'Piedāvājums bija apstiprināts',
+ 'quote_was_approved' => 'Esam priecīgi Jūs informēt, kā šīs piedāvājums ir apstiprināts.',
'company_import_failure_subject' => 'Error importing :company',
'company_import_failure_body' => 'There was an error importing the company data, the error message was:',
'recurring_invoice_due_date' => 'Due Date',
@@ -4277,13 +4278,13 @@ $LANG = [
'expiry_date' => 'Expiry date',
'cardholder_name' => 'Card holder name',
'recurring_quote_number_taken' => 'Recurring Quote number :number already taken',
- 'account_type' => 'Account type',
+ 'account_type' => 'Konta veids',
'locality' => 'Locality',
'checking' => 'Checking',
'savings' => 'Savings',
'unable_to_verify_payment_method' => 'Unable to verify payment method.',
'generic_gateway_error' => 'Gateway configuration error. Please check your credentials.',
- 'my_documents' => 'My documents',
+ 'my_documents' => 'Mani dokumenti',
'payment_method_cannot_be_preauthorized' => 'This payment method cannot be preauthorized.',
'kbc_cbc' => 'KBC/CBC',
'bancontact' => 'Bancontact',
@@ -4599,7 +4600,7 @@ $LANG = [
'profitloss' => 'Profit and Loss',
'import_format' => 'Import Format',
'export_format' => 'Export Format',
- 'export_type' => 'Export Type',
+ 'export_type' => 'Eksporta veids',
'stop_on_unpaid' => 'Stop On Unpaid',
'stop_on_unpaid_help' => 'Stop creating recurring invoices if the last invoice is unpaid.',
'use_quote_terms' => 'Use Quote Terms',
@@ -4735,16 +4736,16 @@ $LANG = [
'field' => 'Field',
'period' => 'Period',
'fields_per_row' => 'Fields Per Row',
- 'total_active_invoices' => 'Active Invoices',
- 'total_outstanding_invoices' => 'Outstanding Invoices',
- 'total_completed_payments' => 'Completed Payments',
- 'total_refunded_payments' => 'Refunded Payments',
+ 'total_active_invoices' => 'Aktīvie rēķini',
+ 'total_outstanding_invoices' => 'Neapmaksātie rēķini',
+ 'total_completed_payments' => 'Saņemtie maksājumi',
+ 'total_refunded_payments' => 'Atgriezti maksājumi',
'total_active_quotes' => 'Active Quotes',
- 'total_approved_quotes' => 'Approved Quotes',
- 'total_unapproved_quotes' => 'Unapproved Quotes',
- 'total_logged_tasks' => 'Logged Tasks',
- 'total_invoiced_tasks' => 'Invoiced Tasks',
- 'total_paid_tasks' => 'Paid Tasks',
+ 'total_approved_quotes' => 'Apstiprināti piedāvājumi',
+ 'total_unapproved_quotes' => 'Neapstiprināti piedāvājumi',
+ 'total_logged_tasks' => 'Reģistrētie uzdevumi',
+ 'total_invoiced_tasks' => 'Izrakstīti rēķini',
+ 'total_paid_tasks' => 'Apmaksāti uzdevumi',
'total_logged_expenses' => 'Logged Expenses',
'total_pending_expenses' => 'Pending Expenses',
'total_invoiced_expenses' => 'Invoiced Expenses',
@@ -4785,7 +4786,7 @@ $LANG = [
'change_number' => 'Change Number',
'resend_code' => 'Resend Code',
'base_type' => 'Base Type',
- 'category_type' => 'Category Type',
+ 'category_type' => 'Kategorijas veids',
'bank_transaction' => 'Transaction',
'bulk_print' => 'Print PDF',
'vendor_postal_code' => 'Vendor Postal Code',
@@ -4907,7 +4908,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4922,6 +4923,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/mk_MK/texts.php b/lang/mk_MK/texts.php
index 57403832dbe3..b9bebf44176e 100644
--- a/lang/mk_MK/texts.php
+++ b/lang/mk_MK/texts.php
@@ -1,6 +1,6 @@
'Организација',
'name' => 'Име',
'website' => 'Веб Страна',
@@ -203,7 +203,7 @@ $LANG = [
'invoice_error' => 'Ве молиме одберете клиент и поправете можни грешки',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'Има грешка при процесирањето на плаќањето. Ве молиме обидете се повторно подоцна.',
- 'registration_required' => 'Ве молиме најавете се за да пратите фактура по е-пошта',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Ве молиме потврдете ја Вашата адреса за е-пошта, :link за повторно испраќање на е-пошта за потврда.',
'updated_client' => 'Успешно ажурирање на клиент',
'archived_client' => 'Успешно архивирање на клиент',
@@ -1902,6 +1902,7 @@ $LANG = [
'task' => 'Задача',
'contact_name' => 'Име на контакт',
'city_state_postal' => 'Град/Држава/Поштенски број',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'Прилагодено поле',
'account_fields' => 'Поле за компанија',
'facebook_and_twitter' => 'Facebook и Twitter',
@@ -4908,7 +4909,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4923,6 +4924,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/nb_NO/texts.php b/lang/nb_NO/texts.php
index df957da11864..de144c3da280 100644
--- a/lang/nb_NO/texts.php
+++ b/lang/nb_NO/texts.php
@@ -1,6 +1,6 @@
'Organisasjon',
'name' => 'Navn',
'website' => 'Nettside',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Vennligst sørg for å velge en kunde og rette eventuelle feil',
'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.',
'payment_error' => 'Det oppstod en feil under din betaling. Vennligst prøv igjen senere.',
- 'registration_required' => 'Vennligst registrer deg for å sende e-postfaktura',
+ 'registration_required' => 'Registration Required',
'confirmation_required' => 'Vennligst bekreft e-postadressen din, :link for å sende bekreftelses-e-posten på nytt.',
'updated_client' => 'Oppdaterte kunde',
'archived_client' => 'Arkiverte kunde',
@@ -1901,6 +1901,7 @@ $LANG = [
'task' => 'Oppgave',
'contact_name' => 'Kontakt navn',
'city_state_postal' => 'By/Fylke/Postnummer',
+ 'postal_city' => 'Postal/City',
'custom_field' => 'egendefinert felt',
'account_fields' => 'Firma felt',
'facebook_and_twitter' => 'Facebook og Twitter',
@@ -4907,7 +4908,7 @@ $LANG = [
'export_company' => 'Create company backup',
'backup' => 'Backup',
'notification_purchase_order_created_body' => 'The following purchase_order :purchase_order was created for vendor :vendor for :amount.',
- 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
+ 'notification_purchase_order_created_subject' => 'Purchase Order :purchase_order was created for :vendor',
'notification_purchase_order_sent_subject' => 'Purchase Order :purchase_order was sent to :vendor',
'notification_purchase_order_sent' => 'The following vendor :vendor was emailed Purchase Order :purchase_order for :amount.',
'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.',
@@ -4922,6 +4923,38 @@ $LANG = [
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
-];
+ 'danger_zone' => 'Danger Zone',
+ 'import_completed' => 'Import completed',
+ 'client_statement_body' => 'Your statement from :start_date to :end_date is attached.',
+ 'email_queued' => 'Email queued',
+ 'clone_to_recurring_invoice' => 'Clone to Recurring Invoice',
+ 'inventory_threshold' => 'Inventory Threshold',
+ 'emailed_statement' => 'Successfully queued statement to be sent',
+ 'show_email_footer' => 'Show Email Footer',
+ 'invoice_task_hours' => 'Invoice Task Hours',
+ 'invoice_task_hours_help' => 'Add the hours to the invoice line items',
+ 'auto_bill_standard_invoices' => 'Auto Bill Standard Invoices',
+ 'auto_bill_recurring_invoices' => 'Auto Bill Recurring Invoices',
+ 'email_alignment' => 'Email Alignment',
+ 'pdf_preview_location' => 'PDF Preview Location',
+ 'mailgun' => 'Mailgun',
+ 'postmark' => 'Postmark',
+ 'microsoft' => 'Microsoft',
+ 'click_plus_to_create_record' => 'Click + to create a record',
+ 'last365_days' => 'Last 365 Days',
+ 'import_design' => 'Import Design',
+ 'imported_design' => 'Successfully imported design',
+ 'invalid_design' => 'The design is invalid, the :value section is missing',
+ 'setup_wizard_logo' => 'Would you like to upload your logo?',
+ 'installed_version' => 'Installed Version',
+ 'notify_vendor_when_paid' => 'Notify Vendor When Paid',
+ 'notify_vendor_when_paid_help' => 'Send an email to the vendor when the expense is marked as paid',
+ 'update_payment' => 'Update Payment',
+ 'markup' => 'Markup',
+ 'unlock_pro' => 'Unlock Pro',
+);
+
return $LANG;
+
+?>
diff --git a/lang/nl/texts.php b/lang/nl/texts.php
index be0baa4481e7..437cb05ab3e0 100644
--- a/lang/nl/texts.php
+++ b/lang/nl/texts.php
@@ -1,6 +1,6 @@
'Organisatie',
'name' => 'Naam',
'website' => 'Website',
@@ -34,7 +34,7 @@ $LANG = [
'frequency_id' => 'Frequentie',
'discount' => 'Korting',
'taxes' => 'Belastingen',
- 'tax' => 'Belasting',
+ 'tax' => 'Belastingtarief',
'item' => 'Artikel',
'description' => 'Omschrijving',
'unit_cost' => 'Eenheidsprijs',
@@ -202,7 +202,7 @@ $LANG = [
'invoice_error' => 'Selecteer een klant alsjeblieft en verbeter eventuele fouten',
'limit_clients' => 'Sorry, deze actie zal de limiet van :count klanten overschrijden. Kies een betaalde plan alstublieft.',
'payment_error' => 'Er was een fout bij het verwerken van de betaling. Probeer het later alsjeblieft opnieuw.',
- 'registration_required' => 'Meld u aan om een factuur te mailen',
+ 'registration_required' => 'Registratie verplicht',
'confirmation_required' => 'Bevestig het e-mailadres, :link om de bevestigingsmail opnieuw te ontvangen.',
'updated_client' => 'De klant is bijgewerkt',
'archived_client' => 'De klant is gearchiveerd',
@@ -732,8 +732,8 @@ $LANG = [
'create_tax_rate' => 'Voeg een tarief toe',
'updated_tax_rate' => 'Het tarief is bijgewerkt',
'created_tax_rate' => 'Het tarief is aangemaakt',
- 'edit_tax_rate' => 'Bewerk tarief',
- 'archive_tax_rate' => 'Archiveer tarief',
+ 'edit_tax_rate' => 'Bewerk belastingtarief',
+ 'archive_tax_rate' => 'Archiveer belastingtarief',
'archived_tax_rate' => 'Het tarief is gearchiveerd',
'default_tax_rate_id' => 'Standaard BTW-tarief',
'tax_rate' => 'BTW-tarief',
@@ -1892,6 +1892,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'task' => 'Taak',
'contact_name' => 'Contactnaam',
'city_state_postal' => 'Stad/Provincie/Postcode',
+ 'postal_city' => 'Postcode/Stad',
'custom_field' => 'Aangepast veld',
'account_fields' => 'Velden bedrijf',
'facebook_and_twitter' => 'Facebook en Twitter',
@@ -3370,7 +3371,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'comma_sparated_list' => 'Komma gescheiden lijst',
'single_line_text' => 'Eenregelige tekst',
'multi_line_text' => 'Multi-regelige tekst',
- 'dropdown' => 'Dropdwon',
+ 'dropdown' => 'Dropdown',
'field_type' => 'Veld type',
'recover_password_email_sent' => 'Een wachtwoord herstel mail is verzonden',
'removed_user' => 'Gebruiker verwijderd',
@@ -4284,7 +4285,7 @@ Email: :emailb)n.HX(b,0)
s=n.gG(n)
o=a.b
@@ -25181,7 +25181,7 @@ cOk:function cOk(a){this.a=a},
cOi:function cOi(a){this.a=a},
aal:function aal(a){this.a=a},
aR6:function aR6(a){var _=this
-_.ag$=0
+_.ah$=0
_.aj$=a
_.b0$=_.bc$=0
_.aU$=!1},
@@ -25198,7 +25198,7 @@ nf(a,b,c,d,e){return new A.VK(d,b,e,a,c)},
uj(a,b,c){return new A.a7x(c,b,a,null)},
akB(a,b,c){return new A.aJK(a,c,b,null)},
eGF(a,b,c){return new A.a7v(c,b,a,null)},
-feZ(a,b){return new A.ez(new A.bx8(b,B.cI,a),null)},
+feZ(a,b){return new A.ez(new A.bx8(b,B.cJ,a),null)},
eS9(a,b,c,d,e,f){return new A.aX7(c,b,e,d,f,a,null)},
SJ(a,b,c,d){return new A.a2U(c,a,d,null,b,null)},
b2x(a,b,c,d){return new A.a2U(A.fom(b),a,!0,d,c,null)},
@@ -25501,7 +25501,7 @@ _.y=f
_.z=g
_.c=h
_.a=i},
-f8:function f8(a,b,c,d){var _=this
+f9:function f9(a,b,c,d){var _=this
_.f=a
_.r=b
_.b=c
@@ -25898,7 +25898,7 @@ _.y=a
_.a=b
_.b=c
_.d=d
-_.ag$=0
+_.ah$=0
_.aj$=e
_.b0$=_.bc$=0
_.aU$=!1},
@@ -25925,7 +25925,7 @@ _.cx=!1
_.db=_.cy=null
_.dx=h
_.dy=null
-_.ag$=0
+_.ah$=0
_.aj$=i
_.b0$=_.bc$=0
_.aU$=!1},
@@ -25969,7 +25969,7 @@ s.b=!1
return new A.e2j(s,A.by("arg"),!1,b,a,c)},
aq:function aq(a,b){var _=this
_.a=a
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -26292,7 +26292,7 @@ _.Q=null
_.as=g
_.ax=_.at=null
_.ay=!1
-_.ag$=0
+_.ah$=0
_.aj$=h
_.b0$=_.bc$=0
_.aU$=!1},
@@ -26312,7 +26312,7 @@ _.Q=null
_.as=h
_.ax=_.at=null
_.ay=!1
-_.ag$=0
+_.ah$=0
_.aj$=i
_.b0$=_.bc$=0
_.aU$=!1},
@@ -26329,7 +26329,7 @@ _.r=c
_.w=null
_.x=d
_.y=!1
-_.ag$=0
+_.ah$=0
_.aj$=e
_.b0$=_.bc$=0
_.aU$=!1},
@@ -27159,7 +27159,7 @@ bT0(a,b,c){var s,r,q=c.a,p=b.a,o=Math.pow(q[0]-p[0],2)+Math.pow(q[1]-p[1],2)
if(o===0)return b
s=a.bd(0,b)
r=c.bd(0,b)
-return b.ah(0,r.u3(A.b6(s.C2(r)/o,0,1)))},
+return b.ag(0,r.u3(A.b6(s.C2(r)/o,0,1)))},
fia(a,b){var s,r,q,p,o,n,m,l=b.a,k=a.bd(0,l),j=b.b,i=j.bd(0,l),h=b.d,g=h.bd(0,l),f=k.C2(i),e=i.C2(i),d=k.C2(g),c=g.C2(g)
if(0<=f&&f<=e&&0<=d&&d<=c)return a
s=b.c
@@ -27243,7 +27243,7 @@ _.r=e
_.a=f},
b2A:function b2A(a,b){var _=this
_.a=a
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -27648,7 +27648,7 @@ bbS:function bbS(a){var _=this
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=a
_.b0$=_.bc$=0
_.aU$=!1},
@@ -27696,7 +27696,7 @@ _.aB=c
_.aP=d
_.b6=e
_.bA=f
-_.ag=g
+_.ah=g
_.cM$=h
_.aO$=i
_.e7$=j
@@ -27882,7 +27882,7 @@ _.as=_.Q=0.5
_.at=0
_.ax=d
_.ay=e
-_.ag$=0
+_.ah$=0
_.aj$=f
_.b0$=_.bc$=0
_.aU$=!1},
@@ -27915,7 +27915,7 @@ aDe:function aDe(a,b,c){var _=this
_.b=_.a=$
_.c=a
_.d=b
-_.ag$=_.e=0
+_.ah$=_.e=0
_.aj$=c
_.b0$=_.bc$=0
_.aU$=!1},
@@ -27943,7 +27943,7 @@ _.Q=b
_.a=c
_.b=d
_.d=e
-_.ag$=0
+_.ah$=0
_.aj$=f
_.b0$=_.bc$=0
_.aU$=!1},
@@ -27976,7 +27976,7 @@ _.cx=!1
_.db=_.cy=null
_.dx=h
_.dy=null
-_.ag$=0
+_.ah$=0
_.aj$=i
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28244,7 +28244,7 @@ _.CW=a
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1
@@ -28254,7 +28254,7 @@ _.CW=a
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28263,7 +28263,7 @@ _.CW=a
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28272,7 +28272,7 @@ _.CW=a
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28281,7 +28281,7 @@ _.CW=a
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28292,7 +28292,7 @@ _.go=a
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28346,7 +28346,7 @@ bgd:function bgd(a){var _=this
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=a
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28537,7 +28537,7 @@ ps:function ps(a,b,c,d){var _=this
_.a=a
_.b=b
_.d=c
-_.ag$=0
+_.ah$=0
_.aj$=d
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28652,7 +28652,7 @@ _.cx=!1
_.db=_.cy=null
_.dx=f
_.dy=null
-_.ag$=0
+_.ah$=0
_.aj$=g
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28877,7 +28877,7 @@ _.w=_.r=_.f=_.e=null
_.z=_.y=_.x=!1
_.Q=g
_.as=h
-_.ag$=0
+_.ah$=0
_.aj$=i
_.b0$=_.bc$=0
_.aU$=!1
@@ -28935,7 +28935,7 @@ bge:function bge(a){var _=this
_.x=null
_.a=!1
_.c=_.b=null
-_.ag$=0
+_.ah$=0
_.aj$=a
_.b0$=_.bc$=0
_.aU$=!1},
@@ -28967,7 +28967,7 @@ _.ax=n
_.ay=!1
_.cy=_.cx=_.CW=_.ch=null
_.db=$
-_.ag$=0
+_.ah$=0
_.aj$=o
_.b0$=_.bc$=0
_.aU$=!1},
@@ -29134,7 +29134,7 @@ this.b=b},
aeC:function aeC(a,b){var _=this
_.b=a
_.c=null
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -29152,7 +29152,7 @@ _.b=a
_.c=null},
b0e:function b0e(a,b){var _=this
_.a=a
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1},
@@ -31533,7 +31533,7 @@ _.as=f
_.at=!1},
aE3:function aE3(a,b,c){var _=this
_.a=a
-_.ag$=0
+_.ah$=0
_.aj$=b
_.b0$=_.bc$=0
_.aU$=!1
@@ -32314,7 +32314,7 @@ bR4:function bR4(a){this.a=a},
fBM(a,b){var s,r,q=a.a
if(q!==b.a)return!1
if(q===0)return!0
-for(q=A.f9(a,a.r,A.E(a).c);q.v();){s=q.d
+for(q=A.fa(a,a.r,A.E(a).c);q.v();){s=q.d
r=b.h(0,s)
if(r==null&&!b.az(0,s))return!1
if(!J.m(a.h(0,s),r))return!1}return!0},
@@ -33047,7 +33047,7 @@ $.aa2.b=$.aGd()
$.aQk.b=new A.duU(new A.tv(new A.bSm(),new A.bSn(),t.hb),B.Fh)
s=$.aa2.cW()
s.b=$.aQk.cW()
-B.cE.py(s.gbmN())},
+B.cF.py(s.gbmN())},
bSk:function bSk(a){this.a=a},
bSm:function bSm(){},
bSn:function bSn(){},
@@ -33070,7 +33070,7 @@ cmC:function cmC(){},
cmv(){var s=0,r=A.N(t.y),q,p
var $async$cmv=A.J(function(a,b){if(a===1)return A.K(b,r)
while(true)switch(s){case 0:s=3
-return A.O(B.cE.f1("-[SKPaymentQueue canMakePayments:]",null,!1,t.y),$async$cmv)
+return A.O(B.cF.f1("-[SKPaymentQueue canMakePayments:]",null,!1,t.y),$async$cmv)
case 3:p=b
q=p==null?!1:p
s=1
@@ -34358,7 +34358,7 @@ _.aB=e0
_.aP=e1
_.b6=e2
_.bA=e3
-_.ag=e4
+_.ah=e4
_.aj=e5
_.bc=e6
_.b0=e7
@@ -34408,7 +34408,7 @@ _.jy=null},
kI:function kI(){var _=this
_.k2=_.k1=_.id=_.go=_.fy=_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=null
_.aB=_.aL=_.a3=_.cY=_.cK=_.bM=_.bJ=_.aR=_.bv=_.b5=_.bu=_.ar=_.bj=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=null
-_.aS=_.a8=_.hp=_.h2=_.hy=_.fI=_.fH=_.hk=_.hj=_.eU=_.bB=_.fz=_.eY=_.fi=_.e9=_.ai=_.aW=_.dh=_.e8=_.V=_.ej=_.dT=_.aU=_.b0=_.bc=_.aj=_.ag=_.bA=_.b6=_.aP=null
+_.aS=_.a8=_.hp=_.h2=_.hy=_.fI=_.fH=_.hk=_.hj=_.eU=_.bB=_.fz=_.eY=_.fi=_.e9=_.ai=_.aW=_.dh=_.e8=_.V=_.ej=_.dT=_.aU=_.b0=_.bc=_.aj=_.ah=_.bA=_.b6=_.aP=null
_.jy=_.b7=_.ee=_.h9=_.aT=_.e1=_.e7=_.aO=_.cM=_.hx=_.fs=_.hD=_.fq=_.bq=_.fJ=_.h3=_.fc=_.dZ=_.bN=_.bh=null},
avD:function avD(a,b,c,d,e,f,g,h,i){var _=this
_.a=a
@@ -35304,7 +35304,7 @@ _.aB=e0
_.aP=e1
_.b6=e2
_.bA=e3
-_.ag=e4
+_.ah=e4
_.aj=e5
_.bc=e6
_.b0=e7
@@ -35320,7 +35320,7 @@ _.e9=null},
iQ:function iQ(){var _=this
_.k2=_.k1=_.id=_.go=_.fy=_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=null
_.aB=_.aL=_.a3=_.cY=_.cK=_.bM=_.bJ=_.aR=_.bv=_.b5=_.bu=_.ar=_.bj=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=null
-_.e9=_.ai=_.aW=_.dh=_.e8=_.V=_.ej=_.dT=_.aU=_.b0=_.bc=_.aj=_.ag=_.bA=_.b6=_.aP=null},
+_.e9=_.ai=_.aW=_.dh=_.e8=_.V=_.ej=_.dT=_.aU=_.b0=_.bc=_.aj=_.ah=_.bA=_.b6=_.aP=null},
avT:function avT(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,a0){var _=this
_.a=a
_.b=b
@@ -36104,7 +36104,7 @@ _.aB=e0
_.aP=e1
_.b6=e2
_.bA=e3
-_.ag=e4
+_.ah=e4
_.aj=e5
_.bc=e6
_.b0=e7
@@ -36254,7 +36254,7 @@ _.Ca=null},
mS:function mS(){var _=this
_.k2=_.k1=_.id=_.go=_.fy=_.fx=_.fr=_.dy=_.dx=_.db=_.cy=_.cx=_.CW=_.ch=_.ay=_.ax=_.at=_.as=_.Q=_.z=_.y=_.x=_.w=_.r=_.f=_.e=_.d=_.c=_.b=_.a=null
_.aB=_.aL=_.a3=_.cY=_.cK=_.bM=_.bJ=_.aR=_.bv=_.b5=_.bu=_.ar=_.bj=_.y2=_.y1=_.xr=_.x2=_.x1=_.to=_.ry=_.rx=_.RG=_.R8=_.p4=_.p3=_.p2=_.p1=_.ok=_.k4=_.k3=null
-_.aS=_.a8=_.hp=_.h2=_.hy=_.fI=_.fH=_.hk=_.hj=_.eU=_.bB=_.fz=_.eY=_.fi=_.e9=_.ai=_.aW=_.dh=_.e8=_.V=_.ej=_.dT=_.aU=_.b0=_.bc=_.aj=_.ag=_.bA=_.b6=_.aP=null
+_.aS=_.a8=_.hp=_.h2=_.hy=_.fI=_.fH=_.hk=_.hj=_.eU=_.bB=_.fz=_.eY=_.fi=_.e9=_.ai=_.aW=_.dh=_.e8=_.V=_.ej=_.dT=_.aU=_.b0=_.bc=_.aj=_.ah=_.bA=_.b6=_.aP=null
_.fn=_.fm=_.hi=_.f7=_.iF=_.fS=_.cO=_.lL=_.pf=_.lK=_.jy=_.b7=_.ee=_.h9=_.aT=_.e1=_.e7=_.aO=_.cM=_.hx=_.fs=_.hD=_.fq=_.bq=_.fJ=_.h3=_.fc=_.dZ=_.bN=_.bh=null
_.ta=_.t9=_.t8=_.t7=_.uN=_.uM=_.uL=_.uK=_.t6=_.qV=_.lM=_.qU=_.qT=_.qS=_.pV=_.qR=_.ot=_.pg=_.kb=_.kK=_.mx=_.hM=_.jz=_.i1=_.f8=_.dY=_.al=_.bt=_.ho=_.eX=null
_.pY=_.nu=_.ph=_.lj=_.li=_.ks=_.mh=_.lO=_.pX=_.pW=_.hT=_.n1=_.nX=_.tj=_.ti=_.lN=_.kr=_.th=_.tg=_.uP=_.uO=_.tf=_.te=_.td=_.ov=_.n0=_.ou=_.n_=_.tc=_.tb=null
@@ -37200,7 +37200,7 @@ cHp:function cHp(){},
blx(a,b,c,d,e){var s,r
if(B.c.cw(a,"https://invoicing.co"))e=""
s=t.X
-r=A.u(["X-CLIENT-VERSION","5.0.107","X-API-SECRET",e,"X-Requested-With","XMLHttpRequest","Content-Type","application/json; charset=utf-8"],s,s)
+r=A.u(["X-CLIENT-VERSION","5.0.108","X-API-SECRET",e,"X-Requested-With","XMLHttpRequest","Content-Type","application/json; charset=utf-8"],s,s)
if(b.length!==0)r.u(0,"X-API-Token",b)
if((c==null?"":c).length!==0)r.u(0,"X-API-OAUTH-PASSWORD",c)
if((d==null?"":d).length!==0){s=B.aH.gka().eB(d)
@@ -37208,8 +37208,8 @@ r.u(0,"X-API-PASSWORD-BASE64",B.iG.gka().eB(s))}return r},
dF7(a,b){var s=b.e,r=s.h(0,"x-app-version"),q=s.h(0,"x-minimum-client-version"),p=b.b
if(p>=500)throw A.j(A.eYh(p,b.ghR(b)))
else if(r==null){p=b.ghR(b).length>200?B.c.aX(b.ghR(b),0,200):b.ghR(b)
-throw A.j("Error: please check that Invoice Ninja v5 is installed on the server\n\nURL: "+a+"\n\nResponse: "+p+"\n\nHeaders: "+s.k(0)+"}")}else{s=A.auw(A.aux("5.0.107"),A.aux(q))
-if(s<0)throw A.j("Error: client not supported, please update to the latest version [Current v5.0.107 < Minimum v"+A.k(q)+"]")
+throw A.j("Error: please check that Invoice Ninja v5 is installed on the server\n\nURL: "+a+"\n\nResponse: "+p+"\n\nHeaders: "+s.k(0)+"}")}else{s=A.auw(A.aux("5.0.108"),A.aux(q))
+if(s<0)throw A.j("Error: client not supported, please update to the latest version [Current v5.0.108 < Minimum v"+A.k(q)+"]")
else{s=A.auw(A.aux(r),A.aux("5.0.4"))
if(s<0)throw A.j("Error: server not supported, please update to the latest version [Current v"+r+" < Minimum v5.0.4]")
else if(p>=400)throw A.j(A.eYh(p,b.ghR(b)))}}},
@@ -37220,7 +37220,7 @@ try{s=B.G.fw(0,b)
p=J.d(s,"message")
if(p==null)p=s
l.a=p
-if(J.d(s,n)!=null&&J.jh(t.bO.a(J.d(s,n)))){l.a=J.fc(p,"\n")
+if(J.d(s,n)!=null&&J.jh(t.bO.a(J.d(s,n)))){l.a=J.f7(p,"\n")
try{J.ig(J.d(s,n),new A.dTa(l))}catch(o){r=A.am(o)
A.ao(m+A.k(r))}}}catch(o){q=A.am(o)
A.ao(m+A.k(q))}return A.k(a)+": "+A.k(l.a)},
@@ -42028,7 +42028,7 @@ m=q.bw("product3")
l=q.bw("product4")
k=t.X
j=A.u([q.bw("expense1"),b.go,q.bw("expense2"),b.id,q.bw("expense3"),b.k1,q.bw("expense4"),b.k2,r.gFb(),s[g].db.aw(0,b.x).a,r.gjH(r),s[g].w.aw(0,b.fr).b,r.gkV(),A.cj(b.z,a,!0,!0,!1),r.gmE(),s[g].y.aw(0,b.fx).a],k,k)
-for(g=A.f9(j,j.r,A.E(j).c);g.v();){s=g.d
+for(g=A.fa(j,j.r,A.E(j).c);g.v();){s=g.d
i=j.h(0,s)
if(o.toLowerCase()===s.toLowerCase())h.d=i
else if(n.toLowerCase()===s.toLowerCase())h.c=i
@@ -45500,7 +45500,7 @@ fso(a,b){return a.p(new A.dC7(A.ff(b.a,new A.dC8(),new A.dC9(),t.X,t.R)))},
frv(a,b){return a.p(new A.dB6(b))},
fIQ(a,b){return a.p(new A.e2O(b.gnC()))},
fFZ(a,b){return a.awl(b.a)},
-fFg(a,b){return a.awl(b.a.f.ag)},
+fFg(a,b){return a.awl(b.a.f.ah)},
esh:function esh(a,b){this.a=a
this.b=b},
efm:function efm(){},
@@ -48599,7 +48599,7 @@ a=J.d(b.h(0,r.a),"hour")
a0=" \u2022 1 "+A.k(a==null?J.d(b.h(0,"en"),"hour"):a)}else{r.toString
b=J.d($.w().h(0,r.a),"hours")
if(b==null)b=""
-a0=" \u2022 "+A.k(c)+" "+b}f.push(J.fc(d,a0))}else f.push(d)}j=m.p1
+a0=" \u2022 "+A.k(c)+" "+b}f.push(J.f7(d,a0))}else f.push(d)}j=m.p1
i=a7.a
if(j)a7.a=i+B.a.by(f," 0){r.aj$[s]=null;++r.b0$}else r.b8c(s)
+for(s=0;s *()","l(A)","pS*(v*)","l*(o5*)","U(v*,l*)","U(@,@)","eQ*(c*)","l*(jD*)","b_*()","b_(b_,b_)","U(aA*)","~(Ea)","b_(az,b_)","bm<@>(DY)","ca*(c*)","ui*(ui*)","~(ab0)","~(c?)","a3?(eO
\n")
else a7.a=i+B.a.by(f,"\n")}j=a7.a+="\n"
@@ -48609,7 +48609,7 @@ a2=m.bw("task2")
a3=m.bw("task3")
a4=m.bw("task4")
a5=A.u([m.bw("task1"),b1.w,m.bw("task2"),b1.x,m.bw("task3"),b1.y,m.bw("task4"),b1.z,r.gmE(),s[a8].y.aw(0,q).a],l,l)
-for(a8=A.f9(a5,a5.r,A.E(a5).c);a8.v();){s=a8.d
+for(a8=A.fa(a5,a5.r,A.E(a5).c);a8.v();){s=a8.d
a6=a5.h(0,s)
if(a1.toLowerCase()===s.toLowerCase())a7.e=a6
else if(a2.toLowerCase()===s.toLowerCase())a7.d=a6
@@ -53688,7 +53688,7 @@ _.y=e
_.z=f
_.Q=g
_.as=h
-_.ag$=0
+_.ah$=0
_.aj$=i
_.b0$=_.bc$=0
_.aU$=!1},
@@ -58387,9 +58387,9 @@ case 7:j=f
case 4:if(j.b>=400){p=A.k(j.b)+": "+A.k(j.c)+"\n\n"
try{o=p
l=j
-p=J.fc(o,J.d(B.G.pe(0,A.zM(J.d(A.zI(l.e).c.a,"charset")).fw(0,l.w),null),"message"))}catch(i){o=p
+p=J.f7(o,J.d(B.G.pe(0,A.zM(J.d(A.zI(l.e).c.a,"charset")).fw(0,l.w),null),"message"))}catch(i){o=p
l=j
-p=J.fc(o,A.zM(J.d(A.zI(l.e).c.a,"charset")).fw(0,l.w))}A.fU(!1,a,p)
+p=J.f7(o,A.zM(J.d(A.zI(l.e).c.a,"charset")).fw(0,l.w))}A.fU(!1,a,p)
throw A.j(p)}q=j
s=1
break
@@ -60973,7 +60973,7 @@ r=f8.e.a
q=t.Hm
if(r.length!==0){r=new A.z(r,new A.e5U(),A.P(r).i("z<1,dZ*>")).fv(0,new A.e5V())
p=A.bc(A.B(r,!0,r.$ti.i("G.E")),q)}else p=A.bc(s,q)
-for(r=g1.gbr(g1),q=r.a,r=A.f9(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=f9.f,l=t.lk,k=g1.b;r.v();){j=k.h(0,r.d)
+for(r=g1.gbr(g1),q=r.a,r=A.fa(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=f9.f,l=t.lk,k=g1.b;r.v();){j=k.h(0,r.d)
i=j.gj8()
h=j.y1
if(h&&!m.R8)continue
@@ -61150,7 +61150,7 @@ r=f8.e.a
q=t.jd
if(r.length!==0){r=new A.z(r,new A.e6s(),A.P(r).i("z<1,e8*>")).fv(0,new A.e6t())
p=A.bc(A.B(r,!0,r.$ti.i("G.E")),q)}else p=A.bc(s,q)
-for(r=g1.gbr(g1),q=r.a,r=A.f9(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=f9.f,l=t.lk,k=g1.b;r.v();){j=k.h(0,r.d)
+for(r=g1.gbr(g1),q=r.a,r=A.fa(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=f9.f,l=t.lk,k=g1.b;r.v();){j=k.h(0,r.d)
i=j.y1
if(i&&!m.R8)continue
for(h=j.p3.a,h=new J.bH(h,h.length,A.P(h).i("bH<1>")),g=j.ar,f=j.x1,e=j.x2,d=j.xr>0,c=!i,b=j.r,a=j.f,a0=j.e,a1=a0+b,i=j.y2,a2=j.bj,a3=j.db,a4=j.dx,a5=j.dy,a6=j.ax,a7=j.k1,a8=j.id,a9=j.go,b0=j.fy,b1=j.fx,b2=j.fr,b3=j.at,b4=j.as,b5=j.Q,b6=j.z,b7=j.y,b8=j.x,b9=j.p2,c0=j.p1,c1=j.ok,c2=j.k4,c3=j.cy,c4=j.cx,c5=j.ch,c6=j.ay,c7=j.k2,c8=j.CW,c9=j.d,f*=1000,e*=1000;h.v();){d0=h.d
@@ -61321,7 +61321,7 @@ r=g2.e.a
q=t.XV
if(r.length!==0){r=new A.z(r,new A.e6V(),A.P(r).i("z<1,dn*>")).fv(0,new A.e6W())
p=A.bc(A.B(r,!0,r.$ti.i("G.E")),q)}else p=A.bc(s,q)
-for(r=g5.gbr(g5),q=r.a,r=A.f9(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=g3.f,l=t.lk,k=g5.b;r.v();){j=k.h(0,r.d)
+for(r=g5.gbr(g5),q=r.a,r=A.fa(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=g3.f,l=t.lk,k=g5.b;r.v();){j=k.h(0,r.d)
i=j.e
h=g6.b.h(0,i)
if(h==null)h=A.dd(f7,f7,f7,f7)
@@ -61580,7 +61580,7 @@ d4=d6.e.a
s=t.L4
if(d4.length!==0){d4=new A.z(d4,new A.ecs(),A.P(d4).i("z<1,fl*>")).fv(0,new A.ect())
r=A.bc(A.B(d4,!0,d4.$ti.i("G.E")),s)}else r=A.bc(d7,s)
-for(d4=e0.gbr(e0),s=d4.a,d4=A.f9(s,s.r,A.E(d4).c),s=r.a,q=A.P(s),p=q.i("bH<1>"),o=d8.f,n=t.lk,m=e0.b;d4.v();){l=m.h(0,d4.d)
+for(d4=e0.gbr(e0),s=d4.a,d4=A.fa(s,s.r,A.E(d4).c),s=r.a,q=A.P(s),p=q.i("bH<1>"),o=d8.f,n=t.lk,m=e0.b;d4.v();){l=m.h(0,d4.d)
k=l.dx
j=e3.b.h(0,k)
if(j==null)j=A.dd(d1,d1,d1,d1)
@@ -61819,7 +61819,7 @@ r=h3.e.a
q=t.Gb
if(r.length!==0){r=new A.z(r,new A.elZ(),A.P(r).i("z<1,cR*>")).fv(0,new A.em_())
p=A.bc(A.B(r,!0,r.$ti.i("G.E")),q)}else p=A.bc(s,q)
-for(r=h6.gbr(h6),q=r.a,r=A.f9(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=h4.f,l=t.lk,k=h6.b;r.v();){j=k.h(0,r.d)
+for(r=h6.gbr(h6),q=r.a,r=A.fa(q,q.r,A.E(r).c),q=p.a,o=A.P(q),n=o.i("bH<1>"),m=h4.f,l=t.lk,k=h6.b;r.v();){j=k.h(0,r.d)
i=j.e
h=h7.b.h(0,i)
if(h==null)h=A.dd(g8,g8,g8,g8)
@@ -62055,7 +62055,7 @@ b6=b8.e.a
s=t.YG
if(b6.length!==0){b6=new A.z(b6,new A.eDc(),A.P(b6).i("z<1,lf*>")).fv(0,new A.eDd())
r=A.bc(A.B(b6,!0,b6.$ti.i("G.E")),s)}else r=A.bc(b9,s)
-for(b6=c3.gbr(c3),s=b6.a,b6=A.f9(s,s.r,A.E(b6).c),s=c0.f,q=c3.b,p=r.a,o=A.P(p),n=o.i("bH<1>"),m=t.lk;b6.v();){l=q.h(0,b6.d)
+for(b6=c3.gbr(c3),s=b6.a,b6=A.fa(s,s.r,A.E(b6).c),s=c0.f,q=c3.b,p=r.a,o=A.P(p),n=o.i("bH<1>"),m=t.lk;b6.v();){l=q.h(0,b6.d)
if(!s.p4&&l.y==="1")continue
if(!l.V&&l.y!=="1"){k=l.e
j=c5.b.h(0,k)
@@ -62101,7 +62101,7 @@ default:b0=""}if(!A.lS(A.cS(a9),b3,c1,c0,b0))a8=!0
a9=J.f5(b0)
if(a9.gbL(b0)===B.bU)a4.push(new A.ks(b0,d,e))
else if(a9.gbL(b0)===B.bY||a9.gbL(b0)===B.bZ)a4.push(new A.iS(b0,b3,i,b3,d,e))
-else a4.push(new A.kt(b0,d,e))}if(!a8)b5.push(a4)}}}for(b6=c4.gbr(c4),s=b6.a,b6=A.f9(s,s.r,A.E(b6).c),s=c4.b;b6.v();){b2=s.h(0,b6.d)
+else a4.push(new A.kt(b0,d,e))}if(!a8)b5.push(a4)}}}for(b6=c4.gbr(c4),s=b6.a,b6=A.fa(s,s.r,A.E(b6).c),s=c4.b;b6.v();){b2=s.h(0,b6.d)
if(!b2.V&&b2.y!=="1"){q=b2.e
j=c5.b.h(0,q)
if(j==null)j=A.dd(b3,q,b3,b3)
@@ -62174,7 +62174,7 @@ s=t.f
q=A.a5(d4,s)
p=A.a5(d4,s)
d4=r.a
-if(B.a.C(d4,B.zi))for(s=e0.gbr(e0),o=s.a,s=A.f9(o,o.r,A.E(s).c),o=d8.f,n=t.i,m=e0.b;s.v();){l=m.h(0,s.d)
+if(B.a.C(d4,B.zi))for(s=e0.gbr(e0),o=s.a,s=A.fa(o,o.r,A.E(s).c),o=d8.f,n=t.i,m=e0.b;s.v();){l=m.h(0,s.d)
if(l==null)l=A.rG(d1,d1,d1)
k=l.RG
q.u(0,k,A.a([],n))
@@ -62183,7 +62183,7 @@ for(j=l.gzK(),i=j.length,h=0;h"))},
-ah(a,b){var s=A.B(a,!0,A.fI(a).i("bA.E"))
+ag(a,b){var s=A.B(a,!0,A.fI(a).i("bA.E"))
B.a.I(s,b)
return s},
c1(a,b,c){var s=this.gL(a)
@@ -93235,7 +93235,7 @@ r=new Uint16Array(o)
A.b8b(p.b,o,a.b,s,r)
q=A.zz(o,r)
return new A.oJ(q===0?!1:b,r,q)},
-ah(a,b){var s,r,q=this,p=q.c
+ag(a,b){var s,r,q=this,p=q.c
if(p===0)return b
s=b.c
if(s===0)return q
@@ -93439,7 +93439,7 @@ for(s=a.length,r=0,q=0;q<6;++q){r*=10
if(qb)throw A.j(A.cQ("removeAttribution() did not satisfy start < 0 and start > end, start: "+j+", end: "+i))
-if(!m.a6U(A.fa([a],t.Qc),b,c)){k.U(B.x,"No such attribution exists in the given span range",l,l)
+if(!m.a6U(A.fb([a],t.Qc),b,c)){k.U(B.x,"No such attribution exists in the given span range",l,l)
return}s=A.cb(t.UT)
r=c-1
if(m.Cg(r,a))if(m.aie(a,r,B.dM).a===0){k.U(B.aN,'Creating a new "end" marker to appear before the removal range at '+r,l,l)
@@ -98466,7 +98466,7 @@ E(a){var s,r,q,p,o=this,n=null,m=A.a([],t.p),l=o.a
l.toString
A.br(255,255,255,255)
m.push(A.kN(n,A.aV(n,A.aH(l.c,B.p,B.ca,B.m,n),B.q,l.r,n,n,n,n,n,n,n,n,n,n),B.ai,!1,n,n,n,n,n,n,n,new A.brJ(o,a),n,n,n,n,n,n,n,n,new A.brK(o),new A.brL(),new A.brM(o,a),n,n,n,n))
-m.push(A.aV(n,new A.f8(1,B.aT,A.aog(o.e,new A.brN(o),o.a.e.length,n,new A.UY(n),n,B.ab,!0),n),B.q,n,n,n,n,n,n,n,n,n,n,n))
+m.push(A.aV(n,new A.f9(1,B.aT,A.aog(o.e,new A.brN(o),o.a.e.length,n,new A.UY(n),n,B.ab,!0),n),B.q,n,n,n,n,n,n,n,n,n,n,n))
m.push(o.a.d)
s=A.br(255,255,255,255)
l=o.a
@@ -99219,7 +99219,7 @@ A.brP.prototype={}
A.bz.prototype={
gL(a){return J.bN(this.c)},
h(a,b){return J.d(this.c,b)},
-ah(a,b){return J.fc(this.c,b)},
+ag(a,b){return J.f7(this.c,b)},
ff(a,b){return J.fcB(this.c,b)},
a3E(a){return J.eO1(this.c)},
rV(a,b){return new A.bz(!0,J.k3(this.c,b),b.i("bz<0>"))},
@@ -99381,7 +99381,7 @@ for(q=0;q!==r.length;++q)if(!J.m(s[q],r[q]))return!1
return!0},
k(a){return A.XP(this.a,"[","]")},
h(a,b){return this.a[b]},
-ah(a,b){return new A.bb(B.a.ah(this.a,b.a),this.$ti.i("bb<1>"))},
+ag(a,b){return new A.bb(B.a.ag(this.a,b.a),this.$ti.i("bb<1>"))},
gL(a){return this.a.length},
gb2(a){var s=this.a
return new J.bH(s,s.length,A.P(s).i("bH<1>"))},
@@ -99473,7 +99473,7 @@ s=b.a
r=k.a
if(s.a!==r.a)return!1
if(b.gq(b)!=k.gq(k))return!1
-for(q=k.gbr(k),p=q.a,q=A.f9(p,p.r,A.E(q).c),p=b.b,o=k.b;q.v();){n=q.d
+for(q=k.gbr(k),p=q.a,q=A.fa(p,p.r,A.E(q).c),p=b.b,o=k.b;q.v();){n=q.d
m=s.h(0,n)
l=m==null?p:m
m=r.h(0,n)
@@ -99510,7 +99510,7 @@ A.Y5.prototype={
t(){var s,r,q,p,o=this,n=o.b
if(n==null){n=o.c
n===$&&A.b()
-n=A.f9(n,n.r,A.E(n).c)
+n=A.fa(n,n.r,A.E(n).c)
for(;n.v();){s=n.d
r=o.c.h(0,s)
q=r.b
@@ -99597,7 +99597,7 @@ s=b.b
r=n.b
if(s.a!==r.a)return!1
if(b.gq(b)!=n.gq(n))return!1
-for(q=n.gbr(n),p=q.a,q=A.f9(p,p.r,A.E(q).c);q.v();){o=q.d
+for(q=n.gbr(n),p=q.a,q=A.fa(p,p.r,A.E(q).c);q.v();){o=q.d
if(!J.m(s.h(0,o),r.h(0,o)))return!1}return!0},
k(a){return A.Ij(this.b)},
h(a,b){return this.b.h(0,b)},
@@ -99677,7 +99677,7 @@ if(a==null)throw A.j(A.aN("null key",null))},
aRD(a){var s
if($.b5())return
if(this.$ti.c.b(null))return
-for(s=a.a,s=A.f9(s,s.r,a.$ti.c);s.v();)this.c4(s.d)},
+for(s=a.a,s=A.fa(s,s.r,a.$ti.c);s.v();)this.c4(s.d)},
c5(a){if($.b5())return
if(this.$ti.z[1].b(null))return
if(a==null)throw A.j(A.aN("null value",null))},
@@ -99797,7 +99797,7 @@ s=b.a
r=k.a
if(s.a!==r.a)return!1
if(b.gq(b)!=k.gq(k))return!1
-for(q=k.gbr(k),p=q.a,q=A.f9(p,p.r,A.E(q).c),p=b.b,o=k.b;q.v();){n=q.d
+for(q=k.gbr(k),p=q.a,q=A.fa(p,p.r,A.E(q).c),p=b.b,o=k.b;q.v();){n=q.d
m=s.h(0,n)
l=m==null?p:m
m=r.h(0,n)
@@ -99827,7 +99827,7 @@ A.a1b.prototype={
t(){var s,r,q,p,o,n=this,m=n.b
if(m==null){m=n.c
m===$&&A.b()
-m=A.f9(m,m.r,A.E(m).c)
+m=A.fa(m,m.r,A.E(m).c)
for(;m.v();){s=m.d
r=n.c.h(0,s)
q=r.c
@@ -100120,7 +100120,7 @@ r=s.length===0
q=r?B.j:s[0]
p=r?B.j:s[1]
o=[]
-for(s=b.gbr(b),r=s.a,s=A.f9(r,r.r,A.E(s).c),r=b.a,n=b.b;s.v();){m=s.d
+for(s=b.gbr(b),r=s.a,s=A.fa(r,r.r,A.E(s).c),r=b.a,n=b.b;s.v();){m=s.d
o.push(a.m(m,q))
l=r.h(0,m)
k=(l==null?n:l).a
@@ -100190,7 +100190,7 @@ r=s.length===0
q=r?B.j:s[0]
p=r?B.j:s[1]
o=[]
-for(s=b.gbr(b),r=s.a,s=A.f9(r,r.r,A.E(s).c),r=b.b;s.v();){n=s.d
+for(s=b.gbr(b),r=s.a,s=A.fa(r,r.r,A.E(s).c),r=b.b;s.v();){n=s.d
o.push(a.m(n,q))
o.push(a.m(r.h(0,n),p))}return o},
ap(a,b){return this.P(a,b,B.j)},
@@ -100217,7 +100217,7 @@ r=s.length===0
q=r?B.j:s[0]
p=r?B.j:s[1]
o=[]
-for(s=b.gbr(b),r=s.a,s=A.f9(r,r.r,A.E(s).c),r=b.a,n=b.b;s.v();){m=s.d
+for(s=b.gbr(b),r=s.a,s=A.fa(r,r.r,A.E(s).c),r=b.a,n=b.b;s.v();){m=s.d
o.push(a.m(m,q))
l=r.h(0,m)
k=(l==null?n:l).b
@@ -100699,7 +100699,7 @@ au(a,b,c){var s=this.a
s=new A.JT(s,0,s.length).au(0,b,c)
if(s==null)s=null
else{s=s.a
-s=s.length===0?B.cF:new A.jm(s)}return s==null?this:s},
+s=s.length===0?B.cG:new A.jm(s)}return s==null?this:s},
Qs(a,b,c){var s,r
if(a===0||b===this.a.length)return b
if(c==null){s=this.a
@@ -100712,7 +100712,7 @@ return b},
ng(a,b){A.kr(b,"count")
return this.baz(b)},
baz(a){var s=this.Qs(a,0,null),r=this.a
-if(s===r.length)return B.cF
+if(s===r.length)return B.cG
return new A.jm(B.c.fe(r,s))},
oR(a,b){A.kr(b,"count")
return this.anu(b)},
@@ -100722,14 +100722,14 @@ return new A.jm(B.c.aX(r,0,s))},
As(a,b,c){var s,r,q,p,o=this
A.kr(b,"start")
if(c0;){--a
@@ -100739,9 +100739,9 @@ if(r<0)throw A.j(A.bL(q))
if(s===0&&r===o)return this
return new A.jm(B.c.aX(p,s,r))},
kv(a,b){var s=this.fv(0,b).lS(0)
-if(s.length===0)return B.cF
+if(s.length===0)return B.cG
return new A.jm(s)},
-ah(a,b){return new A.jm(this.a+b.a)},
+ag(a,b){return new A.jm(this.a+b.a)},
D8(a){return new A.jm(this.a.toLowerCase())},
B(a,b){if(b==null)return!1
return t.lI.b(b)&&this.a===b.a},
@@ -100804,7 +100804,7 @@ gaD(a){return this.b==this.c},
au(a,b,c){var s,r,q=this,p=b.gbwx(),o=c.a,n=p.gaD(p),m=q.a,l=q.b
if(n)s=J.eG4(m,l,l,o)
else{r=A.eXZ(m,p,l,q.c)
-if(r>=0)s=J.eG4(m,r,B.e.ah(r,p.gL(p)),o)
+if(r>=0)s=J.eG4(m,r,B.e.ag(r,p.gL(p)),o)
else return null}n=m.length
m=q.c
return A.eTr(s,q.b,s.length-n+m)}}
@@ -102412,7 +102412,7 @@ q=new A.bB(s,q)
if(J.m(q.ga6(q),-1))o=p
else{n=d==null?null:B.l.d2(d)
if(n==null)n=0
-m=A.f9(s,s.r,r.c)
+m=A.fa(s,s.r,r.c)
o=p
l=!1
while(!0){if(!(m.v()&&!l))break
@@ -105324,7 +105324,7 @@ m=p.ga3Z(p)
m=m.geF(m).tV(0)
l=p.ga3Z(p)
l=l.gft(l).tV(0)
-j.push(new A.VL(new A.ay(o,n,o.ah(0,m),n.ah(0,l)),new A.RA(k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,p.ga7v(p),k,k,k,k,k,k,k,k,k,r,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,p.gbwX(p),k,k,k)))}return j}}
+j.push(new A.VL(new A.ay(o,n,o.ag(0,m),n.ag(0,l)),new A.RA(k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,p.ga7v(p),k,k,k,k,k,k,k,k,k,r,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,k,p.gbwX(p),k,k,k)))}return j}}
A.aIZ.prototype={
gaSy(){var s=this.f
s===$&&A.b()
@@ -107081,7 +107081,7 @@ case 1:return A.L(q,r)}})
return A.M($async$$1,r)},
$S:1994}
A.ph.prototype={
-ah(a,b){var s=A.aQC(b),r=this.a+s.a,q=this.b+s.b+(r>>>22)
+ag(a,b){var s=A.aQC(b),r=this.a+s.a,q=this.b+s.b+(r>>>22)
return new A.ph(r&4194303,q&4194303,this.c+s.c+(q>>>22)&1048575)},
bd(a,b){var s=A.aQC(b)
return A.OY(this.a,this.b,this.c,s.a,s.b,s.c)},
@@ -107647,7 +107647,7 @@ bo(a,b){return this.b.bo(0,this.a.bo(0,b))},
k(a){return A.k(this.a)+"\u27a9"+this.b.k(0)}}
A.bX.prototype={
lU(a){var s=this.a
-return A.E(this).i("bX.T").a(J.fc(s,J.U3(J.eNX(this.b,s),a)))},
+return A.E(this).i("bX.T").a(J.f7(s,J.U3(J.eNX(this.b,s),a)))},
bo(a,b){if(b===0)return this.a
if(b===1)return this.b
return this.lU(b)},
@@ -108532,26 +108532,26 @@ if(s.k1$.c!==0)s.a_6()}},
$S:1}
A.bG.prototype={}
A.cr.prototype={
-ac(a,b){var s,r,q=this,p=q.ag$,o=q.aj$,n=o.length
+ac(a,b){var s,r,q=this,p=q.ah$,o=q.aj$,n=o.length
if(p===n){o=t.Nw
if(p===0){p=A.dh(1,null,!1,o)
q.aj$=p}else{s=A.dh(n*2,null,!1,o)
-for(p=q.ag$,o=q.aj$,r=0;r1e4)b=1e4*B.e.gAG(b)
+ag(a,b){if(Math.abs(b)>1e4)b=1e4*B.e.gAG(b)
return new A.aqk(this.a+b)},
-bd(a,b){return this.ah(0,-b)}}
+bd(a,b){return this.ag(0,-b)}}
A.afx.prototype={
sa8_(a,b){var s=this
if(b===s.b)return
@@ -135337,7 +135337,7 @@ return b instanceof A.CG&&b.a==s.a&&b.b==s.b&&b.c==s.c},
k(a){var s=this
return"CustomSemanticsAction("+A.k($.eGO.h(0,s))+", label:"+A.k(s.a)+", hint:"+A.k(s.b)+", action:"+A.k(s.c)+")"}}
A.k4.prototype={
-ah(a,b){var s,r,q,p,o,n,m,l=this.a,k=l.length
+ag(a,b){var s,r,q,p,o,n,m,l=this.a,k=l.length
if(k===0)return b
s=b.a
if(s.length===0)return this
@@ -135484,7 +135484,7 @@ a7.cx=a6.x2
r=a6.k2
a7.cy=a6.k3
q=A.cb(t.S)
-for(s=a6.cy,s=A.f9(s,s.r,A.E(s).c);s.v();)q.F(0,A.bBL(s.d))
+for(s=a6.cy,s=A.fa(s,s.r,A.E(s).c);s.v();)q.F(0,A.bBL(s.d))
s=a6.k4
if(s!=null){s=s.a
if(s!=null)q.F(0,A.bBL(new A.CG(null,s,B.hm)))
@@ -135617,7 +135617,7 @@ s=q.f
if(s==null||s.a==="")q.f=a.go
if(q.w==="")q.w=a.k1
s=a.dx
-if(s!=null){r=q.y;(r==null?q.y=A.cb(t.g3):r).I(0,s)}for(s=this.b.cy,s=A.f9(s,s.r,A.E(s).c),r=this.c;s.v();)r.F(0,A.bBL(s.d))
+if(s!=null){r=q.y;(r==null?q.y=A.cb(t.g3):r).I(0,s)}for(s=this.b.cy,s=A.fa(s,s.r,A.E(s).c),r=this.c;s.v();)r.F(0,A.bBL(s.d))
s=a.k4
if(s!=null){s=s.a
if(s!=null)r.F(0,A.bBL(new A.CG(null,s,B.hm)))
@@ -137129,20 +137129,20 @@ $S:123}
A.aar.prototype={
auo(a,b){var s,r=this.a
if(r!=null)if(r!==-1){s=b.a
-s=s.length===0?B.cF:new A.jm(s)
+s=s.length===0?B.cG:new A.jm(s)
s=s.gL(s)<=r}else s=!0
else s=!0
if(s)return b
s=this.b
switch((s==null?A.eR6(null):s).a){case 0:return b
case 1:s=a.a
-s=s.length===0?B.cF:new A.jm(s)
+s=s.length===0?B.cG:new A.jm(s)
if(s.gL(s)===r){s=a.b
s=s.a==s.b}else s=!1
if(s)return a
return A.eR7(b,r)
case 2:s=a.a
-s=s.length===0?B.cF:new A.jm(s)
+s=s.length===0?B.cG:new A.jm(s)
if(s.gL(s)===r&&!a.c.ghc())return a
if(b.c.ghc())return b
return A.eR7(b,r)
@@ -138297,7 +138297,7 @@ q.Y(0,r.gIF())
q=r.f
q.toString
q.aj$=$.aY()
-q.ag$=0
+q.ah$=0
b.toString
q=r.f=b}else{q=r.gIF()
s=r.f
@@ -138361,7 +138361,7 @@ r.Y(0,s.gIF())
if(s.a.x==null){r=s.f
r.toString
r.aj$=$.aY()
-r.ag$=0}r=s.r
+r.ah$=0}r=s.r
r===$&&A.b()
r.Y(0,s.gIG())
if(s.a.d==null)s.r.A()
@@ -138439,7 +138439,7 @@ bi(a){this.bz(a)
this.aof()},
aof(){this.e=new A.kb(this.gaPb(),this.a.c,null,t.Jn)},
A(){var s,r,q=this.d
-if(q!=null)for(q=A.f9(q,q.r,A.E(q).c);q.v();){s=q.d
+if(q!=null)for(q=A.fa(q,q.r,A.E(q).c);q.v();){s=q.d
r=this.d.h(0,s)
r.toString
s.Y(0,r)}this.am()},
@@ -138564,12 +138564,12 @@ b.sur(this.r)
b.sz7(null)
b.sey(A.iN(a))}}
A.aJI.prototype={
-cG(a){var s=new A.aYz(null,B.cI,null,A.ch(t.T))
+cG(a){var s=new A.aYz(null,B.cJ,null,A.ch(t.T))
s.cF()
s.sec(null)
return s},
cL(a,b){b.sz7(null)
-b.sur(B.cI)},
+b.sur(B.cJ)},
FI(a){a.sz7(null)}}
A.a7v.prototype={
cG(a){var s=new A.aYA(this.e,this.f,null,A.ch(t.T))
@@ -138849,7 +138849,7 @@ b.cE()
b.eZ()}}}
A.xa.prototype={}
A.pS.prototype={}
-A.f8.prototype={
+A.f9.prototype={
EZ(a){var s,r,q,p=a.e
p.toString
t.US.a(p)
@@ -138875,7 +138875,7 @@ b.sbuU(B.m9)
b.sbuV(0)
b.sa53(r.y)
s=A.iN(a)
-if(b.ag!=s){b.ag=s
+if(b.ah!=s){b.ah=s
b.aY()}if(b.aj!==B.u){b.aj=B.u
b.aY()}s=r.as
if(s!==b.bc){b.bc=s
@@ -139307,7 +139307,7 @@ o.aGx(s.a.c)
o.p1$.push(o.gb_q())
s=o.a3$
if(s!=null){s.aj$=$.aY()
-s.ag$=0}s=t.S
+s.ah$=0}s=t.S
r=$.aY()
o.a3$=new A.aVs(new A.c4d(B.it,A.a5(s,t.ZA)),A.a5(s,t.xg),r)
o.p2$.push(o.gb0Y())},
@@ -139894,7 +139894,7 @@ r.a.d.Y(0,r.ga_0())
B.a.M($.ah.z$,r)
q=r.r
q.aj$=$.aY()
-q.ag$=0
+q.ah$=0
r.aLk()},
gasz(){return this.a.c.a},
ME(a){var s,r,q,p=this,o=p.a
@@ -139964,7 +139964,7 @@ break
case 1:a=c.fr
a.toString
n=a0.a.bd(0,a)
-a=c.dx.ges().ah(0,n)
+a=c.dx.ges().ag(0,n)
r=c.w
q=$.ah.x$.z.h(0,r).ga9()
q.toString
@@ -140006,7 +140006,7 @@ l=c.fx
l.toString
d=$.ah.x$.z.h(0,r).ga9()
d.toString
-d=l.ah(0,new A.X(0,o.a(d).bB.gkL()/2))
+d=l.ag(0,new A.X(0,o.a(d).bB.gkL()/2))
c.dy=a.Ar(A.ds(q.cQ(0,b),d))
r=$.ah.x$.z.h(0,r).ga9()
r.toString
@@ -140425,7 +140425,7 @@ f.R8=f.a.CW
f.p3=s
f.p4=i
e.a=!1
-s=p.length===0?B.cF:new A.jm(p)
+s=p.length===0?B.cG:new A.jm(p)
e=A.aRE(s.gL(s),new A.bHz(e,f),!0,t.Bp)
s=A.P(e)
r=s.i("c5<1,ou>")
@@ -140590,7 +140590,7 @@ p.toString
r=new A.dbl(t.E.a(p),q)}return a.a?new A.ahd(new A.ags(s,!0),r):new A.ahd(r,new A.ags(s,!1))},
aUe(a){return new A.agF(this.a.c.a)},
bcG(a){var s,r,q,p,o,n=this,m=n.a.c.a.a
-m=m.length===0?B.cF:new A.jm(m)
+m=m.length===0?B.cG:new A.jm(m)
if(m.gL(m)>1){m=n.a.c.a
m=m.b
m=m.a!=m.b||m.c===0}else m=!0
@@ -140845,14 +140845,14 @@ $1(a){var s,r,q,p,o,n,m=this.a
if(m.a)return null
s=this.b
r=s.p1
-q=(r.length===0?B.cF:new A.jm(r)).As(0,0,a).a.length
+q=(r.length===0?B.cG:new A.jm(r)).As(0,0,a).a.length
r=s.w
p=$.ah.x$.z.h(0,r).ga9()
p.toString
o=t.E
o.a(p)
s=s.p1
-n=p.ri(A.i2(B.H,q,q+(s.length===0?B.cF:new A.jm(s)).bgX(a).a.length,!1))
+n=p.ri(A.i2(B.H,q,q+(s.length===0?B.cG:new A.jm(s)).bgX(a).a.length,!1))
if(n.length===0)return null
s=B.a.ga6(n)
r=$.ah.x$.z.h(0,r).ga9()
@@ -141028,7 +141028,7 @@ b.sGn(q.ax)
b.sbqk(q.ay)
b.sa6g(q.ch)
b.swD(q.CW)
-s=b.ag
+s=b.ah
s.sTC(q.cx)
b.sAe(q.cy)
b.sAd(0,q.db)
@@ -141886,7 +141886,7 @@ g=k==null?e:k.r
if(s.h(0,g)==null)s.u(0,g,A.eWB(k,b,A.a([],n)))
s.h(0,g).c.push(i)
continue}if(l.gio()&&!l.gpz()){if(s.h(0,i)==null)s.u(0,i,A.eWB(k,b,A.a([],n)))
-s.h(0,i).c.push(l)}}for(r=A.f9(s,s.r,s.$ti.c);r.v();){q=r.d
+s.h(0,i).c.push(l)}}for(r=A.fa(s,s.r,s.$ti.c);r.v();){q=r.d
p=s.h(0,q).b.aH3(s.h(0,q).c,a0)
p=A.a(p.slice(0),A.P(p))
B.a.aI(s.h(0,q).c)
@@ -143806,13 +143806,13 @@ lU(b0){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2,a3,a4=new A.fR(new Flo
this.a.asP(a4,a6,a8)
this.b.asP(a5,a7,a9)
s=1-b0
-r=a4.u3(s).ah(0,a5.u3(b0))
-q=a6.u3(s).ah(0,a7.u3(b0))
+r=a4.u3(s).ag(0,a5.u3(b0))
+q=a6.u3(s).ag(0,a7.u3(b0))
p=new Float64Array(4)
o=new A.Qy(p)
o.eb(q)
o.LN(0)
-n=a8.u3(s).ah(0,a9.u3(b0))
+n=a8.u3(s).ag(0,a9.u3(b0))
s=new Float64Array(16)
q=new A.dK(s)
m=p[0]
@@ -145059,7 +145059,7 @@ r.z=a
r.aor()}},
aor(){var s=this,r=s.z,q=s.a
if(r!=null){q=q.x
-s.Q=(q&&B.a).ah(q,A.a([r],t.tc))}else s.Q=q.x},
+s.Q=(q&&B.a).ag(q,A.a([r],t.tc))}else s.Q=q.x},
bi(a){var s,r,q,p=this
p.aLw(a)
s=a.x
@@ -145542,8 +145542,8 @@ sey(a){if(this.bA==a)return
this.bA=a
this.aY()},
sur(a){var s=this
-if(a===s.ag)return
-s.ag=a
+if(a===s.ah)return
+s.ah=a
s.cE()
s.eZ()},
ky(a){if(!(a.e instanceof A.G2))a.e=new A.G2(null,null,B.A)},
@@ -145745,7 +145745,7 @@ if(s!=null)s.ak6()},
A(){this.r=!0
var s=this.d
if(!s.a){s.aj$=$.aY()
-s.ag$=0}},
+s.ah$=0}},
k(a){return"*,R
*)","li*(li*)","~(l)","l(An,X)","~(qQ)","p(v)","l*(l*,mp*)","Bw*(Bw*)","A*(A*,Be*)","~(S2)","oH*(oH*)","~(A)","~(PK,X)","ek*(c*,Q
*(hR*)","p(v,bF)","a4*)","U(R
*()","af