diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php
index f99d52ce5d5b..04abd19bc01a 100644
--- a/app/DataMapper/CompanySettings.php
+++ b/app/DataMapper/CompanySettings.php
@@ -441,7 +441,16 @@ class CompanySettings extends BaseSettings
public $send_email_on_mark_paid = false;
+ public $postmark_secret = '';
+
+ public $mailgun_secret = '';
+
+ public $mailgun_domain = '';
+
public static $casts = [
+ 'postmark_secret' => 'string',
+ 'mailgun_secret' => 'string',
+ 'mailgun_domain' => 'string',
'send_email_on_mark_paid' => 'bool',
'vendor_portal_enable_uploads' => 'bool',
'besr_id' => 'string',
diff --git a/app/Http/Controllers/ClientPortal/NinjaPlanController.php b/app/Http/Controllers/ClientPortal/NinjaPlanController.php
index 24ff46adb4d1..7d059d0d7b54 100644
--- a/app/Http/Controllers/ClientPortal/NinjaPlanController.php
+++ b/app/Http/Controllers/ClientPortal/NinjaPlanController.php
@@ -26,6 +26,7 @@ use App\Models\Invoice;
use App\Models\RecurringInvoice;
use App\Models\Subscription;
use App\Notifications\Ninja\NewAccountNotification;
+use App\Repositories\RecurringInvoiceRepository;
use App\Repositories\SubscriptionRepository;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
@@ -178,6 +179,15 @@ class NinjaPlanController extends Controller
->increment()
->queue();
+
+ $old_recurring = RecurringInvoice::where('company_id', config('ninja.ninja_default_company_id'))->where('client_id', $client->id)->first();
+
+ if($old_recurring) {
+ $old_recurring->service()->stop()->save();
+ $old_recurring_repo = new RecurringInvoiceRepository();
+ $old_recurring_repo->archive($old_recurring);
+ }
+
$ninja_company = Company::on('db-ninja-01')->find(config('ninja.ninja_default_company_id'));
$ninja_company->notification(new NewAccountNotification($subscription->company->account, $client))->ninja();
diff --git a/app/Http/Controllers/PostMarkController.php b/app/Http/Controllers/PostMarkController.php
index 0a8fcc6e5a8a..05d571c9178d 100644
--- a/app/Http/Controllers/PostMarkController.php
+++ b/app/Http/Controllers/PostMarkController.php
@@ -74,7 +74,7 @@ class PostMarkController extends BaseController
*/
public function webhook(Request $request)
{
- if ($request->header('X-API-SECURITY') && $request->header('X-API-SECURITY') == config('postmark.secret')) {
+ if ($request->header('X-API-SECURITY') && $request->header('X-API-SECURITY') == config('services.postmark.token')) {
ProcessPostmarkWebhook::dispatch($request->all());
return response()->json(['message' => 'Success'], 200);
diff --git a/app/Http/Requests/Company/UpdateCompanyRequest.php b/app/Http/Requests/Company/UpdateCompanyRequest.php
index ab9181a31ce0..bf017e6e3068 100644
--- a/app/Http/Requests/Company/UpdateCompanyRequest.php
+++ b/app/Http/Requests/Company/UpdateCompanyRequest.php
@@ -40,8 +40,6 @@ class UpdateCompanyRequest extends Request
return auth()->user()->can('edit', $this->company);
}
-
-
public function rules()
{
$input = $this->all();
diff --git a/app/Jobs/Company/CompanyImport.php b/app/Jobs/Company/CompanyImport.php
index e376043b5f99..03359ef0001a 100644
--- a/app/Jobs/Company/CompanyImport.php
+++ b/app/Jobs/Company/CompanyImport.php
@@ -1164,6 +1164,7 @@ class CompanyImport implements ShouldQueue
{
nlog($e->getMessage());
nlog("I could not upload {$new_document->url}");
+ $new_document->forceDelete();
}
}
diff --git a/app/Jobs/Invoice/CheckGatewayFee.php b/app/Jobs/Invoice/CheckGatewayFee.php
new file mode 100644
index 000000000000..a608eee312f1
--- /dev/null
+++ b/app/Jobs/Invoice/CheckGatewayFee.php
@@ -0,0 +1,54 @@
+db);
+
+ $i = Invoice::withTrashed()->find($this->invoice_id);
+
+ if(!$i)
+ return;
+
+ if($i->status_id == Invoice::STATUS_SENT)
+ {
+ $i->service()->removeUnpaidGatewayFees();
+ }
+
+ }
+}
diff --git a/app/Jobs/Mail/NinjaMailerJob.php b/app/Jobs/Mail/NinjaMailerJob.php
index ca2ef2178f14..6c3c941b5f67 100644
--- a/app/Jobs/Mail/NinjaMailerJob.php
+++ b/app/Jobs/Mail/NinjaMailerJob.php
@@ -34,6 +34,7 @@ use GuzzleHttp\Exception\ClientException;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Mail\Mailer;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\App;
@@ -63,10 +64,18 @@ class NinjaMailerJob implements ShouldQueue
private $mailer;
+ protected $client_postmark_secret = false;
+
+ protected $client_mailgun_secret = false;
+
+ protected $client_mailgun_domain = false;
+
+
public function __construct(NinjaMailerObject $nmo, bool $override = false)
{
$this->nmo = $nmo;
+
$this->override = $override;
}
@@ -80,12 +89,14 @@ class NinjaMailerJob implements ShouldQueue
/* Serializing models from other jobs wipes the primary key */
$this->company = Company::where('company_key', $this->nmo->company->company_key)->first();
+ /* If any pre conditions fail, we return early here */
if($this->preFlightChecksFail())
return;
/* Set the email driver */
$this->setMailDriver();
+ /* Run time we set Reply To Email*/
if (strlen($this->nmo->settings->reply_to_email) > 1) {
if(property_exists($this->nmo->settings, 'reply_to_name'))
@@ -100,8 +111,10 @@ class NinjaMailerJob implements ShouldQueue
$this->nmo->mailable->replyTo($this->company->owner()->email, $this->company->owner()->present()->name());
}
+ /* Run time we set the email tag */
$this->nmo->mailable->tag($this->company->company_key);
+ /* If we have an invitation present, we pass the invitation key into the email headers*/
if($this->nmo->invitation)
{
@@ -115,13 +128,25 @@ class NinjaMailerJob implements ShouldQueue
//send email
try {
-
+
nlog("trying to send to {$this->nmo->to_user->email} ". now()->toDateTimeString());
nlog("Using mailer => ". $this->mailer);
- Mail::mailer($this->mailer)
- ->to($this->nmo->to_user->email)
- ->send($this->nmo->mailable);
+ $mailer = Mail::mailer($this->mailer);
+
+ if($this->client_postmark_secret){
+ nlog("inside postmark config");
+ nlog($this->client_postmark_secret);
+ $mailer->postmark_config($this->client_postmark_secret);
+ }
+
+ if($this->client_mailgun_secret){
+ $mailer->mailgun_config($this->client_mailgun_secret, $this->client_mailgun_domain);
+ }
+
+ $mailer
+ ->to($this->nmo->to_user->email)
+ ->send($this->nmo->mailable);
/* Count the amount of emails sent across all the users accounts */
Cache::increment($this->company->account->key);
@@ -135,6 +160,8 @@ class NinjaMailerJob implements ShouldQueue
} catch (\Exception | \RuntimeException | \Google\Service\Exception $e) {
nlog("error failed with {$e->getMessage()}");
+
+ $this->cleanUpMailers();
$message = $e->getMessage();
@@ -176,12 +203,18 @@ class NinjaMailerJob implements ShouldQueue
}
-
-
+ //always dump the drivers to prevent reuse
+ $this->cleanUpMailers();
+
}
- /* Switch statement to handle failure notifications */
- private function entityEmailFailed($message)
+ /**
+ * Entity notification when an email fails to send
+ *
+ * @param string $message
+ * @return void
+ */
+ private function entityEmailFailed($message): void
{
$class = get_class($this->nmo->entity);
@@ -202,6 +235,9 @@ class NinjaMailerJob implements ShouldQueue
}
+ /**
+ * Initializes the configured Mailer
+ */
private function setMailDriver()
{
/* Singletons need to be rebooted each time just in case our Locale is changing*/
@@ -216,23 +252,34 @@ class NinjaMailerJob implements ShouldQueue
case 'gmail':
$this->mailer = 'gmail';
$this->setGmailMailer();
- break;
+ return;
case 'office365':
$this->mailer = 'office365';
$this->setOfficeMailer();
- break;
+ return;
+ case 'client_postmark':
+ $this->mailer = 'postmark';
+ $this->setPostmarkMailer();
+ return;
+ case 'client_mailgun':
+ $this->mailer = 'mailgun';
+ $this->setMailgunMailer();
+ return;
+
default:
break;
}
-
if(Ninja::isSelfHost())
$this->setSelfHostMultiMailer();
-
}
- private function setSelfHostMultiMailer()
+ /**
+ * Allows configuration of multiple mailers
+ * per company for use by self hosted users
+ */
+ private function setSelfHostMultiMailer(): void
{
if (env($this->company->id . '_MAIL_HOST'))
@@ -259,21 +306,117 @@ class NinjaMailerJob implements ShouldQueue
}
-
- private function setOfficeMailer()
+ /**
+ * Ensure we discard any data that is not required
+ *
+ * @return void
+ */
+ private function cleanUpMailers(): void
{
- $sending_user = $this->nmo->settings->gmail_sending_user_id;
+ $this->client_postmark_secret = false;
- $user = User::find($this->decodePrimaryKey($sending_user));
-
+ $this->client_mailgun_secret = false;
+
+ $this->client_mailgun_domain = false;
+
+ //always dump the drivers to prevent reuse
+ app('mail.manager')->forgetMailers();
+ }
+
+ /**
+ * Check to ensure no cross account
+ * emails can be sent.
+ *
+ * @param User $user
+ */
+ private function checkValidSendingUser($user)
+ {
/* Always ensure the user is set on the correct account */
if($user->account_id != $this->company->account_id){
$this->nmo->settings->email_sending_method = 'default';
return $this->setMailDriver();
+ }
+ }
+ /**
+ * Resolves the sending user
+ * when configuring the Mailer
+ * on behalf of the client
+ *
+ * @return User $user
+ */
+ private function resolveSendingUser(): ?User
+ {
+ $sending_user = $this->nmo->settings->gmail_sending_user_id;
+
+ $user = User::find($this->decodePrimaryKey($sending_user));
+
+ return $user;
+ }
+
+ /**
+ * Configures Mailgun using client supplied secret
+ * as the Mailer
+ */
+ private function setMailgunMailer()
+ {
+ if(strlen($this->nmo->settings->mailgun_secret) > 2 && strlen($this->nmo->settings->mailgun_domain) > 2){
+ $this->client_mailgun_secret = $this->nmo->settings->mailgun_secret;
+ $this->client_mailgun_domain = $this->nmo->settings->mailgun_domain;
+ }
+ else{
+ $this->nmo->settings->email_sending_method = 'default';
+ return $this->setMailDriver();
}
+
+ $user = $this->resolveSendingUser();
+
+ $this->nmo
+ ->mailable
+ ->from($user->email, $user->name());
+ }
+
+ /**
+ * Configures Postmark using client supplied secret
+ * as the Mailer
+ */
+ private function setPostmarkMailer()
+ {
+ if(strlen($this->nmo->settings->postmark_secret) > 2){
+ $this->client_postmark_secret = $this->nmo->settings->postmark_secret;
+ }
+ else{
+ $this->nmo->settings->email_sending_method = 'default';
+ return $this->setMailDriver();
+ }
+
+ $user = $this->resolveSendingUser();
+
+ $this->nmo
+ ->mailable
+ ->from($user->email, $user->name());
+ }
+
+ /**
+ * Configures Microsoft via Oauth
+ * as the Mailer
+ */
+ private function setOfficeMailer()
+ {
+ $user = $this->resolveSendingUser();
+
+ /* Always ensure the user is set on the correct account */
+ // if($user->account_id != $this->company->account_id){
+
+ // $this->nmo->settings->email_sending_method = 'default';
+ // return $this->setMailDriver();
+
+ // }
+
+ $this->checkValidSendingUser($user);
+
nlog("Sending via {$user->name()}");
$token = $this->refreshOfficeToken($user);
@@ -301,21 +444,27 @@ class NinjaMailerJob implements ShouldQueue
sleep(rand(1,3));
}
+ /**
+ * Configures GMail via Oauth
+ * as the Mailer
+ */
private function setGmailMailer()
{
- $sending_user = $this->nmo->settings->gmail_sending_user_id;
+ $user = $this->resolveSendingUser();
- $user = User::find($this->decodePrimaryKey($sending_user));
+ $this->checkValidSendingUser($user);
/* Always ensure the user is set on the correct account */
- if($user->account_id != $this->company->account_id){
+ // if($user->account_id != $this->company->account_id){
- $this->nmo->settings->email_sending_method = 'default';
- return $this->setMailDriver();
+ // $this->nmo->settings->email_sending_method = 'default';
+ // return $this->setMailDriver();
- }
+ // }
+ $this->checkValidSendingUser($user);
+
nlog("Sending via {$user->name()}");
$google = (new Google())->init();
@@ -370,7 +519,14 @@ class NinjaMailerJob implements ShouldQueue
}
- private function preFlightChecksFail()
+ /**
+ * On the hosted platform we scan all outbound email for
+ * spam. This sequence processes the filters we use on all
+ * emails.
+ *
+ * @return bool
+ */
+ private function preFlightChecksFail(): bool
{
/* If we are migrating data we don't want to fire any emails */
@@ -396,9 +552,11 @@ class NinjaMailerJob implements ShouldQueue
/* If the account is verified, we allow emails to flow */
if(Ninja::isHosted() && $this->company->account && $this->company->account->is_verified_account) {
+ //11-01-2022
+
/* Continue to analyse verified accounts in case they later start sending poor quality emails*/
- if(class_exists(\Modules\Admin\Jobs\Account\EmailQuality::class))
- (new \Modules\Admin\Jobs\Account\EmailQuality($this->nmo, $this->company))->run();
+ // if(class_exists(\Modules\Admin\Jobs\Account\EmailQuality::class))
+ // (new \Modules\Admin\Jobs\Account\EmailQuality($this->nmo, $this->company))->run();
return false;
}
@@ -423,7 +581,14 @@ class NinjaMailerJob implements ShouldQueue
return false;
}
- private function logMailError($errors, $recipient_object)
+ /**
+ * Logs any errors to the SystemLog
+ *
+ * @param string $errors
+ * @param App\Models\User | App\Models\Client $recipient_object
+ * @return void
+ */
+ private function logMailError($errors, $recipient_object) :void
{
(new SystemLogger(
@@ -446,11 +611,12 @@ class NinjaMailerJob implements ShouldQueue
}
- public function failed($exception = null)
- {
-
- }
-
+ /**
+ * Attempts to refresh the Microsoft refreshToken
+ *
+ * @param App\Models\User
+ * @return string | boool
+ */
private function refreshOfficeToken($user)
{
$expiry = $user->oauth_user_token_expiry ?: now()->subDay();
@@ -469,8 +635,6 @@ class NinjaMailerJob implements ShouldQueue
'refresh_token' => $user->oauth_user_refresh_token
],
])->getBody()->getContents());
-
- nlog($token);
if($token){
@@ -489,6 +653,11 @@ class NinjaMailerJob implements ShouldQueue
}
+ public function failed($exception = null)
+ {
+
+ }
+
/**
* Is this the cleanest way to requeue a job?
*
diff --git a/app/Jobs/Mail/NinjaMailerObject.php b/app/Jobs/Mail/NinjaMailerObject.php
index 43541dbfc7cf..9aa86095b913 100644
--- a/app/Jobs/Mail/NinjaMailerObject.php
+++ b/app/Jobs/Mail/NinjaMailerObject.php
@@ -31,9 +31,11 @@ class NinjaMailerObject
/* Variable for cascading notifications */
public $entity_string = false;
+ /* @var bool | App\Models\InvoiceInvitation | app\Models\QuoteInvitation | app\Models\CreditInvitation | app\Models\RecurringInvoiceInvitation | app\Models\PurchaseOrderInvitation $invitation*/
public $invitation = false;
public $template = false;
+ /* @var bool | App\Models\Invoice | app\Models\Quote | app\Models\Credit | app\Models\RecurringInvoice | app\Models\PurchaseOrder $invitation*/
public $entity = false;
}
diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php
index fa610163097e..22d7f927f9a8 100644
--- a/app/Models/Gateway.php
+++ b/app/Models/Gateway.php
@@ -103,7 +103,7 @@ class Gateway extends StaticModel
case 20:
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']],
+ GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'customer.source.updated','payment_intent.processing']],
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']],
@@ -140,7 +140,7 @@ class Gateway extends StaticModel
case 56: //Stripe
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']],
+ GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'customer.source.updated','payment_intent.processing']],
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/PaymentDrivers/Stripe/ACH.php b/app/PaymentDrivers/Stripe/ACH.php
index eccdc0b70494..50e5f32c4c50 100644
--- a/app/PaymentDrivers/Stripe/ACH.php
+++ b/app/PaymentDrivers/Stripe/ACH.php
@@ -94,6 +94,26 @@ class ACH
return redirect()->route('client.payment_methods.verification', ['payment_method' => $client_gateway_token->hashed_id, 'method' => GatewayType::BANK_TRANSFER]);
}
+ public function updateBankAccount(array $event)
+ {
+
+ $stripe_event = $event['data']['object'];
+
+ $token = ClientGatewayToken::where('token', $stripe_event['id'])
+ ->where('gateway_customer_reference', $stripe_event['customer'])
+ ->first();
+
+ if($token && isset($stripe_event['object']) && $stripe_event['object'] == 'bank_account' && isset($stripe_event['status']) && $stripe_event['status'] == 'verified') {
+
+ $meta = $token->meta;
+ $meta->state = 'authorized';
+ $token->meta = $meta;
+ $token->save();
+
+ }
+
+ }
+
public function verificationView(ClientGatewayToken $token)
{
if (isset($token->meta->state) && $token->meta->state === 'authorized') {
@@ -102,6 +122,25 @@ class ACH
->with('message', __('texts.payment_method_verified'));
}
+ //double check here if we need to show the verification view.
+ $this->stripe->init();
+
+ $bank_account = Customer::retrieveSource($token->gateway_customer_reference, $token->token, [], $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'));
+
+ }
+
$data = [
'token' => $token,
'gateway' => $this->stripe,
@@ -126,19 +165,19 @@ 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(property_exists($bank_account, 'status') && $bank_account->status == 'verified'){
+ // /* 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();
+ // $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'));
+ // return redirect()
+ // ->route('client.payment_methods.show', $token->hashed_id)
+ // ->with('message', __('texts.payment_method_verified'));
- }
+ // }
try {
$bank_account->verify(['amounts' => request()->transactions]);
diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php
new file mode 100644
index 000000000000..0f89d5a8f905
--- /dev/null
+++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentProcessingWebhook.php
@@ -0,0 +1,255 @@
+stripe_request = $stripe_request;
+ $this->company_key = $company_key;
+ $this->company_gateway_id = $company_gateway_id;
+ }
+
+ /* Stub processing payment intents with a pending payment */
+ public function handle()
+ {
+
+ MultiDB::findAndSetDbByCompanyKey($this->company_key);
+
+ $company = Company::where('company_key', $this->company_key)->first();
+
+ foreach ($this->stripe_request as $transaction) {
+
+ if(array_key_exists('payment_intent', $transaction))
+ {
+ $payment = Payment::query()
+ ->where('company_id', $company->id)
+ ->where('transaction_reference', $transaction['payment_intent'])
+ ->first();
+
+ }
+ else
+ {
+ $payment = Payment::query()
+ ->where('company_id', $company->id)
+ ->where('transaction_reference', $transaction['id'])
+ ->first();
+ }
+
+ if ($payment) {
+ $payment->status_id = Payment::STATUS_PENDING;
+ $payment->save();
+
+ $this->payment_completed = true;
+ }
+ }
+
+
+ if($this->payment_completed)
+ return;
+
+ $company_gateway = CompanyGateway::find($this->company_gateway_id);
+ $stripe_driver = $company_gateway->driver()->init();
+
+ $charge_id = false;
+
+ if(isset($this->stripe_request['object']['charges']) && optional($this->stripe_request['object']['charges']['data'][0])['id'])
+ $charge_id = $this->stripe_request['object']['charges']['data'][0]['id']; // API VERSION 2018
+ elseif (isset($this->stripe_request['object']['latest_charge']))
+ $charge_id = $this->stripe_request['object']['latest_charge']; // API VERSION 2022-11-15
+
+
+ if(!$charge_id){
+ nlog("could not resolve charge");
+ return;
+ }
+
+ $pi = \Stripe\PaymentIntent::retrieve($this->stripe_request['object']['id'], $stripe_driver->stripe_connect_auth);
+
+ $charge = \Stripe\Charge::retrieve($charge_id, $stripe_driver->stripe_connect_auth);
+
+ if(!$charge)
+ {
+ nlog("no charge found");
+ nlog($this->stripe_request);
+ return;
+ }
+
+ $company = Company::where('company_key', $this->company_key)->first();
+
+ $payment = Payment::query()
+ ->where('company_id', $company->id)
+ ->where('transaction_reference', $charge['id'])
+ ->first();
+
+ //return early
+ if($payment && $payment->status_id == Payment::STATUS_PENDING){
+ nlog(" payment found and status correct - returning ");
+ return;
+ }
+ elseif($payment){
+ $payment->status_id = Payment::STATUS_PENDING;
+ $payment->save();
+ }
+
+ $hash = isset($charge['metadata']['payment_hash']) ? $charge['metadata']['payment_hash'] : false;
+
+ if(!$hash)
+ return;
+
+ $payment_hash = PaymentHash::where('hash', $hash)->first();
+
+ if(!$payment_hash)
+ return;
+
+ $stripe_driver->client = $payment_hash->fee_invoice->client;
+
+ $meta = [
+ 'gateway_type_id' => $pi['metadata']['gateway_type_id'],
+ 'transaction_reference' => $charge['id'],
+ 'customer' => $charge['customer'],
+ 'payment_method' => $charge['payment_method'],
+ 'card_details' => isset($charge['payment_method_details']['card']['brand']) ? $charge['payment_method_details']['card']['brand'] : PaymentType::CREDIT_CARD_OTHER
+ ];
+
+ SystemLogger::dispatch(
+ ['response' => $this->stripe_request, 'data' => []],
+ SystemLog::CATEGORY_GATEWAY_RESPONSE,
+ SystemLog::EVENT_GATEWAY_SUCCESS,
+ SystemLog::TYPE_STRIPE,
+ null,
+ $company,
+ );
+
+ if(isset($pi['payment_method_types']) && in_array('us_bank_account', $pi['payment_method_types']))
+ {
+
+ $invoice = Invoice::with('client')->withTrashed()->find($payment_hash->fee_invoice_id);
+ $client = $invoice->client;
+
+ if($invoice->is_deleted)
+ return;
+
+ $this->updateAchPayment($payment_hash, $client, $meta);
+ }
+
+ }
+
+ private function updateAchPayment($payment_hash, $client, $meta)
+ {
+ $company_gateway = CompanyGateway::find($this->company_gateway_id);
+ $payment_method_type = $meta['gateway_type_id'];
+ $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::ACH,
+ 'amount' => $payment_hash->data->amount_with_fee,
+ 'transaction_reference' => $meta['transaction_reference'],
+ 'gateway_type_id' => GatewayType::BANK_TRANSFER,
+ ];
+
+ $payment = $driver->createPayment($data, Payment::STATUS_PENDING);
+
+ SystemLogger::dispatch(
+ ['response' => $this->stripe_request, 'data' => $data],
+ SystemLog::CATEGORY_GATEWAY_RESPONSE,
+ SystemLog::EVENT_GATEWAY_SUCCESS,
+ SystemLog::TYPE_STRIPE,
+ $client,
+ $client->company,
+ );
+
+ try {
+
+ $customer = $driver->getCustomer($meta['customer']);
+ $method = $driver->getStripePaymentMethod($meta['payment_method']);
+ $payment_method = $meta['payment_method'];
+
+ $token_exists = ClientGatewayToken::where([
+ 'gateway_customer_reference' => $customer->id,
+ 'token' => $payment_method,
+ 'client_id' => $client->id,
+ 'company_id' => $client->company_id,
+ ])->exists();
+
+ /* Already exists return */
+ if ($token_exists) {
+ return;
+ }
+
+ $payment_meta = new \stdClass;
+ $payment_meta->brand = (string) \sprintf('%s (%s)', $method->us_bank_account['bank_name'], ctrans('texts.ach'));
+ $payment_meta->last4 = (string) $method->us_bank_account['last4'];
+ $payment_meta->type = GatewayType::BANK_TRANSFER;
+ $payment_meta->state = 'verified';
+
+ $data = [
+ 'payment_meta' => $payment_meta,
+ 'token' => $payment_method,
+ 'payment_method_id' => GatewayType::BANK_TRANSFER,
+ ];
+
+ $additional_data = ['gateway_customer_reference' => $customer->id];
+
+ if ($customer->default_source === $method->id) {
+ $additional_data = ['gateway_customer_reference' => $customer->id, 'is_default' => 1];
+ }
+
+ $driver->storeGatewayToken($data, $additional_data);
+
+ }
+ catch(\Exception $e){
+ nlog("failed to import payment methods");
+ nlog($e->getMessage());
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/PaymentDrivers/StripePaymentDriver.php b/app/PaymentDrivers/StripePaymentDriver.php
index 369a0f259975..2da3e9564946 100644
--- a/app/PaymentDrivers/StripePaymentDriver.php
+++ b/app/PaymentDrivers/StripePaymentDriver.php
@@ -19,8 +19,8 @@ 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\Country;
+use App\Models\GatewayType;
use App\Models\Payment;
use App\Models\PaymentHash;
use App\Models\PaymentType;
@@ -29,8 +29,8 @@ use App\PaymentDrivers\Stripe\ACH;
use App\PaymentDrivers\Stripe\ACSS;
use App\PaymentDrivers\Stripe\Alipay;
use App\PaymentDrivers\Stripe\ApplePay;
-use App\PaymentDrivers\Stripe\Bancontact;
use App\PaymentDrivers\Stripe\BECS;
+use App\PaymentDrivers\Stripe\Bancontact;
use App\PaymentDrivers\Stripe\BrowserPay;
use App\PaymentDrivers\Stripe\Charge;
use App\PaymentDrivers\Stripe\Connect\Verify;
@@ -38,16 +38,17 @@ use App\PaymentDrivers\Stripe\CreditCard;
use App\PaymentDrivers\Stripe\EPS;
use App\PaymentDrivers\Stripe\FPX;
use App\PaymentDrivers\Stripe\GIROPAY;
-use App\PaymentDrivers\Stripe\Klarna;
-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\PaymentDrivers\Stripe\iDeal;
use App\Utils\Traits\MakesHash;
use Exception;
use Google\Service\ServiceConsumerManagement\CustomError;
@@ -630,6 +631,16 @@ class StripePaymentDriver extends BaseDriver
// if($request->type === 'payment_intent.requires_action')
// nlog($request->all());
+ if($request->type === 'customer.source.updated') {
+ $ach = new ACH($this);
+ $ach->updateBankAccount($request->all());
+ }
+
+ if($request->type === 'payment_intent.processing') {
+ PaymentIntentProcessingWebhook::dispatch($request->data, $request->company_key, $this->company_gateway->id)->delay(now()->addSeconds(2));
+ return response()->json([], 200);
+ }
+
//payment_intent.succeeded - this will confirm or cancel the payment
if ($request->type === 'payment_intent.succeeded') {
PaymentIntentWebhook::dispatch($request->data, $request->company_key, $this->company_gateway->id)->delay(now()->addSeconds(rand(5, 10)));
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
index d2ebc9544796..bc53eb4067a8 100644
--- a/app/Providers/AppServiceProvider.php
+++ b/app/Providers/AppServiceProvider.php
@@ -21,6 +21,7 @@ use App\Utils\TruthSource;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
+use Illuminate\Mail\Mailer;
use Illuminate\Queue\Events\JobProcessing;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Blade;
@@ -41,14 +42,8 @@ class AppServiceProvider extends ServiceProvider
public function boot()
{
- /* Limits the number of parallel jobs fired per minute when checking data*/
- RateLimiter::for('checkdata', function ($job) {
- return Limit::perMinute(100);
- });
-
Relation::morphMap([
'invoices' => Invoice::class,
- // 'credits' => \App\Models\Credit::class,
'proposals' => Proposal::class,
]);
@@ -83,7 +78,30 @@ class AppServiceProvider extends ServiceProvider
Mail::extend('office365', function () {
return new Office365MailTransport();
});
+
+ Mailer::macro('postmark_config', function (string $postmark_key) {
+
+ Mailer::setSymfonyTransport(app('mail.manager')->createSymfonyTransport([
+ 'transport' => 'postmark',
+ 'token' => $postmark_key
+ ]));
+
+ return $this;
+
+ });
+ Mailer::macro('mailgun_config', function ($secret, $domain) {
+
+ Mailer::setSymfonyTransport(app('mail.manager')->createSymfonyTransport([
+ 'transport' => 'mailgun',
+ 'secret' => $secret,
+ 'domain' => $domain,
+ 'endpoint' => config('services.mailgun.endpoint'),
+ 'scheme' => config('services.mailgun.scheme'),
+ ]));
+
+ return $this;
+ });
}
/**
diff --git a/app/Repositories/BankTransactionRepository.php b/app/Repositories/BankTransactionRepository.php
index b9fe838376d0..7bbd93f5561e 100644
--- a/app/Repositories/BankTransactionRepository.php
+++ b/app/Repositories/BankTransactionRepository.php
@@ -40,7 +40,7 @@ class BankTransactionRepository extends BaseRepository
{
$data['transactions'] = $bank_transactions->map(function ($bt){
- return ['id' => $bt->id, 'invoice_ids' => $bt->invoice_ids];
+ return ['id' => $bt->id, 'invoice_ids' => $bt->invoice_ids, 'ninja_category_id' => $bt->ninja_category_id];
})->toArray();
diff --git a/app/Repositories/PaymentRepository.php b/app/Repositories/PaymentRepository.php
index 5c912539b573..7d6cad5386a5 100644
--- a/app/Repositories/PaymentRepository.php
+++ b/app/Repositories/PaymentRepository.php
@@ -83,9 +83,8 @@ class PaymentRepository extends BaseRepository {
if ($data['amount'] == '') {
$data['amount'] = array_sum(array_column($data['invoices'], 'amount'));
}
-
+
$client->service()->updatePaidToDate($data['amount'])->save();
- // $client->paid_to_date += $data['amount'];
$client->save();
}
diff --git a/app/Services/ClientPortal/InstantPayment.php b/app/Services/ClientPortal/InstantPayment.php
index ff496ede5e06..b62098c717f9 100644
--- a/app/Services/ClientPortal/InstantPayment.php
+++ b/app/Services/ClientPortal/InstantPayment.php
@@ -16,6 +16,7 @@ use App\Exceptions\PaymentFailed;
use App\Factory\PaymentFactory;
use App\Http\Controllers\Controller;
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
+use App\Jobs\Invoice\CheckGatewayFee;
use App\Jobs\Invoice\InjectSignature;
use App\Jobs\Util\SystemLogger;
use App\Models\CompanyGateway;
@@ -48,7 +49,7 @@ class InstantPayment
public function run()
{
-nlog($this->request->all());
+
$is_credit_payment = false;
$tokens = [];
@@ -198,6 +199,9 @@ nlog($this->request->all());
$first_invoice->service()->addGatewayFee($gateway, $payment_method_id, $invoice_totals)->save();
}
+ /* Schedule a job to check the gateway fees for this invoice*/
+ CheckGatewayFee::dispatch($first_invoice, $client->company->db)->delay(600);
+
/**
* Gateway fee is calculated
* by adding it as a line item, and then subtract
diff --git a/app/Services/Credit/ApplyPayment.php b/app/Services/Credit/ApplyPayment.php
index b5df4be9e60f..f6e49faac3e9 100644
--- a/app/Services/Credit/ApplyPayment.php
+++ b/app/Services/Credit/ApplyPayment.php
@@ -105,8 +105,8 @@ class ApplyPayment
private function addPaymentToLedger()
{
- $this->payment->amount += $this->amount_applied;
- $this->payment->applied += $this->amount_applied;
+ // $this->payment->amount += $this->amount_applied;
+ // $this->payment->applied += $this->amount_applied;
$this->payment->status_id = Payment::STATUS_COMPLETED;
$this->payment->currency_id = $this->credit->client->getSetting('currency_id');
$this->payment->save();
diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php
index 4b2d7d1cfc48..f4439c922e59 100644
--- a/app/Services/Subscription/SubscriptionService.php
+++ b/app/Services/Subscription/SubscriptionService.php
@@ -416,7 +416,7 @@ else
foreach($invoice->line_items as $item)
{
- if($item->product_key != ctrans('texts.refund'))
+ if($item->product_key != ctrans('texts.refund') && ($item->type_id == "1" || $item->type_id == "2"))
{
$item->cost = ($item->cost*$ratio*$multiplier);
diff --git a/app/Utils/Traits/GeneratesConvertedQuoteCounter.php b/app/Utils/Traits/GeneratesConvertedQuoteCounter.php
index 39012ecfb452..713d17f2568d 100644
--- a/app/Utils/Traits/GeneratesConvertedQuoteCounter.php
+++ b/app/Utils/Traits/GeneratesConvertedQuoteCounter.php
@@ -479,9 +479,20 @@ trait GeneratesConvertedQuoteCounter
$reset_counter_frequency = (int) $client->getSetting('reset_counter_frequency_id');
if ($reset_counter_frequency == 0) {
+
+ if($client->getSetting('reset_counter_date')){
+
+ $settings = $client->company->settings;
+ $settings->reset_counter_date = "";
+ $client->company->settings = $settings;
+ $client->company->save();
+
+ }
+
return;
}
+
$timezone = Timezone::find($client->getSetting('timezone_id'));
$reset_date = Carbon::parse($client->getSetting('reset_counter_date'), $timezone->name);
diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php
index 2aacaf39f469..0484facd316a 100644
--- a/app/Utils/Traits/GeneratesCounter.php
+++ b/app/Utils/Traits/GeneratesCounter.php
@@ -519,6 +519,16 @@ trait GeneratesCounter
$reset_counter_frequency = (int) $client->getSetting('reset_counter_frequency_id');
if ($reset_counter_frequency == 0) {
+
+ if($client->getSetting('reset_counter_date')){
+
+ $settings = $client->company->settings;
+ $settings->reset_counter_date = "";
+ $client->company->settings = $settings;
+ $client->company->save();
+
+ }
+
return;
}
diff --git a/config/postmark.php b/config/postmark.php
index fba48117e01f..9550df3d68ef 100644
--- a/config/postmark.php
+++ b/config/postmark.php
@@ -2,7 +2,7 @@
return [
- /*
+ /* @deprecated
|--------------------------------------------------------------------------
| Postmark credentials
|--------------------------------------------------------------------------
diff --git a/config/services.php b/config/services.php
index aec15f6fc8d7..36d6a704ec6b 100644
--- a/config/services.php
+++ b/config/services.php
@@ -19,14 +19,14 @@ return [
*/
'mailgun' => [
- 'domain' => env('MAILGUN_DOMAIN'),
- 'secret' => env('MAILGUN_SECRET'),
+ 'domain' => env('MAILGUN_DOMAIN',''),
+ 'secret' => env('MAILGUN_SECRET',''),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
'scheme' => 'https',
],
'postmark' => [
- 'token' => env('POSTMARK_SECRET'),
+ 'token' => env('POSTMARK_SECRET',''),
],
'microsoft' => [
diff --git a/lang/ar/texts.php b/lang/ar/texts.php
index 3ce756331730..4b3ae06c598f 100644
--- a/lang/ar/texts.php
+++ b/lang/ar/texts.php
@@ -4322,7 +4322,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4917,7 +4917,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4927,7 +4927,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/bg/texts.php b/lang/bg/texts.php
index 4b9a69c4c1cb..8e9622e1e121 100644
--- a/lang/bg/texts.php
+++ b/lang/bg/texts.php
@@ -4302,7 +4302,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4897,7 +4897,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4907,7 +4907,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/ca/texts.php b/lang/ca/texts.php
index abbca26c615d..9e39dc34fb69 100644
--- a/lang/ca/texts.php
+++ b/lang/ca/texts.php
@@ -4296,7 +4296,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4891,7 +4891,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4901,7 +4901,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/cs/texts.php b/lang/cs/texts.php
index b6cea2ea1377..404b630dacf4 100644
--- a/lang/cs/texts.php
+++ b/lang/cs/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'Před pokračováním musíte přijmout podmínky.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/da/texts.php b/lang/da/texts.php
index d3bc11533391..a60ae3cbb627 100644
--- a/lang/da/texts.php
+++ b/lang/da/texts.php
@@ -4300,7 +4300,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4895,7 +4895,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4905,7 +4905,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/de/texts.php b/lang/de/texts.php
index b1785681f8b7..1a45dd1c8263 100644
--- a/lang/de/texts.php
+++ b/lang/de/texts.php
@@ -178,7 +178,7 @@ $LANG = array(
'email_sent' => 'Benachrichtigen, wenn eine Rechnung versendet wurde',
'email_viewed' => 'Benachrichtigen, wenn eine Rechnung betrachtet wurde',
'email_paid' => 'Benachrichtigen, wenn eine Rechnung bezahlt wurde',
- 'site_updates' => 'Webseitenaktualisierungen',
+ 'site_updates' => 'Website-Aktualisierungen',
'custom_messages' => 'Benutzerdefinierte Nachrichten',
'default_email_footer' => 'Standard-E-Mail Signatur',
'select_file' => 'Bitte wählen sie eine Datei',
@@ -255,7 +255,7 @@ $LANG = array(
'notification_invoice_paid' => 'Eine Zahlung von :amount wurde von :client bezüglich Rechnung :invoice getätigt.',
'notification_invoice_sent' => 'Rechnung :invoice über :amount wurde an den Kunden :client versendet.',
'notification_invoice_viewed' => 'Der Kunde :client hat sich die Rechnung :invoice über :amount angesehen.',
- 'stripe_payment_text' => 'Rechnung :Rechnungsnummer in Höhe von :Betrag für Kunde :Kunde',
+ 'stripe_payment_text' => 'Rechnung :invoicenumber in Höhe von :amount für Kunde :client',
'stripe_payment_text_without_invoice' => 'Zahlung ohne Rechnung in Höhe von :amount für Kunde :client',
'reset_password' => 'Du kannst dein Passwort zurücksetzen, indem du auf den folgenden Link klickst:',
'secure_payment' => 'Sichere Zahlung',
@@ -1273,7 +1273,7 @@ $LANG = array(
'account_holder_name' => 'Name des Kontoinhabers',
'add_account' => 'Konto hinzufügen',
'payment_methods' => 'Zahlungsarten',
- 'complete_verification' => 'Überprüfung abschliessen',
+ 'complete_verification' => 'Überprüfung abschließen',
'verification_amount1' => 'Betrag 1',
'verification_amount2' => 'Betrag 2',
'payment_method_verified' => 'Überprüfung erfolgreich abgeschlossen',
@@ -1344,7 +1344,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'resend_confirmation_email' => 'Bestätigungs-E-Mail nochmal senden',
'manage_account' => 'Account managen',
'action_required' => 'Handeln erforderlich',
- 'finish_setup' => 'Setup abschliessen',
+ 'finish_setup' => 'Setup abschließen',
'created_wepay_confirmation_required' => 'Bitte prüfen Sie Ihr E-Mail Konto und bestätigen Sie Ihre E-Mail Adresse bei WePay.',
'switch_to_wepay' => 'Wechsel zu WePay',
'switch' => 'Switch',
@@ -1470,7 +1470,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'industry_Banking & Finance' => 'Bank- und Finanzwesen',
'industry_Biotechnology' => 'Biotechnologie',
'industry_Broadcasting' => 'Rundfunk',
- 'industry_Business Services' => 'Business Dienstleistungen',
+ 'industry_Business Services' => 'Business-Dienstleistungen',
'industry_Commodities & Chemicals' => 'Rohstoffe und Chemikalien',
'industry_Communications' => 'Nachrichten und Kommunikation',
'industry_Computers & Hightech' => 'Computer & Hightech',
@@ -1792,7 +1792,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'industry_Banking & Finance' => 'Bank- und Finanzwesen',
'industry_Biotechnology' => 'Biotechnologie',
'industry_Broadcasting' => 'Rundfunk',
- 'industry_Business Services' => 'Business Dienstleistungen',
+ 'industry_Business Services' => 'Business-Dienstleistungen',
'industry_Commodities & Chemicals' => 'Rohstoffe und Chemikalien',
'industry_Communications' => 'Nachrichten und Kommunikation',
'industry_Computers & Hightech' => 'Computer & Hightech',
@@ -1888,7 +1888,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'warning' => 'Warnung',
'self-update' => 'Update',
'update_invoiceninja_title' => 'Update Invoice Ninja',
- 'update_invoiceninja_warning' => 'Vor dem Update von Invoice Ninja sollte ein Backup der Datenbank und der Dateien erstellt werden!',
+ 'update_invoiceninja_warning' => 'Vor dem Update von Invoice Ninja sollte ein Sicherungskopie der Datenbank und der Dateien erstellt werden!',
'update_invoiceninja_available' => 'Eine neue Version von Invoice Ninja ist verfügbar.',
'update_invoiceninja_unavailable' => 'Keine neue Version von Invoice Ninja verfügbar.',
'update_invoiceninja_instructions' => 'Bitte benutze den Update durchführen-Button, um die neue Version :version zu installieren. Du wirst danach zum Dashboard weitergeleitet.',
@@ -1901,7 +1901,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'unassigned' => 'Nicht zugewiesen',
'task' => 'Aufgabe',
'contact_name' => 'Name des Kontakts',
- 'city_state_postal' => 'Stadt / Bundesland / PLZ',
+ 'city_state_postal' => 'Stadt/Bundesland/PLZ',
'custom_field' => 'Benutzerdefinierte Felder',
'account_fields' => 'Unternehmensfelder',
'facebook_and_twitter' => 'Facebook und Twitter',
@@ -1966,7 +1966,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'buy_license' => 'Lizenz kaufen',
'apply_license' => 'Lizenz anwenden',
- 'submit' => 'Abschicken',
+ 'submit' => 'Senden',
'white_label_license_key' => 'Lizenzschlüssel',
'invalid_white_label_license' => 'Die "White-Label"-Lizenz ist nicht gültig',
'created_by' => 'Erstellt von :name',
@@ -2063,7 +2063,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'switch_to_primary' => 'Wechseln Sie zu Ihrem Primärunternehmen (:name), um Ihren Plan zu managen.',
'inclusive' => 'Inklusive',
'exclusive' => 'Exklusive',
- 'postal_city_state' => 'Plz/Stadt/Staat',
+ 'postal_city_state' => 'PLZ/Stadt/Bundesland',
'phantomjs_help' => 'In bestimmten Fällen nutzt diese App :link_phantom um PDFs zu erzeugen. Installieren Sie :link_docs, um diese lokal zu erzeugen.',
'phantomjs_local' => 'Benutze lokale PhantomJS Instanz',
'client_number' => 'Kundennummer',
@@ -2291,7 +2291,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'send_test_email' => 'Test-E-Mail verschicken',
'select_label' => 'Bezeichnung wählen',
'label' => 'Label',
- 'service' => 'Dienst',
+ 'service' => 'Leistung',
'update_payment_details' => 'Aktualisiere Zahlungsdetails',
'updated_payment_details' => 'Zahlungsdetails erfolgreich aktualisiert',
'update_credit_card' => 'Aktualisiere Kreditkarte',
@@ -2504,7 +2504,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'alipay' => 'Alipay',
'sofort' => 'SOFORT-Überweisung',
'sepa' => 'SEPA-Lastschrift',
- 'name_without_special_characters' => 'Please enter a name with only the letters a-z and whitespaces',
+ 'name_without_special_characters' => 'Bitte geben Sie Ihren Namen nur mit Buchstaben und Leerzeichen ein',
'enable_alipay' => 'Alipay akzeptieren',
'enable_sofort' => 'EU-Überweisungen akzeptieren',
'stripe_alipay_help' => 'Dieses Gateway muss unter :link aktiviert werden.',
@@ -3689,8 +3689,8 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'show_table' => 'Zeige Tabelle',
'show_list' => 'Zeige Liste',
'view_changes' => 'Änderungen anzeigen',
- 'force_update' => 'Aktualisierungen erzwingen',
- 'force_update_help' => 'Du benutzt die aktuellste Version, aber es stehen noch ausstehende Fehlerbehebungen zur Verfügung',
+ 'force_update' => 'Aktualisierung erzwingen',
+ 'force_update_help' => 'Du nutzt die aktuellste Version, aber es könnten bereits neue Fehlerbehebungen zur Verfügung stehen.',
'mark_paid_help' => 'Verfolge ob Ausgabe bezahlt wurde',
'mark_invoiceable_help' => 'Ermögliche diese Ausgabe in Rechnung zu stellen',
'add_documents_to_invoice_help' => 'Dokumente sichtbar für den Kunde',
@@ -3810,7 +3810,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'sent_invoices_are_locked' => 'Versendete Rechnungen sind gesperrt',
'paid_invoices_are_locked' => 'Bezahlte Rechnungen sind gesperrt',
'source_code' => 'Quellcode',
- 'app_platforms' => 'Applikations Platform',
+ 'app_platforms' => 'App-Plattformen',
'archived_task_statuses' => ' :value Aufgaben Stati erfolgreich archiviert',
'deleted_task_statuses' => ' :value Aufgaben Stati erfolgreich gelöscht',
'restored_task_statuses' => ' :value Aufgaben Stati erfolgreich wiederhergestellt',
@@ -4143,7 +4143,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'quote_approval_confirmation_label' => 'Sind Sie sicher, dass Sie diesem Angebot / Kostenvoranschlag zustimmen möchten?',
'migration_select_company_label' => 'Wählen Sie die zu migrierenden Firmen aus',
'force_migration' => 'Migration erzwingen',
- 'require_password_with_social_login' => 'Password mit Verknüpfung zu Sozialmedia notwendig',
+ 'require_password_with_social_login' => 'Anmeldung per Social Login notwendig',
'stay_logged_in' => 'Eingeloggt bleiben',
'session_about_to_expire' => 'Warnung: Ihre Sitzung läuft bald ab',
'count_hours' => ':count Stunden',
@@ -4203,7 +4203,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'update_fail_help' => 'Änderungen an der Codebasis können das Update blockieren, Sie können diesen Befehl ausführen, um die Änderungen zu verwerfen:',
'client_id_number' => 'Kundennummer',
'count_minutes' => ':count Minuten',
- 'password_timeout' => 'Passwort Timeout',
+ 'password_timeout' => 'Passwort-Timeout',
'shared_invoice_credit_counter' => 'Rechnung / Gutschrift Zähler teilen',
'activity_80' => ':user hat Abonnement :subscription erstellt',
'activity_81' => ':user hat Abonnement :subscription geändert',
@@ -4231,9 +4231,9 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'activity_104' => ':user hat die wiederkehrende Rechnung :recurring_invoice wiederhergestellt.',
'new_login_detected' => 'Neue Anmeldung für Ihr Konto erkannt.',
'new_login_description' => 'Sie haben sich kürzlich von einem neuen Standort oder Gerät aus bei Ihrem Invoice Ninja-Konto angemeldet:
IP: :ip
Time: :time
Email: :email',
- 'download_backup_subject' => 'Ihr Firmen-Backup steht zum Download bereit',
+ 'download_backup_subject' => 'Ihre Sicherungskopie steht zum Download bereit',
'contact_details' => 'Kontakt Informationen',
- 'download_backup_subject' => 'Ihr Firmen-Backup steht zum Download bereit',
+ 'download_backup_subject' => 'Ihre Sicherungskopie steht zum Download bereit',
'account_passwordless_login' => 'Passwortfreies einloggen',
'user_duplicate_error' => 'Derselbe Benutzer kann nicht derselben Firma hinzugefügt werden',
'user_cross_linked_error' => 'Der Benutzer ist vorhanden, kann aber nicht mit mehreren Konten verknüpft werden',
@@ -4898,17 +4898,32 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'delete_bank_account' => 'Bankverbindung löschen',
'archive_transaction' => 'Bankverbindung archivieren',
'delete_transaction' => 'Bankverbindung löschen',
- 'otp_code_message' => 'Geben Sie den per E-Mail erhaltenen Code ein.',
+ 'otp_code_message' => 'Wir haben einen Code an :email gesendet. Geben Sie diesen Code ein, um fortzufahren.',
'otp_code_subject' => 'Ihr einmaliger Zugangscode',
'otp_code_body' => 'Ihr einmaliger Passcode lautet :code',
'delete_tax_rate' => 'Steuersatz löschen',
'restore_tax_rate' => 'Steuersatz wiederherstellen',
- 'company_backup_file' => 'Select company backup file',
- 'company_backup_file_help' => 'Please upload the .zip file used to create this backup.',
- 'backup_restore' => 'Backup | Restore',
- 'export_company' => 'Create company backup',
- 'backup' => 'Backup',
-
+ 'company_backup_file' => 'Sicherungskopie des Unternehmens auswählen',
+ 'company_backup_file_help' => 'Bitte laden Sie die .zip-Datei hoch, mit der Sie diese Sicherungskopie erstellt haben.',
+ 'backup_restore' => 'Sicherungskopie | Wiederherstellen',
+ '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_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.',
+ 'subscription_blocked_title' => 'Produkt nicht verfügbar.',
+ 'purchase_order_created' => 'Bestellung erstellt',
+ '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',
+ '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',
);
return $LANG;
diff --git a/lang/el/texts.php b/lang/el/texts.php
index cc70ac93c4c5..1bfb24ce4651 100644
--- a/lang/el/texts.php
+++ b/lang/el/texts.php
@@ -4301,7 +4301,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ email που είναι συνδεδεμένη με το λογαριασμό σ
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/en/texts.php b/lang/en/texts.php
index 365b1f1362dd..3328738d4297 100644
--- a/lang/en/texts.php
+++ b/lang/en/texts.php
@@ -202,7 +202,7 @@ $LANG = array(
'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',
@@ -4922,8 +4922,11 @@ $LANG = array(
'matomo_url' => 'Matomo URL',
'matomo_id' => 'Matomo Id',
'action_add_to_invoice' => 'Add To Invoice',
+ 'danger_zone' => 'Danger Zone',
+
);
+
return $LANG;
?>
diff --git a/lang/en_GB/texts.php b/lang/en_GB/texts.php
index 651150cb9726..c5ba3ed380bb 100644
--- a/lang/en_GB/texts.php
+++ b/lang/en_GB/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/es/texts.php b/lang/es/texts.php
index 389b87daa0a9..a18ee8e23f15 100644
--- a/lang/es/texts.php
+++ b/lang/es/texts.php
@@ -4299,7 +4299,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4894,7 +4894,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4904,7 +4904,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/es_ES/texts.php b/lang/es_ES/texts.php
index c50debfab96d..b959d47b5cdc 100644
--- a/lang/es_ES/texts.php
+++ b/lang/es_ES/texts.php
@@ -4291,7 +4291,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'becs_mandate' => 'Al proporcionar los detalles de su cuenta bancaria, acepta esta Solicitud de débito directo y el acuerdo de servicio de solicitud de débito directo, y autoriza a Stripe Payments Australia Pty Ltd ACN 160 180 343 Número de identificación de usuario de débito directo 507156 (“Stripe”) para debitar su cuenta a través de Bulk Electronic Clearing System (BECS) en nombre de :company (el “Comerciante”) por cualquier importe que el Comerciante le comunique por separado. Usted certifica que es titular de una cuenta o un signatario autorizado de la cuenta que se menciona arriba.',
'you_need_to_accept_the_terms_before_proceeding' => 'Debe aceptar los términos antes de continuar.',
'direct_debit' => 'Débito directo',
- 'clone_to_expense' => 'Clonar a gasto',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pagos de débito preautorizados',
'invalid_amount' => 'Monto invalido. Solo valores numéricos y/o decimales.',
@@ -4886,7 +4886,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4896,7 +4896,22 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/et/texts.php b/lang/et/texts.php
index b374714c788a..5dd80f4aaf79 100644
--- a/lang/et/texts.php
+++ b/lang/et/texts.php
@@ -4298,7 +4298,7 @@ $LANG = array(
'becs_mandate' => 'Oma pangakonto andmete esitamisega nõustute sellega Otsekorralduse taotlus ja otsekorraldustaotluse teenuselepingja volitada Stripe Payments Australia Pty Ltd ACN 160 180 343 otsekorralduse kasutaja ID-numbrit 507156 ("Stripe") debiteerima teie kontot elektroonilise hulgiarveldussüsteemi (BECS) kaudu ettevõtte :company ("Müüja") nimel mis tahes summade eest müüja teile eraldi edastas. Kinnitate, et olete ülalnimetatud konto omanik või volitatud allkirjastaja.',
'you_need_to_accept_the_terms_before_proceeding' => 'Enne jätkamist peate tingimustega nõustuma.',
'direct_debit' => 'Otsekorraldusega',
- 'clone_to_expense' => 'Klooni kuluks',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Kassasse',
'acss' => 'Eelvolitatud deebetmaksed',
'invalid_amount' => 'Vale summa. Ainult arv/kümnendväärtused.',
@@ -4893,7 +4893,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4903,7 +4903,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/fa/texts.php b/lang/fa/texts.php
index ac87460a990c..84cc31cb375f 100644
--- a/lang/fa/texts.php
+++ b/lang/fa/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/fi/texts.php b/lang/fi/texts.php
index 951a0514d1b7..e67bedc21ea6 100644
--- a/lang/fi/texts.php
+++ b/lang/fi/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'Antamalla pankkitietosi, hyväksyt seuraavan Direct Debit pyynnön ja Direct Debit pyyntö palvelunsopimuksen, ja hyväksyt Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) veloittaamaan tiliäsi Bulk Electronic Clearing System (BECS) maksutavalla. :company puolesta. (“Myyjä”) mikä tahansa summa erikseen, jotka toimitettuna sinulle Myyjän toimesta. Takaat, että olet tilin omistaja tai hyväksytty tilin haltija, joka on listattuna yläpuolella.',
'you_need_to_accept_the_terms_before_proceeding' => 'Sinun täytyy hyväksyä ehdot jatkaaksesi.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Kopioi kuluksi',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Esihyväksy debit korttimaksut',
'invalid_amount' => 'Väärä summa. Numero/desimaalit ainostaan.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/fr/texts.php b/lang/fr/texts.php
index d441034d1f40..878c9bd0ba1e 100644
--- a/lang/fr/texts.php
+++ b/lang/fr/texts.php
@@ -4295,7 +4295,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4890,7 +4890,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4900,7 +4900,22 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php
index 4216292f3351..804f48a5789c 100644
--- a/lang/fr_CA/texts.php
+++ b/lang/fr_CA/texts.php
@@ -195,7 +195,7 @@ $LANG = array(
'csv_file' => 'Fichier CSV',
'export_clients' => 'Exporter les données de clients',
'created_client' => 'Le client a été créé avec succès',
- 'created_clients' => ':count clients ont été créés avec succès',
+ 'created_clients' => ':count client(s) ont été créés avec succès',
'updated_settings' => 'Les paramètres ont été mis à jour avec succès',
'removed_logo' => 'Le logo a été supprimé avec succès',
'sent_message' => 'Le message a été envoyé avec succès',
@@ -219,7 +219,7 @@ $LANG = array(
'deleted_invoice' => 'La facture a été supprimée avec succès',
'deleted_invoices' => ':count factures supprimées avec succès',
'created_payment' => 'Le paiement a été créé avec succès',
- 'created_payments' => ':count paiements ont été créés avec succès',
+ 'created_payments' => ':count paiement(s) ont été créés avec succès',
'archived_payment' => 'Le paiement a été archivé avec succès',
'archived_payments' => ':count paiements ont été archivés avec succès',
'deleted_payment' => 'Le paiement a été supprimé avec succès',
@@ -254,7 +254,7 @@ $LANG = array(
'notification_invoice_paid' => 'Un paiement de :amount a été effectué par le client :client concernant la facture :invoice.',
'notification_invoice_sent' => 'Le client suivant :client a reçu par courriel la facture :invoice d\'un montant de :amount',
'notification_invoice_viewed' => 'Le client suivant :client a vu la facture :invoice d\'un montant de :amount',
- 'stripe_payment_text' => 'Invoice :invoicenumber for :amount for client :client',
+ 'stripe_payment_text' => 'Facture :invoicenumber d\'un montant de :amount pour le client :',
'stripe_payment_text_without_invoice' => 'Payment with no invoice for amount :amount for client :client',
'reset_password' => 'Vous pouvez réinitialiser votre mot de passe en cliquant sur le lien suivant :',
'secure_payment' => 'Paiement sécurisé',
@@ -2495,7 +2495,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'alipay' => 'Alipay',
'sofort' => 'Sofort',
'sepa' => 'SEPA Débit direct',
- 'name_without_special_characters' => 'Please enter a name with only the letters a-z and whitespaces',
+ 'name_without_special_characters' => 'Veuillez entrer un nom en utilisant seulement les lettres de a à z et des espaces.',
'enable_alipay' => 'Accepter Alipay',
'enable_sofort' => 'Accepter les tranferts de banques EU',
'stripe_alipay_help' => 'Ces passerelles doivent aussi être activées dans :link.',
@@ -2821,7 +2821,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'auto_archive_invoice' => 'Autoarchivage',
'auto_archive_invoice_help' => 'Archiver automatiquement les factures lorsqu\'elles sont payées.',
'auto_archive_quote' => 'Autoarchivage',
- 'auto_archive_quote_help' => 'Automatically archive quotes when converted to invoice.',
+ 'auto_archive_quote_help' => 'Archiver automatiquement les soumissions lorsque converti en facture',
'require_approve_quote' => 'Approbation de soumission requise',
'require_approve_quote_help' => 'Soumissions approuvées par le client requise.',
'allow_approve_expired_quote' => 'Autoriser l\'approbation de soumissions expirées',
@@ -3347,7 +3347,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'module' => 'Module',
'first_custom' => 'Premier personnalisé',
'second_custom' => 'Second personnalisé',
- 'third_custom' => 'Troisième latéral',
+ 'third_custom' => 'Troisième personnalisé',
'show_cost' => 'Afficher le coût',
'show_cost_help' => 'Afficher un champ de coût du produit pour suivre le profit',
'show_product_quantity' => 'Afficher la quantité de produit',
@@ -3409,7 +3409,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'credit_number_counter' => 'Compteur du numéro de crédit',
'reset_counter_date' => 'Remise à zéro du compteur de date',
'counter_padding' => 'Espacement du compteur',
- 'shared_invoice_quote_counter' => 'Share Invoice Quote Counter',
+ 'shared_invoice_quote_counter' => 'Compteur partagé pour les factures et les soumissions',
'default_tax_name_1' => 'Nom de taxe par défaut 1',
'default_tax_rate_1' => 'Taux de taxe par défaut 1',
'default_tax_name_2' => 'Nom de taxe par défaut 2',
@@ -3683,7 +3683,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'force_update_help' => 'Vous êtes sur la dernière version, mais il peut y avoir encore quelques mises à jour en cours',
'mark_paid_help' => 'Suivez les dépenses qui ont été payées',
'mark_invoiceable_help' => 'Activer la facturation des dépenses',
- 'add_documents_to_invoice_help' => 'Make the documents visible to client',
+ 'add_documents_to_invoice_help' => 'Rendre les documents visibles pour le client',
'convert_currency_help' => 'Définir un taux d\'échange',
'expense_settings' => 'Paramètres des dépenses',
'clone_to_recurring' => 'Cloner en récurrence',
@@ -4056,7 +4056,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'save_payment_method_details' => 'Enregistrer les infos de mode de paiement',
'new_card' => 'Nouvelle carte',
'new_bank_account' => 'Nouveau compte bancaire',
- 'company_limit_reached' => 'Limit of :limit companies per account.',
+ 'company_limit_reached' => 'Limite de :limit entreprises par compte.',
'credits_applied_validation' => 'Le total des crédits octroyés ne peut être supérieur au total des factures',
'credit_number_taken' => 'Ce numéro de crédit est déjà utilisé',
'credit_not_found' => 'Crédit introuvable',
@@ -4159,10 +4159,10 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'activate_company_help' => 'Activez les courriels, les factures récurrentes et les notifications',
'an_error_occurred_try_again' => 'Une erreur s\'est produite, veuillez réessayer',
'please_first_set_a_password' => 'Veuillez d\'abord définir un mot de passe',
- 'changing_phone_disables_two_factor' => 'Attention: modifier votre numéro de téléphone désactivera l\'authentification à deux facteurs (A2F)',
+ 'changing_phone_disables_two_factor' => 'Attention: modifier votre numéro de téléphone désactivera l\'authentification à deux facteurs 2FA',
'help_translate' => 'Aide à la traduction',
'please_select_a_country' => 'Veuillez sélectionner un pays',
- 'disabled_two_factor' => 'L\'authentification à deux facteurs (A2F) a été désactivée avec succès',
+ 'disabled_two_factor' => 'L\'authentification à deux facteurs 2FA a été désactivée avec succès',
'connected_google' => 'Le compte a été connecté avec succès',
'disconnected_google' => 'Le comte a été déconnecté avec succès',
'delivered' => 'Livré',
@@ -4194,7 +4194,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'client_id_number' => 'Numéro d\'identification du client',
'count_minutes' => ':count minutes',
'password_timeout' => 'Délai d\'expiration du mot de passe',
- 'shared_invoice_credit_counter' => 'Share Invoice/Credit Counter',
+ 'shared_invoice_credit_counter' => 'Partager le compteur pour les factures et les crédits',
'activity_80' => ':user a créé l\'abonnement :subscription',
'activity_81' => ':user a mis à jour l\'abonnement :subscription',
'activity_82' => ':user a archivé l\'abonnement :subscription',
@@ -4212,7 +4212,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'max_companies_desc' => 'Vous avez atteint le nombre maximum d\'entreprises. Supprimez des entreprises existantes pour en migrer de nouvelles.',
'migration_already_completed' => 'Entreprise déjà migrée',
'migration_already_completed_desc' => 'Il semble que vous ayez déjà migré :company_name vers la version V5 de Invoice Ninja. Si vous souhaitez recommecer, vous pouvez forcer la migration et supprimer les données existantes.',
- 'payment_method_cannot_be_authorized_first' => 'This payment method can be can saved for future use, once you complete your first transaction. Don\'t forget to check "Store details" during payment process.',
+ 'payment_method_cannot_be_authorized_first' => 'Cette méthode de paiement peut être enregistrée pour un usage ultérieur, lorsque vous aurez complété votre première transaction. N\'oubliez pas de cocher "Mémoriser les informations de carte de crédit" lors du processus de paiement.',
'new_account' => 'Nouveau compte',
'activity_100' => ':user a créé une facture récurrente :recurring_invoice',
'activity_101' => ':user a mis à jour une facture récurrente :recurring_invoice',
@@ -4228,7 +4228,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'user_duplicate_error' => 'Il n\'est pas possible d\'ajouter le même utilisateur pour la même entreprise',
'user_cross_linked_error' => 'Cet utilisateur existe, mais ne peut pas être associé à plusieurs comptes',
'ach_verification_notification_label' => 'Vérification',
- 'ach_verification_notification' => 'Connecting bank accounts require verification. Payment gateway will automatically send two small deposits for this purpose. These deposits take 1-2 business days to appear on the customer\'s online statement.',
+ 'ach_verification_notification' => 'La vérification est requise pour lier un compte bancaire. La plateforme de paiement fera une transfert automatique de deux petits montants. Ces dépôts peuvent prendre 1-2 jours ouvrables avant de s\'afficher sur le relevé du client.',
'login_link_requested_label' => 'Lien de connexion demandé',
'login_link_requested' => 'Il y a eu une demande de connexion à l\'aide d\'un lien. Si vous n\'avez pas fait cette requête, il est sécuritaire de l\'ignorer.',
'invoices_backup_subject' => 'La sauvegarde de votre entreprise est prête pour le téléchargement',
@@ -4240,35 +4240,35 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'company_import_failure_subject' => 'Erreur lors de l\'importation de :company',
'company_import_failure_body' => 'Il y a eu une erreur lors de l\'importation des données de l\'entreprise. Le message d\'erreur était:',
'recurring_invoice_due_date' => 'Date d\'échéance',
- 'amount_cents' => 'Amount in pennies,pence or cents. ie for $0.10 please enter 10',
+ 'amount_cents' => 'Montant en pennies, pences ou cents. Ex: pour $0.10 veuillez entrer 10',
'default_payment_method_label' => 'Méthode de paiement par défaut',
- 'default_payment_method' => 'Make this your preferred way of paying.',
- 'already_default_payment_method' => 'This is your preferred way of paying.',
+ 'default_payment_method' => 'Faire de cette méthode de paiement votre préférée',
+ 'already_default_payment_method' => 'Ceci est votre méthode de paiement favorite.',
'auto_bill_disabled' => 'Autofacturation désactivée',
'select_payment_method' => 'Sélectionner une méthode de paiement:',
- 'login_without_password' => 'Log in without password',
+ 'login_without_password' => 'Se connecter sans mot de passe',
'email_sent' => 'M\'envoyer un courriel quand une facture est envoyée',
- 'one_time_purchases' => 'One time purchases',
- 'recurring_purchases' => 'Recurring purchases',
- 'you_might_be_interested_in_following' => 'You might be interested in the following',
- 'quotes_with_status_sent_can_be_approved' => 'Only quotes with "Sent" status can be approved.',
- 'no_quotes_available_for_download' => 'No quotes available for download.',
+ 'one_time_purchases' => 'Achat définitif',
+ 'recurring_purchases' => 'Achat récurrent',
+ 'you_might_be_interested_in_following' => 'Ceci pourrait vous intéresser',
+ 'quotes_with_status_sent_can_be_approved' => 'Seulement les soumissions avant la mention envoyé peuvent être approuvé.',
+ 'no_quotes_available_for_download' => 'Aucune soumission disponible pour le téléchargement.',
'copyright' => 'Droits d\'auteur',
- 'user_created_user' => ':user created :created_user at :time',
+ 'user_created_user' => ':user a créé :created_user à :time',
'company_deleted' => 'Entreprise supprimée',
- 'company_deleted_body' => 'Company [ :company ] was deleted by :user',
+ 'company_deleted_body' => 'La compagnie [:company] a été supprimé par :user',
'back_to' => 'Retour à :url',
'stripe_connect_migration_title' => 'Connectez votre compte Stripe',
- 'stripe_connect_migration_desc' => 'Invoice Ninja v5 uses Stripe Connect to link your Stripe account to Invoice Ninja. This provides an additional layer of security for your account. Now that you data has migrated, you will need to Authorize Stripe to accept payments in v5.
To do this, navigate to Settings > Online Payments > Configure Gateways. Click on Stripe Connect and then under Settings click Setup Gateway. This will take you to Stripe to authorize Invoice Ninja and on your return your account will be successfully linked!',
- 'email_quota_exceeded_subject' => 'Account email quota exceeded.',
- 'email_quota_exceeded_body' => 'In a 24 hour period you have sent :quota emails.
We have paused your outbound emails.
Your email quota will reset at 23:00 UTC.',
- 'auto_bill_option' => 'Opt in or out of having this invoice automatically charged.',
- 'lang_Arabic' => 'Arabic',
- 'lang_Persian' => 'Persian',
- 'lang_Latvian' => 'Latvian',
- 'expiry_date' => 'Expiry date',
- 'cardholder_name' => 'Card holder name',
- 'recurring_quote_number_taken' => 'Recurring Quote number :number already taken',
+ 'stripe_connect_migration_desc' => 'Invoice Ninja v5 utilise Stripe Connect pour lier votre compte Stripe à Invoice Ninja. Cela fournit une couche de sécurité supplémentaire pour votre compte. Maintenant que vos données ont migré, vous devez autoriser Stripe à accepter les paiements dans la v5.
Pour ce faire, accédez à Paramètres > Paiements en ligne > Configurer les passerelles. Cliquez sur Stripe Connect, puis sous Paramètres, cliquez sur Configurer la passerelle. Cela vous amènera à Stripe pour autoriser Invoice Ninja et à votre retour, votre compte sera lié avec succès !',
+ 'email_quota_exceeded_subject' => 'Quota de courriel du compte dépassé.',
+ 'email_quota_exceeded_body' => 'Dans une période de 24 heures, vous avez envoyer :quota courriels.
Nous avons suspendu vos courriels sortants.
Votre quota de courriel sera réinitialisé à 23h00 UTC',
+ 'auto_bill_option' => 'Activez ou désactivez la facturation automatique de cette facture.',
+ 'lang_Arabic' => 'Arabe',
+ 'lang_Persian' => 'Persan',
+ 'lang_Latvian' => 'Letton',
+ 'expiry_date' => 'Date d\'expiration',
+ 'cardholder_name' => 'Nom du détenteur',
+ 'recurring_quote_number_taken' => 'Le numéro de soumission :number est déjà pris',
'account_type' => 'Account type',
'locality' => 'Locality',
'checking' => 'Checking',
@@ -4293,7 +4293,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4434,11 +4434,11 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'count_session' => '1 Session',
'count_sessions' => ':count Sessions',
'invoice_created' => 'Invoice Created',
- 'quote_created' => 'Quote Created',
+ 'quote_created' => 'Soumission créé',
'credit_created' => 'Credit Created',
'enterprise' => 'Enterprise',
'invoice_item' => 'Invoice Item',
- 'quote_item' => 'Quote Item',
+ 'quote_item' => 'Item de soumission',
'order' => 'Order',
'search_kanban' => 'Search Kanban',
'search_kanbans' => 'Search Kanban',
@@ -4458,7 +4458,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'owner_upgrade_to_paid_plan' => 'The account owner can upgrade to a paid plan to enable the advanced advanced settings',
'upgrade_to_paid_plan' => 'Upgrade to a paid plan to enable the advanced settings',
'invoice_payment_terms' => 'Invoice Payment Terms',
- 'quote_valid_until' => 'Quote Valid Until',
+ 'quote_valid_until' => 'Soumission valide jusqu\'au',
'no_headers' => 'No Headers',
'add_header' => 'Add Header',
'remove_header' => 'Remove Header',
@@ -4528,7 +4528,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'upgrade_to_add_company' => 'Upgrade your plan to add companies',
'file_saved_in_downloads_folder' => 'The file has been saved in the downloads folder',
'small' => 'Small',
- 'quotes_backup_subject' => 'Your quotes are ready for download',
+ 'quotes_backup_subject' => 'Vos soumissions sont prêtes pour le téléchargement',
'credits_backup_subject' => 'Your credits are ready for download',
'document_download_subject' => 'Your documents are ready for download',
'reminder_message' => 'Reminder for invoice :number for :balance',
@@ -4552,8 +4552,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'upgrade_to_view_reports' => 'Upgrade your plan to view reports',
'started_tasks' => 'Successfully started :value tasks',
'stopped_tasks' => 'Successfully stopped :value tasks',
- 'approved_quote' => 'Successfully apporved quote',
- 'approved_quotes' => 'Successfully :value approved quotes',
+ 'approved_quote' => 'Soumission approuvé avec succès',
+ 'approved_quotes' => ':value soumissions approuvé avec succès',
'client_website' => 'Client Website',
'invalid_time' => 'Invalid Time',
'signed_in_as' => 'Signed in as',
@@ -4587,15 +4587,15 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'show_product_description' => 'Show Product Description',
'show_product_description_help' => 'Include the description in the product dropdown',
'invoice_items' => 'Invoice Items',
- 'quote_items' => 'Quote Items',
+ 'quote_items' => 'Items de soumission',
'profitloss' => 'Profit and Loss',
'import_format' => 'Import Format',
'export_format' => 'Export Format',
'export_type' => 'Export Type',
'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',
- 'use_quote_terms_help' => 'When converting a quote to an invoice',
+ 'use_quote_terms' => 'Utiliser les termes de la soumission',
+ 'use_quote_terms_help' => 'Lors de la conversion d\'une soumission en facture',
'add_country' => 'Add Country',
'enable_tooltips' => 'Enable Tooltips',
'enable_tooltips_help' => 'Show tooltips when hovering the mouse',
@@ -4731,9 +4731,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'total_outstanding_invoices' => 'Outstanding Invoices',
'total_completed_payments' => 'Completed Payments',
'total_refunded_payments' => 'Refunded Payments',
- 'total_active_quotes' => 'Active Quotes',
- 'total_approved_quotes' => 'Approved Quotes',
- 'total_unapproved_quotes' => 'Unapproved Quotes',
+ 'total_active_quotes' => 'Soumissions actives',
+ 'total_approved_quotes' => 'Soumissions approuvées',
+ 'total_unapproved_quotes' => 'Soumissions non approuvées',
'total_logged_tasks' => 'Logged Tasks',
'total_invoiced_tasks' => 'Invoiced Tasks',
'total_paid_tasks' => 'Paid Tasks',
@@ -4759,7 +4759,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'php81_required' => 'Note: v5.5 requires PHP 8.1',
'bulk_email_purchase_orders' => 'Email Purchase Orders',
'bulk_email_invoices' => 'Email Invoices',
- 'bulk_email_quotes' => 'Email Quotes',
+ 'bulk_email_quotes' => 'Envoyer les soumissions par courriel',
'bulk_email_credits' => 'Email Credits',
'archive_purchase_order' => 'Archive Purchase Order',
'restore_purchase_order' => 'Restore Purchase Order',
@@ -4831,8 +4831,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'enable_applying_payments_later' => 'Enable Applying Payments Later',
'line_item_tax_rates' => 'Line Item Tax Rates',
'show_tasks_in_client_portal' => 'Show Tasks in Client Portal',
- 'notification_quote_expired_subject' => 'Quote :invoice has expired for :client',
- 'notification_quote_expired' => 'The following Quote :invoice for client :client and :amount has now expired.',
+ 'notification_quote_expired_subject' => 'La soumission :invoice a expiré pour :client',
+ 'notification_quote_expired' => 'La soumission :invoice pour le client :client au montant de :amount est expirée',
'auto_sync' => 'Auto Sync',
'refresh_accounts' => 'Refresh Accounts',
'upgrade_to_connect_bank_account' => 'Upgrade to Enterprise to connect your bank account',
@@ -4888,7 +4888,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4898,7 +4898,22 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/he/texts.php b/lang/he/texts.php
index c649631581b2..6123bb15ed35 100644
--- a/lang/he/texts.php
+++ b/lang/he/texts.php
@@ -4293,7 +4293,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4889,7 +4889,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4899,7 +4899,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/hr/texts.php b/lang/hr/texts.php
index dd5d060e989c..94925e687748 100644
--- a/lang/hr/texts.php
+++ b/lang/hr/texts.php
@@ -4302,7 +4302,7 @@ Nevažeći kontakt email',
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4897,7 +4897,7 @@ Nevažeći kontakt email',
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4907,7 +4907,22 @@ Nevažeći kontakt email',
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/it/texts.php b/lang/it/texts.php
index 3a3ca9b7f411..d81634c2da4a 100644
--- a/lang/it/texts.php
+++ b/lang/it/texts.php
@@ -4304,7 +4304,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4899,7 +4899,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4909,7 +4909,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/ja/texts.php b/lang/ja/texts.php
index c1206835edf7..355d911f93dd 100644
--- a/lang/ja/texts.php
+++ b/lang/ja/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/lt/texts.php b/lang/lt/texts.php
index 707a55c1bdc1..9d105ef6a0ae 100644
--- a/lang/lt/texts.php
+++ b/lang/lt/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/lv_LV/texts.php b/lang/lv_LV/texts.php
index c13f6d544b96..9d41588662a0 100644
--- a/lang/lv_LV/texts.php
+++ b/lang/lv_LV/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/mk_MK/texts.php b/lang/mk_MK/texts.php
index bdb84eb8fae1..badd60d36290 100644
--- a/lang/mk_MK/texts.php
+++ b/lang/mk_MK/texts.php
@@ -4302,7 +4302,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4897,7 +4897,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4907,7 +4907,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/nb_NO/texts.php b/lang/nb_NO/texts.php
index 7d94e95422c8..269677f60fb3 100644
--- a/lang/nb_NO/texts.php
+++ b/lang/nb_NO/texts.php
@@ -4301,7 +4301,7 @@ $LANG = array(
'becs_mandate' => 'By providing your bank account details, you agree to this Direct Debit Request and the Direct Debit Request service agreement, and authorise Stripe Payments Australia Pty Ltd ACN 160 180 343 Direct Debit User ID number 507156 (“Stripe”) to debit your account through the Bulk Electronic Clearing System (BECS) on behalf of :company (the “Merchant”) for any amounts separately communicated to you by the Merchant. You certify that you are either an account holder or an authorised signatory on the account listed above.',
'you_need_to_accept_the_terms_before_proceeding' => 'You need to accept the terms before proceeding.',
'direct_debit' => 'Direct Debit',
- 'clone_to_expense' => 'Clone to expense',
+ 'clone_to_expense' => 'Clone to Expense',
'checkout' => 'Checkout',
'acss' => 'Pre-authorized debit payments',
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
@@ -4896,7 +4896,7 @@ $LANG = array(
'delete_bank_account' => 'Delete Bank Account',
'archive_transaction' => 'Archive Transaction',
'delete_transaction' => 'Delete Transaction',
- 'otp_code_message' => 'Enter the code emailed.',
+ 'otp_code_message' => 'We have sent a code to :email enter this code to proceed.',
'otp_code_subject' => 'Your one time passcode code',
'otp_code_body' => 'Your one time passcode is :code',
'delete_tax_rate' => 'Delete Tax Rate',
@@ -4906,7 +4906,22 @@ $LANG = array(
'backup_restore' => 'Backup | Restore',
'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_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.',
+ 'subscription_blocked_title' => 'Product not available.',
+ 'purchase_order_created' => 'Purchase Order Created',
+ 'purchase_order_sent' => 'Purchase Order Sent',
+ 'purchase_order_viewed' => 'Purchase Order Viewed',
+ 'purchase_order_accepted' => 'Purchase Order Accepted',
+ 'credit_payment_error' => 'The credit amount can not be greater than the payment amount',
+ 'convert_payment_currency_help' => 'Set an exchange rate when entering a manual payment',
+ 'convert_expense_currency_help' => 'Set an exchange rate when creating an expense',
+ 'matomo_url' => 'Matomo URL',
+ 'matomo_id' => 'Matomo Id',
+ 'action_add_to_invoice' => 'Add To Invoice',
);
return $LANG;
diff --git a/lang/nl/texts.php b/lang/nl/texts.php
index 94dbf447a153..e29db171503e 100644
--- a/lang/nl/texts.php
+++ b/lang/nl/texts.php
@@ -8,7 +8,7 @@ $LANG = array(
'address' => 'Adres',
'address1' => 'Straat',
'address2' => 'Appartement / Busnr.',
- 'city' => 'Plaats',
+ 'city' => 'Stad',
'state' => 'Provincie',
'postal_code' => 'Postcode',
'country_id' => 'Land',
@@ -68,8 +68,8 @@ $LANG = array(
'tax_rates' => 'BTW-tarieven',
'rate' => 'Tarief',
'settings' => 'Instellingen',
- 'enable_invoice_tax' => 'Het opgeven van BTW op de volledige factuur aanzetten',
- 'enable_line_item_tax' => 'Het opgeven van de BTW per regel aanzetten',
+ 'enable_invoice_tax' => 'Activeer het opgeven van BTW op de volledige factuur ',
+ 'enable_line_item_tax' => 'Activeer het opgeven van de BTW per regel ',
'dashboard' => 'Dashboard',
'dashboard_totals_in_all_currencies_help' => 'Notitie: voeg een :link genaamd ":name" toe om het totaal in een enkele valuta weer te geven.',
'clients' => 'Klanten',
@@ -78,7 +78,7 @@ $LANG = array(
'credits' => 'Creditnota\'s',
'history' => 'Geschiedenis',
'search' => 'Zoeken',
- 'sign_up' => 'Aanmelden',
+ 'sign_up' => 'Registreren',
'guest' => 'Gast',
'company_details' => 'Bedrijfsdetails',
'online_payments' => 'Online betalingen',
@@ -86,14 +86,14 @@ $LANG = array(
'import_export' => 'Importeer/Exporteer',
'done' => 'Klaar',
'save' => 'Opslaan',
- 'create' => 'Aanmaken',
+ 'create' => 'Crëeren',
'upload' => 'Uploaden',
'import' => 'Importeer',
- 'download' => 'Download',
+ 'download' => 'Downloaden',
'cancel' => 'Annuleren',
'close' => 'Sluiten',
'provide_email' => 'Geef een geldig emailadres aub.',
- 'powered_by' => 'Factuur gemaakt via',
+ 'powered_by' => 'Factuur gemaakt met',
'no_items' => 'Geen artikelen',
'recurring_invoices' => 'Terugkerende facturen',
'recurring_help' => '
Stuur klanten automatisch wekelijks, twee keer per maand, maandelijks, per kwartaal of jaarlijks dezelfde facturen.
@@ -200,7 +200,7 @@ $LANG = array( 'removed_logo' => 'Het logo is verwijderd', 'sent_message' => 'Het bericht is verzonden', 'invoice_error' => 'Selecteer een klant alsjeblieft en verbeter eventuele fouten', - 'limit_clients' => 'Sorry, this will exceed the limit of :count clients. Please upgrade to a paid plan.', + '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', 'confirmation_required' => 'Bevestig het e-mailadres, :link om de bevestigingsmail opnieuw te ontvangen.', @@ -254,8 +254,8 @@ $LANG = array( 'notification_invoice_paid' => 'Een betaling voor :amount is gemaakt door klant :client voor Factuur :invoice.', 'notification_invoice_sent' => 'Factuur :invoice ter waarde van :amount is per e-mail naar :client verstuurd.', 'notification_invoice_viewed' => ':client heeft factuur :invoice ter waarde van :amount bekeken.', - 'stripe_payment_text' => 'Invoice :invoicenumber for :amount for client :client', - 'stripe_payment_text_without_invoice' => 'Payment with no invoice for amount :amount for client :client', + 'stripe_payment_text' => 'Factuur :invoicenumber voor het bedrag van :amount voor klant :client', + 'stripe_payment_text_without_invoice' => 'Betaling met geen factuur for het bedrag van :amount voor klant :client', 'reset_password' => 'U kunt het wachtwoord van uw account resetten door op de volgende link te klikken:', 'secure_payment' => 'Beveiligde betaling', 'card_number' => 'Kaartnummer', @@ -647,7 +647,7 @@ $LANG = array( 'invoice_no' => 'Factuur nr.', 'quote_no' => 'Offerte nr.', 'recent_payments' => 'Recente betalingen', - 'outstanding' => 'Uitstaand', + 'outstanding' => 'Openstaand', 'manage_companies' => 'Beheer bedrijven', 'total_revenue' => 'Totale inkomsten', 'current_user' => 'Huidige gebruiker', @@ -901,7 +901,7 @@ $LANG = array( 'expense' => 'Uitgave', 'expenses' => 'Uitgaven', 'new_expense' => 'Nieuwe uitgave', - 'enter_expense' => 'Voer uitgave in', + 'enter_expense' => 'Nieuwe uitgave', 'vendors' => 'Leveranciers', 'new_vendor' => 'Nieuwe leverancier', 'payment_terms_net' => 'Betaaltermijn', @@ -931,7 +931,7 @@ $LANG = array( 'view_expense_num' => 'Uitgave #:expense', 'updated_expense' => 'De uitgave is gewijzigd', 'created_expense' => 'De uitgave is aangemaakt', - 'enter_expense' => 'Voer uitgave in', + 'enter_expense' => 'Nieuwe uitgave', 'view' => 'Bekijken', 'restore_expense' => 'Herstel uitgave', 'invoice_expense' => 'Factureer uitgave', @@ -1211,7 +1211,7 @@ $LANG = array( 'refund' => 'Terugbetaling', 'are_you_sure_refund' => 'Geselecteerde betalingen terugbetalen?', 'status_pending' => 'In afwachting', - 'status_completed' => 'Voltooid', + 'status_completed' => 'Voltooide', 'status_failed' => 'Mislukt', 'status_partially_refunded' => 'Deels terugbetaald', 'status_partially_refunded_amount' => ':amount terugbetaald', @@ -1751,8 +1751,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'lang_Japanese' => 'Japans', 'lang_Lithuanian' => 'Litouws', 'lang_Norwegian' => 'Noors', - 'lang_Polish' => 'Pools -', + 'lang_Polish' => 'Pools', 'lang_Spanish' => 'Spaans', 'lang_Spanish - Spain' => 'Spaans - Spanje', 'lang_Swedish' => 'Zweeds', @@ -2495,7 +2494,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'alipay' => 'Alipay', 'sofort' => 'Sofort', 'sepa' => 'SEPA Automatisch incasso', - 'name_without_special_characters' => 'Please enter a name with only the letters a-z and whitespaces', + 'name_without_special_characters' => 'Geef een naam op met enkel letters van a-z en spaties', 'enable_alipay' => 'Accepteer Alipay', 'enable_sofort' => 'Accepteer Europese banktransacties', 'stripe_alipay_help' => 'Deze gateways moeten ook worden geactiveerd in :link.', @@ -2910,7 +2909,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'invoice_status_id' => 'Factuurstatus', 'click_plus_to_add_item' => 'Klik op + om een artikel toe te voegen', 'count_selected' => ':count geselecteerd', - 'dismiss' => 'Seponeren', + 'dismiss' => 'Annuleren', 'please_select_a_date' => 'Gelieve een datum selecteren', 'please_select_a_client' => 'Gelieve een klant te selecteren', 'language' => 'Taal', @@ -2953,7 +2952,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'payment_status_1' => 'In afwachting', 'payment_status_2' => 'Ongeldig', 'payment_status_3' => 'Mislukt', - 'payment_status_4' => 'Voltooid', + 'payment_status_4' => 'Voltooide', 'payment_status_5' => 'Deels terugbetaald', 'payment_status_6' => 'Gecrediteerd', 'send_receipt_to_client' => 'Verzend ontvangstbewijs naar de klant', @@ -3301,7 +3300,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'group3' => 'Aangepaste Groep 3', 'group4' => 'Aangepaste Groep 4', 'number' => 'Nummer', - 'count' => 'Telling', + 'count' => 'Teller', 'is_active' => 'Is actief', 'contact_last_login' => 'Contact laatste Login', 'contact_full_name' => 'Contact Volledige Naam', @@ -3609,7 +3608,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'client_created' => 'Klant aangemaakt', 'online_payment_email' => 'Online betalingsmail', 'manual_payment_email' => 'Handmatige betalingsmail', - 'completed' => 'Voltooid', + 'completed' => 'Voltooide', 'gross' => 'Bruto', 'net_amount' => 'Netto bedrag', 'net_balance' => 'Netto balans', @@ -3893,7 +3892,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'to_update_run' => 'Om bij te werken voer', 'registration_url' => 'Registratie link', 'show_product_cost' => 'Laat product kosten zien', - 'complete' => 'Voltooien', + 'complete' => 'Voltooi', 'next' => 'Volgende', 'next_step' => 'Volgende stap', 'notification_credit_sent_subject' => 'Krediet :invoice is verzonden naar :client', @@ -4074,17 +4073,17 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'max_refundable_invoice' => 'Poging tot terugbetaling is groter dan toegestaan voor invoice id :invoice, maximum terug te betalen bedrag is :amount', 'refund_without_invoices' => 'Als u probeert een betaling met bijgevoegde facturen terug te betalen, geef dan geldige facturen op die moeten worden terugbetaald.', 'refund_without_credits' => 'Als u probeert een betaling met bijgevoegde tegoeden terug te betalen, geef dan geldige tegoeden op die moeten worden terugbetaald.', - 'max_refundable_credit' => 'Attempting to refund more than allowed for credit :credit, maximum refundable amount is :amount', + 'max_refundable_credit' => 'Bedrag van terugbetaling overschrijdt het credit bedrag :credit, het maximum toegelaten teruggave is beperkt tot :amount', 'project_client_do_not_match' => 'Project klant komt niet overeen met entiteit klant', 'quote_number_taken' => 'Offertenummer reeds in gebruik', 'recurring_invoice_number_taken' => 'Terugkerend factuurnummer :number al in gebruik', 'user_not_associated_with_account' => 'Gebruiker niet geassocieerd met deze account', 'amounts_do_not_balance' => 'Bedragen zijn niet correct.', - 'insufficient_applied_amount_remaining' => 'Insufficient applied amount remaining to cover payment.', + 'insufficient_applied_amount_remaining' => 'Onvoldoende toegepast bedrag om de betaling te dekken.', 'insufficient_credit_balance' => 'Onvoldoende balans op krediet.', 'one_or_more_invoices_paid' => 'één of meer van deze facturen werden betaald', 'invoice_cannot_be_refunded' => 'Factuur-ID :number kan niet worden terugbetaald', - 'attempted_refund_failed' => 'Attempting to refund :amount only :refundable_amount available for refund', + 'attempted_refund_failed' => 'Poging tot terugbetaling van het bedrag van :amount. Het maximale terugbetaling os gelimiteerd tot :refundable_amount', 'user_not_associated_with_this_account' => 'Deze gebruiker kan niet aan dit bedrijf worden gekoppeld. Misschien hebben ze al een gebruiker geregistreerd op een ander account?', 'migration_completed' => 'Migratie is voltooid', 'migration_completed_description' => 'Uw migratie is voltooid. Controleer uw gegevens nadat u zich heeft aangemeld.', @@ -4204,7 +4203,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'click_to_continue' => 'Klik hier om verder te gaan', 'notification_invoice_created_body' => 'Het volgende factuur :invoice was aangemaakt voor klant :client voor een bedrag :amount.', 'notification_invoice_created_subject' => 'Factuur :invoice aangemaakt voor :client', - 'notification_quote_created_body' => 'The following quote :invoice was created for client :client for :amount.', + 'notification_quote_created_body' => 'Volgende voorstel :invoice is aangemaakt voor klant :client voor het bedrag van :amount', 'notification_quote_created_subject' => 'Offerte :invoice werd aangemaakt voor :client', 'notification_credit_created_body' => 'De volgende kredietfactuur :invoice werd aangemaakt voor client :client ter waarde van :amount.', 'notification_credit_created_subject' => 'Kredietfactuur :invoice werd aangemaakt voor :client', @@ -4220,15 +4219,18 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'activity_103' => ':user heeft terugkerend factuur :recurring_invoice verwijderd', 'activity_104' => ':user heeft terugkerend factuur :recurring_invoice teruggezet', 'new_login_detected' => 'Nieuwe login gedetecteerd voor uw account.', - 'new_login_description' => 'You recently logged in to your Invoice Ninja account from a new location or device: