diff --git a/app/Console/Commands/CreateAccount.php b/app/Console/Commands/CreateAccount.php
index f40814f28585..e62bb6bfd988 100644
--- a/app/Console/Commands/CreateAccount.php
+++ b/app/Console/Commands/CreateAccount.php
@@ -121,28 +121,6 @@ class CreateAccount extends Command
(new CreateCompanyTaskStatuses($company, $user))->handle();
(new VersionCheck())->handle();
- $this->warmCache();
}
- private function warmCache()
- {
- /* Warm up the cache !*/
- $cached_tables = config('ninja.cached_tables');
-
- foreach ($cached_tables as $name => $class) {
- if ($name == 'payment_terms') {
- $orderBy = 'num_days';
- } elseif ($name == 'fonts') {
- $orderBy = 'sort_order';
- } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
- $orderBy = 'name';
- } else {
- $orderBy = 'id';
- }
- $tableData = $class::orderBy($orderBy)->get();
- if ($tableData->count()) {
- Cache::forever($name, $tableData);
- }
- }
- }
}
diff --git a/app/Console/Commands/CreateSingleAccount.php b/app/Console/Commands/CreateSingleAccount.php
index f2769de649a1..50d915cca2a4 100644
--- a/app/Console/Commands/CreateSingleAccount.php
+++ b/app/Console/Commands/CreateSingleAccount.php
@@ -97,10 +97,6 @@ class CreateSingleAccount extends Command
$this->count = 5;
$this->gateway = $this->argument('gateway');
- $this->info('Warming up cache');
-
- $this->warmCache();
-
$this->createSmallAccount();
@@ -774,32 +770,6 @@ class CreateSingleAccount extends Command
return $line_items;
}
- private function warmCache()
- {
- /* Warm up the cache !*/
- $cached_tables = config('ninja.cached_tables');
-
- foreach ($cached_tables as $name => $class) {
- // check that the table exists in case the migration is pending
- if (! Schema::hasTable((new $class())->getTable())) {
- continue;
- }
- if ($name == 'payment_terms') {
- $orderBy = 'num_days';
- } elseif ($name == 'fonts') {
- $orderBy = 'sort_order';
- } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
- $orderBy = 'name';
- } else {
- $orderBy = 'id';
- }
- $tableData = $class::orderBy($orderBy)->get();
- if ($tableData->count()) {
- Cache::forever($name, $tableData);
- }
- }
- }
-
private function createGateways($company, $user)
{
if (config('ninja.testvars.stripe') && ($this->gateway == 'all' || $this->gateway == 'stripe')) {
diff --git a/app/Console/Commands/CreateTestData.php b/app/Console/Commands/CreateTestData.php
index 496e877c45d9..6bb5811ecb4f 100644
--- a/app/Console/Commands/CreateTestData.php
+++ b/app/Console/Commands/CreateTestData.php
@@ -86,8 +86,6 @@ class CreateTestData extends Command
$this->info('Warming up cache');
- $this->warmCache();
-
$this->createSmallAccount();
$this->createMediumAccount();
$this->createLargeAccount();
@@ -673,31 +671,4 @@ class CreateTestData extends Command
return $line_items;
}
- private function warmCache()
- {
- /* Warm up the cache !*/
- $cached_tables = config('ninja.cached_tables');
-
- foreach ($cached_tables as $name => $class) {
- if (! Cache::has($name)) {
- // check that the table exists in case the migration is pending
- if (! Schema::hasTable((new $class())->getTable())) {
- continue;
- }
- if ($name == 'payment_terms') {
- $orderBy = 'num_days';
- } elseif ($name == 'fonts') {
- $orderBy = 'sort_order';
- } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
- $orderBy = 'name';
- } else {
- $orderBy = 'id';
- }
- $tableData = $class::orderBy($orderBy)->get();
- if ($tableData->count()) {
- Cache::forever($name, $tableData);
- }
- }
- }
- }
}
diff --git a/app/Console/Commands/DemoMode.php b/app/Console/Commands/DemoMode.php
index 7ea0edb4e604..8e4014d1ef17 100644
--- a/app/Console/Commands/DemoMode.php
+++ b/app/Console/Commands/DemoMode.php
@@ -84,15 +84,13 @@ class DemoMode extends Command
$this->invoice_repo = new InvoiceRepository();
- $cached_tables = config('ninja.cached_tables');
-
$this->info('Migrating');
Artisan::call('migrate:fresh --force');
$this->info('Seeding');
- Artisan::call('db:seed --force');
- $this->buildCache(true);
+ Artisan::call('db:seed --force');
+ Artisan::call('cache:clear');
$this->info('Seeding Random Data');
$this->createSmallAccount();
@@ -623,31 +621,4 @@ class DemoMode extends Command
return $line_items;
}
- private function warmCache()
- {
- /* Warm up the cache !*/
- $cached_tables = config('ninja.cached_tables');
-
- foreach ($cached_tables as $name => $class) {
- if (! Cache::has($name)) {
- // check that the table exists in case the migration is pending
- if (! Schema::hasTable((new $class())->getTable())) {
- continue;
- }
- if ($name == 'payment_terms') {
- $orderBy = 'num_days';
- } elseif ($name == 'fonts') {
- $orderBy = 'sort_order';
- } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
- $orderBy = 'name';
- } else {
- $orderBy = 'id';
- }
- $tableData = $class::orderBy($orderBy)->get();
- if ($tableData->count()) {
- Cache::forever($name, $tableData);
- }
- }
- }
- }
}
diff --git a/app/Console/Commands/HostedMigrations.php b/app/Console/Commands/HostedMigrations.php
index bf83024f0729..3a005852e921 100644
--- a/app/Console/Commands/HostedMigrations.php
+++ b/app/Console/Commands/HostedMigrations.php
@@ -62,7 +62,6 @@ class HostedMigrations extends Command
*/
public function handle()
{
- $this->buildCache();
if (! MultiDB::userFindAndSetDb($this->option('email'))) {
$this->info('Could not find a user with that email address');
diff --git a/app/Console/Commands/ImportMigrations.php b/app/Console/Commands/ImportMigrations.php
index aa78739e1117..3be007aa4509 100644
--- a/app/Console/Commands/ImportMigrations.php
+++ b/app/Console/Commands/ImportMigrations.php
@@ -75,8 +75,6 @@ class ImportMigrations extends Command
{
$this->faker = Factory::create();
- $this->buildCache();
-
$path = $this->option('path') ?? public_path('storage/migrations/import');
$directory = new DirectoryIterator($path);
diff --git a/app/Console/Commands/PostUpdate.php b/app/Console/Commands/PostUpdate.php
index 9de7b55b0710..648ebb2d6966 100644
--- a/app/Console/Commands/PostUpdate.php
+++ b/app/Console/Commands/PostUpdate.php
@@ -86,8 +86,7 @@ class PostUpdate extends Command
info('queue restarted');
- $this->buildCache(true);
-
+ Artisan::call('cache:clear');
VersionCheck::dispatch();
info('Sent for version check');
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index f18d1c3d2f4a..2c1a731228ad 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -27,6 +27,7 @@ use App\Jobs\Ninja\TaskScheduler;
use App\Jobs\Quote\QuoteCheckExpired;
use App\Jobs\Subscription\CleanStaleInvoiceOrder;
use App\Jobs\Util\DiskCleanup;
+use App\Jobs\Util\QuoteReminderJob;
use App\Jobs\Util\ReminderJob;
use App\Jobs\Util\SchedulerCheck;
use App\Jobs\Util\UpdateExchangeRates;
@@ -55,6 +56,9 @@ class Kernel extends ConsoleKernel
/* Send reminders */
$schedule->job(new ReminderJob())->hourly()->withoutOverlapping()->name('reminder-job')->onOneServer();
+ /* Send quote reminders */
+ $schedule->job(new QuoteReminderJob())->hourly()->withoutOverlapping()->name('quote-reminder-job')->onOneServer();
+
/* Sends recurring invoices*/
$schedule->job(new RecurringInvoicesCron())->hourly()->withoutOverlapping()->name('recurring-invoice-job')->onOneServer();
diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php
index aa9bb7064d34..f3731531734d 100644
--- a/app/DataMapper/CompanySettings.php
+++ b/app/DataMapper/CompanySettings.php
@@ -507,7 +507,25 @@ class CompanySettings extends BaseSettings
public int $task_round_to_nearest = 1;
+ /** quote reminders */
+ public $email_quote_template_reminder1 = '';
+ public $email_quote_subject_reminder1 = '';
+ public $enable_quote_reminder1 = false;
+ public $quote_num_days_reminder1 = 0;
+ public $quote_schedule_reminder1 = ''; //before_valid_until_date,after_valid_until_date,after_quote_date
+ public $quote_late_fee_amount1 = 0;
+ public $quote_late_fee_percent1 = 0;
+
+
+
public static $casts = [
+ 'enable_quote_reminder1' => 'bool',
+ 'quote_num_days_reminder1' => 'int',
+ 'quote_schedule_reminder1' => 'string',
+ 'quote_late_fee_amount1' => 'float',
+ 'quote_late_fee_percent1' => 'float',
+ 'email_quote_template_reminder1' => 'string',
+ 'email_quote_subject_reminder1' => 'string',
'task_round_up' => 'bool',
'task_round_to_nearest' => 'int',
'e_quote_type' => 'string',
@@ -962,6 +980,7 @@ class CompanySettings extends BaseSettings
'$invoice.due_date',
'$invoice.total',
'$invoice.balance_due',
+ '$invoice.project',
],
'quote_details' => [
'$quote.number',
@@ -969,6 +988,7 @@ class CompanySettings extends BaseSettings
'$quote.date',
'$quote.valid_until',
'$quote.total',
+ '$quote.project',
],
'credit_details' => [
'$credit.number',
diff --git a/app/DataMapper/EmailTemplateDefaults.php b/app/DataMapper/EmailTemplateDefaults.php
index c5390aa1d826..ff24f0d2f1f2 100644
--- a/app/DataMapper/EmailTemplateDefaults.php
+++ b/app/DataMapper/EmailTemplateDefaults.php
@@ -115,12 +115,32 @@ class EmailTemplateDefaults
case 'email_vendor_notification_body':
return self::emailVendorNotificationBody();
+ case 'email_quote_template_reminder1':
+ return self::emailQuoteReminder1Body();
+
+ case 'email_quote_subject_reminder1':
+ return self::emailQuoteReminder1Subject();
+
default:
return self::emailInvoiceTemplate();
}
}
+ public static function emailQuoteReminder1Subject()
+ {
+ return ctrans('texts.quote_reminder_subject', ['quote' => '$number', 'company' => '$company.name']);
+ }
+
+ public static function emailQuoteReminder1Body()
+ {
+
+ $invoice_message = '
$client
'.self::transformText('quote_reminder_message').'
$view_button
';
+
+ return $invoice_message;
+
+ }
+
public static function emailVendorNotificationSubject()
{
return self::transformText('vendor_notification_subject');
diff --git a/app/DataMapper/Tax/BaseRule.php b/app/DataMapper/Tax/BaseRule.php
index dca4576c6e3d..78eb1bd9445b 100644
--- a/app/DataMapper/Tax/BaseRule.php
+++ b/app/DataMapper/Tax/BaseRule.php
@@ -262,7 +262,7 @@ class BaseRule implements RuleInterface
return $this->client->state;
}
- return USStates::getState(strlen($this->client->postal_code) > 1 ? $this->client->postal_code : $this->client->shipping_postal_code);
+ return USStates::getState(strlen($this->client->postal_code ?? '') > 1 ? $this->client->postal_code : $this->client->shipping_postal_code);
} catch (\Exception $e) {
return 'CA';
diff --git a/app/DataProviders/USStates.php b/app/DataProviders/USStates.php
index 666f9356ef2a..a638bca2f937 100644
--- a/app/DataProviders/USStates.php
+++ b/app/DataProviders/USStates.php
@@ -34006,7 +34006,7 @@ class USStates
'WA', 'WA', 'WA', 'WA', 'WA', 'WA', 'WA', 'AK', 'AK', 'AK', 'AK', 'AK'
];
- $prefix = substr($zip, 0, 3);
+ $prefix = substr(($zip ?? ''), 0, 3);
$index = intval($prefix);
/* converts prefix to integer */
return $zip_by_state[$index] == "--" ? false : $zip_by_state[$index];
diff --git a/app/Events/Quote/QuoteReminderWasEmailed.php b/app/Events/Quote/QuoteReminderWasEmailed.php
new file mode 100644
index 000000000000..8ec95d798469
--- /dev/null
+++ b/app/Events/Quote/QuoteReminderWasEmailed.php
@@ -0,0 +1,28 @@
+setTimezone($timezone_name)->format($date_format_default) ?? $input;
+ return Carbon::createFromFormat("d-m-Y", $input)->setTimezone($timezone_name)->format($date_format_default);
} catch (\Exception $e) {
return $input;
}
diff --git a/app/Helpers/Invoice/InvoiceItemSum.php b/app/Helpers/Invoice/InvoiceItemSum.php
index ef2cddb0ef3b..76ba72ca5e4f 100644
--- a/app/Helpers/Invoice/InvoiceItemSum.php
+++ b/app/Helpers/Invoice/InvoiceItemSum.php
@@ -332,7 +332,7 @@ class InvoiceItemSum
public function setLineTotal($total)
{
- $this->item->line_total = $total;
+ $this->item->line_total = (float) $total;
return $this;
}
diff --git a/app/Helpers/Invoice/ProRata.php b/app/Helpers/Invoice/ProRata.php
index d6d692b073c2..c96166c64df4 100644
--- a/app/Helpers/Invoice/ProRata.php
+++ b/app/Helpers/Invoice/ProRata.php
@@ -70,9 +70,9 @@ class ProRata
}
/** @var \App\Models\RecurringInvoice $recurring_invoice **/
- $recurring_invoice = RecurringInvoice::find($invoice->recurring_id)->first();
+ $recurring_invoice = RecurringInvoice::find($invoice->recurring_id);
- if (! $recurring_invoice) {
+ if (! $recurring_invoice) { // @phpstan-ignore-line
throw new \Exception("Invoice isn't attached to a recurring invoice");
}
diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php
index 93445d7caf09..dac6478f326b 100644
--- a/app/Http/Controllers/ActivityController.php
+++ b/app/Http/Controllers/ActivityController.php
@@ -11,19 +11,31 @@
namespace App\Http\Controllers;
-use App\Http\Requests\Activity\DownloadHistoricalEntityRequest;
-use App\Http\Requests\Activity\ShowActivityRequest;
-use App\Models\Activity;
-use App\Transformers\ActivityTransformer;
-use App\Utils\HostedPDF\NinjaPdf;
-use App\Utils\Ninja;
-use App\Utils\PhantomJS\Phantom;
-use App\Utils\Traits\MakesHash;
-use App\Utils\Traits\Pdf\PageNumbering;
-use App\Utils\Traits\Pdf\PdfMaker;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Storage;
use stdClass;
+use App\Utils\Ninja;
+use App\Models\Client;
+use App\Models\Invoice;
+use App\Models\Activity;
+use Illuminate\Http\Request;
+use App\Utils\Traits\MakesHash;
+use App\Utils\PhantomJS\Phantom;
+use App\Utils\HostedPDF\NinjaPdf;
+use App\Utils\Traits\Pdf\PdfMaker;
+use App\Utils\Traits\Pdf\PageNumbering;
+use Illuminate\Support\Facades\Storage;
+use App\Transformers\ActivityTransformer;
+use App\Http\Requests\Activity\StoreNoteRequest;
+use App\Http\Requests\Activity\ShowActivityRequest;
+use App\Http\Requests\Activity\DownloadHistoricalEntityRequest;
+use App\Models\Credit;
+use App\Models\Expense;
+use App\Models\Payment;
+use App\Models\PurchaseOrder;
+use App\Models\Quote;
+use App\Models\RecurringExpense;
+use App\Models\RecurringInvoice;
+use App\Models\Task;
+use App\Models\Vendor;
class ActivityController extends BaseController
{
@@ -177,4 +189,89 @@ class ActivityController extends BaseController
echo $pdf;
}, $filename, ['Content-Type' => 'application/pdf']);
}
+
+ public function note(StoreNoteRequest $request)
+ {
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+
+ $entity = $request->getEntity();
+
+ $activity = new Activity();
+ $activity->account_id = $user->account_id;
+ $activity->company_id = $user->company()->id;
+ $activity->notes = $request->notes;
+ $activity->user_id = $user->id;
+ $activity->ip = $request->ip();
+ $activity->activity_type_id = Activity::USER_NOTE;
+
+ switch (get_class($entity)) {
+ case Invoice::class:
+ $activity->invoice_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ $activity->vendor_id = $entity->vendor_id;
+ break;
+ case Credit::class:
+ $activity->credit_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ $activity->vendor_id = $entity->vendor_id;
+ $activity->invoice_id = $entity->invoice_id;
+ break;
+ case Client::class:
+ $activity->client_id = $entity->id;
+ break;
+ case Quote::class:
+ $activity->quote_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ $activity->vendor_id = $entity->vendor_id;
+ break;
+ case RecurringInvoice::class:
+ $activity->recurring_invoice_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ break;
+ case Expense::class:
+ $activity->expense_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ $activity->vendor_id = $entity->vendor_id;
+ break;
+ case RecurringExpense::class:
+ $activity->recurring_expense_id = $entity->id;
+ $activity->expense_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ $activity->vendor_id = $entity->vendor_id;
+ break;
+ case Vendor::class:
+ $activity->vendor_id = $entity->id;
+ break;
+ case PurchaseOrder::class:
+ $activity->purchase_order_id = $entity->id;
+ $activity->expense_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ $activity->vendor_id = $entity->vendor_id;
+ case Task::class:
+ $activity->task_id = $entity->id;
+ $activity->expense_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ $activity->vendor_id = $entity->vendor_id;
+ case Payment::class:
+ $activity->payment_id = $entity->id;
+ $activity->expense_id = $entity->id;
+ $activity->client_id = $entity->client_id;
+ $activity->project_id = $entity->project_id;
+ default:
+ # code...
+ break;
+ }
+
+ $activity->save();
+
+ return $this->itemResponse($activity);
+ }
}
diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php
index e9b7fcc96dfa..dbd7545e9dc1 100644
--- a/app/Http/Controllers/BaseController.php
+++ b/app/Http/Controllers/BaseController.php
@@ -1158,8 +1158,6 @@ class BaseController extends Controller
$data['path'] = $this->setBuild();
- $this->buildCache();
-
if (Ninja::isSelfHost() && $account->set_react_as_default_ap) {
return response()->view('react.index', $data)->header('X-Frame-Options', 'SAMEORIGIN', false);
} else {
diff --git a/app/Http/Controllers/SelfUpdateController.php b/app/Http/Controllers/SelfUpdateController.php
index c5c2f07f2398..09127929bd77 100644
--- a/app/Http/Controllers/SelfUpdateController.php
+++ b/app/Http/Controllers/SelfUpdateController.php
@@ -112,8 +112,7 @@ class SelfUpdateController extends BaseController
Artisan::call('view:clear');
Artisan::call('migrate', ['--force' => true]);
Artisan::call('config:clear');
-
- $this->buildCache(true);
+ Artisan::call('cache:clear');
$this->runModelChecks();
diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php
index 7c91dc91a019..eadc26b0fd74 100644
--- a/app/Http/Controllers/SetupController.php
+++ b/app/Http/Controllers/SetupController.php
@@ -159,8 +159,6 @@ class SetupController extends Controller
(new VersionCheck())->handle();
- $this->buildCache(true);
-
return redirect('/');
} catch (Exception $e) {
nlog($e->getMessage());
@@ -287,8 +285,7 @@ class SetupController extends Controller
Artisan::call('migrate', ['--force' => true]);
Artisan::call('db:seed', ['--force' => true]);
-
- $this->buildCache(true);
+ Artisan::call('cache:clear');
(new SchedulerCheck())->handle();
diff --git a/app/Http/Middleware/StartupCheck.php b/app/Http/Middleware/StartupCheck.php
deleted file mode 100644
index 75a4a010c951..000000000000
--- a/app/Http/Middleware/StartupCheck.php
+++ /dev/null
@@ -1,109 +0,0 @@
- $class) {
- if ($request->has('clear_cache') || ! Cache::has($name)) {
- // check that the table exists in case the migration is pending
- if (! Schema::hasTable((new $class())->getTable())) {
- continue;
- }
- if ($name == 'payment_terms') {
- $orderBy = 'num_days';
- } elseif ($name == 'fonts') {
- $orderBy = 'sort_order';
- } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
- $orderBy = 'name';
- } else {
- $orderBy = 'id';
- }
- $tableData = $class::orderBy($orderBy)->get();
- if ($tableData->count()) {
- Cache::forever($name, $tableData);
- }
- }
- }
-
- /*Build template cache*/
- if ($request->has('clear_cache') || ! Cache::has('templates')) {
- $this->buildTemplates();
- }
-
- return $next($request);
- }
-
- private function buildTemplates($name = 'templates')
- {
- $data = [
- 'invoice' => [
- 'subject' => EmailTemplateDefaults::emailInvoiceSubject(),
- 'body' => EmailTemplateDefaults::emailInvoiceTemplate(),
- ],
- 'quote' => [
- 'subject' => EmailTemplateDefaults::emailQuoteSubject(),
- 'body' => EmailTemplateDefaults::emailQuoteTemplate(),
- ],
- 'payment' => [
- 'subject' => EmailTemplateDefaults::emailPaymentSubject(),
- 'body' => EmailTemplateDefaults::emailPaymentTemplate(),
- ],
- 'reminder1' => [
- 'subject' => EmailTemplateDefaults::emailReminder1Subject(),
- 'body' => EmailTemplateDefaults::emailReminder1Template(),
- ],
- 'reminder2' => [
- 'subject' => EmailTemplateDefaults::emailReminder2Subject(),
- 'body' => EmailTemplateDefaults::emailReminder2Template(),
- ],
- 'reminder3' => [
- 'subject' => EmailTemplateDefaults::emailReminder3Subject(),
- 'body' => EmailTemplateDefaults::emailReminder3Template(),
- ],
- 'reminder_endless' => [
- 'subject' => EmailTemplateDefaults::emailReminderEndlessSubject(),
- 'body' => EmailTemplateDefaults::emailReminderEndlessTemplate(),
- ],
- 'statement' => [
- 'subject' => EmailTemplateDefaults::emailStatementSubject(),
- 'body' => EmailTemplateDefaults::emailStatementTemplate(),
- ],
- ];
-
- Cache::forever($name, $data);
- }
-}
diff --git a/app/Http/Requests/Activity/StoreNoteRequest.php b/app/Http/Requests/Activity/StoreNoteRequest.php
new file mode 100644
index 000000000000..8233cfd0592c
--- /dev/null
+++ b/app/Http/Requests/Activity/StoreNoteRequest.php
@@ -0,0 +1,79 @@
+checkAuthority();
+ }
+
+ public function rules()
+ {
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+
+ $rules = [
+ 'entity' => 'required|bail|in:invoices,quotes,credits,recurring_invoices,clients,vendors,credits,payments,projects,tasks,expenses,recurring_expenses,bank_transactions,purchase_orders',
+ 'entity_id' => ['required','bail', Rule::exists($this->entity, 'id')->where('company_id', $user->company()->id)],
+ 'notes' => 'required|bail',
+ ];
+
+ return $rules;
+ }
+
+ public function prepareForValidation()
+ {
+ $input = $this->all();
+
+ if(isset($input['entity_id']) && $input['entity_id'] != null) {
+ $input['entity_id'] = $this->decodePrimaryKey($input['entity_id']);
+ }
+
+ $this->replace($input);
+ }
+
+ public function checkAuthority(): bool
+ {
+
+ $this->error_message = ctrans('texts.authorization_failure');
+
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+
+ $entity = $this->getEntity();
+
+ return $user->isAdmin() || $user->can('view', $entity);
+
+ }
+
+ public function getEntity()
+ {
+ if(!$this->entity)
+ return false;
+
+ $class = "\\App\\Models\\".ucfirst(Str::camel(rtrim($this->entity, 's')));
+ return $class::withTrashed()->find(is_string($this->entity_id) ? $this->decodePrimaryKey($this->entity_id) : $this->entity_id);
+
+ }
+
+}
diff --git a/app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php b/app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php
index 23dbb8b2ad9c..0af8542f97ab 100644
--- a/app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php
+++ b/app/Http/Requests/Preview/PreviewPurchaseOrderRequest.php
@@ -24,7 +24,6 @@ class PreviewPurchaseOrderRequest extends Request
use CleanLineItems;
private ?Vendor $vendor = null;
- private string $entity_plural = '';
/**
* Determine if the user is authorized to make this request.
@@ -72,7 +71,7 @@ class PreviewPurchaseOrderRequest extends Request
{
$invitation = false;
- if(! $this->entity_id ?? false) {
+ if(! isset($this->entity_id)) {
return $this->stubInvitation();
}
@@ -130,12 +129,5 @@ class PreviewPurchaseOrderRequest extends Request
return $entity;
}
- private function convertEntityPlural(string $entity): self
- {
-
- $this->entity_plural = 'purchase_orders';
-
- return $this;
- }
}
diff --git a/app/Http/Requests/User/DisconnectUserMailerRequest.php b/app/Http/Requests/User/DisconnectUserMailerRequest.php
index 00a0e8b07ddb..b1c805176eee 100644
--- a/app/Http/Requests/User/DisconnectUserMailerRequest.php
+++ b/app/Http/Requests/User/DisconnectUserMailerRequest.php
@@ -15,7 +15,6 @@ use App\Http\Requests\Request;
class DisconnectUserMailerRequest extends Request
{
- private bool $phone_has_changed = false;
/**
* Determine if the user is authorized to make this request.
diff --git a/app/Import/Transformer/Csv/ClientTransformer.php b/app/Import/Transformer/Csv/ClientTransformer.php
index 3599c9edf06b..287b6ab2e049 100644
--- a/app/Import/Transformer/Csv/ClientTransformer.php
+++ b/app/Import/Transformer/Csv/ClientTransformer.php
@@ -70,16 +70,18 @@ class ClientTransformer extends BaseTransformer
'custom_value2' => $this->getString($data, 'client.custom_value2'),
'custom_value3' => $this->getString($data, 'client.custom_value3'),
'custom_value4' => $this->getString($data, 'client.custom_value4'),
- 'balance' => preg_replace(
- '/[^0-9,.]+/',
- '',
- $this->getFloat($data, 'client.balance')
- ),
- 'paid_to_date' => preg_replace(
- '/[^0-9,.]+/',
- '',
- $this->getFloat($data, 'client.paid_to_date')
- ),
+ // 'balance' => preg_replace(
+ // '/[^0-9,.]+/',
+ // '',
+ // $this->getFloat($data, 'client.balance')
+ // ),
+ // 'paid_to_date' => preg_replace(
+ // '/[^0-9,.]+/',
+ // '',
+ // $this->getFloat($data, 'client.paid_to_date')
+ // ),
+ 'paid_to_date' => 0,
+ 'balance' => 0,
'credit_balance' => 0,
'settings' => $settings,
'client_hash' => Str::random(40),
diff --git a/app/Jobs/Bank/MatchBankTransactions.php b/app/Jobs/Bank/MatchBankTransactions.php
index e5d4ddad6a48..c377a9c05dce 100644
--- a/app/Jobs/Bank/MatchBankTransactions.php
+++ b/app/Jobs/Bank/MatchBankTransactions.php
@@ -387,7 +387,7 @@ class MatchBankTransactions implements ShouldQueue
$hashed_keys = [];
- foreach($this->attachable_invoices as $attachable_invoice){
+ foreach($this->attachable_invoices as $attachable_invoice){ //@phpstan-ignore-line
$hashed_keys[] = $this->encodePrimaryKey($attachable_invoice['id']);
}
diff --git a/app/Jobs/Subscription/CleanStaleInvoiceOrder.php b/app/Jobs/Subscription/CleanStaleInvoiceOrder.php
index c585aa33647a..6cc5a6440a12 100644
--- a/app/Jobs/Subscription/CleanStaleInvoiceOrder.php
+++ b/app/Jobs/Subscription/CleanStaleInvoiceOrder.php
@@ -60,7 +60,7 @@ class CleanStaleInvoiceOrder implements ShouldQueue
Invoice::query()
->withTrashed()
->where('status_id', Invoice::STATUS_SENT)
- ->where('created_at', '<', now()->subMinutes(30))
+ ->where('updated_at', '<', now()->subHour())
->where('balance', '>', 0)
->whereJsonContains('line_items', ['type_id' => '3'])
->cursor()
@@ -88,7 +88,7 @@ class CleanStaleInvoiceOrder implements ShouldQueue
Invoice::query()
->withTrashed()
->where('status_id', Invoice::STATUS_SENT)
- ->where('created_at', '<', now()->subMinutes(30))
+ ->where('updated_at', '<', now()->subHour())
->where('balance', '>', 0)
->whereJsonContains('line_items', ['type_id' => '3'])
->cursor()
diff --git a/app/Jobs/Task/TaskAssigned.php b/app/Jobs/Task/TaskAssigned.php
new file mode 100644
index 000000000000..63f79109a376
--- /dev/null
+++ b/app/Jobs/Task/TaskAssigned.php
@@ -0,0 +1,71 @@
+db);
+
+ $company_user = $this->task->assignedCompanyUser();
+
+ if($this->findEntityAssignedNotification($company_user, 'task'))
+ {
+ $mo = new EmailObject();
+ $mo->subject = ctrans('texts.task_assigned_subject', ['task' => $this->task->number, 'date' => now()->setTimeZone($this->task->company->timezone()->name)->format($this->task->company->date_format()) ]);
+ $mo->body = ctrans('texts.task_assigned_body',['task' => $this->task->number, 'description' => $this->task->description ?? '', 'client' => $this->task->client ? $this->task->client->present()->name() : ' ']);
+ $mo->text_body = ctrans('texts.task_assigned_body',['task' => $this->task->number, 'description' => $this->task->description ?? '', 'client' => $this->task->client ? $this->task->client->present()->name() : ' ']);
+ $mo->company_key = $this->task->company->company_key;
+ $mo->html_template = 'email.template.generic';
+ $mo->to = [new Address($this->task->assigned_user->email, $this->task->assigned_user->present()->name())];
+ $mo->email_template_body = 'task_assigned_body';
+ $mo->email_template_subject = 'task_assigned_subject';
+
+ (new Email($mo, $this->task->company))->handle();
+
+ }
+
+ }
+
+ public function failed($exception = null)
+ {
+ }
+}
diff --git a/app/Jobs/User/VerifyPhone.php b/app/Jobs/User/VerifyPhone.php
index 54aa7565289b..58281a07ec77 100644
--- a/app/Jobs/User/VerifyPhone.php
+++ b/app/Jobs/User/VerifyPhone.php
@@ -56,7 +56,7 @@ class VerifyPhone implements ShouldQueue
$twilio = new \Twilio\Rest\Client($sid, $token);
- $country = $this->user->account?->companies()?->first()?->country();
+ $country = $this->user->account?->companies()?->first()?->country(); //@phpstan-ignore-line
if (!$country || strlen($this->user->phone) < 2) {
return;
@@ -73,7 +73,7 @@ class VerifyPhone implements ShouldQueue
return;
}
- if ($phone_number && strlen($phone_number->phoneNumber) > 1) {
+ if ($phone_number && strlen($phone_number->phoneNumber) > 1) { //@phpstan-ignore-line
$this->user->phone = $phone_number->phoneNumber;
$this->user->verified_phone_number = true;
$this->user->save();
diff --git a/app/Jobs/Util/QuoteReminderJob.php b/app/Jobs/Util/QuoteReminderJob.php
new file mode 100644
index 000000000000..b2fe8dbc1603
--- /dev/null
+++ b/app/Jobs/Util/QuoteReminderJob.php
@@ -0,0 +1,323 @@
+format('Y-m-d h:i:s'));
+
+ Quote::query()
+ ->where('is_deleted', 0)
+ ->whereIn('status_id', [Invoice::STATUS_SENT])
+ ->whereNull('deleted_at')
+ ->where('next_send_date', '<=', now()->toDateTimeString())
+ ->whereHas('client', function ($query) {
+ $query->where('is_deleted', 0)
+ ->where('deleted_at', null);
+ })
+ ->whereHas('company', function ($query) {
+ $query->where('is_disabled', 0);
+ })
+ ->with('invitations')->chunk(50, function ($quotes) {
+ foreach ($quotes as $quote) {
+ $this->sendReminderForQuote($quote);
+ }
+
+ sleep(1);
+ });
+ } else {
+ //multiDB environment, need to
+
+ foreach (MultiDB::$dbs as $db) {
+ MultiDB::setDB($db);
+
+ nrlog("Sending quote reminders on db {$db} ".now()->format('Y-m-d h:i:s'));
+
+ Quote::query()
+ ->where('is_deleted', 0)
+ ->whereIn('status_id', [Invoice::STATUS_SENT])
+ ->whereNull('deleted_at')
+ ->where('next_send_date', '<=', now()->toDateTimeString())
+ ->whereHas('client', function ($query) {
+ $query->where('is_deleted', 0)
+ ->where('deleted_at', null);
+ })
+ ->whereHas('company', function ($query) {
+ $query->where('is_disabled', 0);
+ })
+ ->with('invitations')->chunk(50, function ($quotes) {
+
+ foreach ($quotes as $quote) {
+ $this->sendReminderForQuote($quote);
+ }
+
+ sleep(1);
+ });
+ }
+ }
+ }
+
+ private function sendReminderForQuote(Quote $quote)
+ {
+ App::forgetInstance('translator');
+ $t = app('translator');
+ $t->replace(Ninja::transformTranslations($quote->client->getMergedSettings()));
+ App::setLocale($quote->client->locale());
+
+ if ($quote->isPayable()) {
+ //Attempts to prevent duplicates from sending
+ if ($quote->reminder_last_sent && Carbon::parse($quote->reminder_last_sent)->startOfDay()->eq(now()->startOfDay())) {
+ nrlog("caught a duplicate reminder for quote {$quote->number}");
+ return;
+ }
+
+ $reminder_template = $quote->calculateTemplate('invoice');
+ nrlog("#{$quote->number} => reminder template = {$reminder_template}");
+ $quote->service()->touchReminder($reminder_template)->save();
+ $fees = $this->calcLateFee($quote, $reminder_template);
+
+ if($quote->isLocked()) {
+ return $this->addFeeToNewQuote($quote, $reminder_template, $fees);
+ }
+
+ $quote = $this->setLateFee($quote, $fees[0], $fees[1]);
+
+ //20-04-2022 fixes for endless reminders - generic template naming was wrong
+ $enabled_reminder = 'enable_'.$reminder_template;
+ if ($reminder_template == 'endless_reminder') {
+ $enabled_reminder = 'enable_reminder_endless';
+ }
+
+ if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'reminder_endless', 'endless_reminder']) &&
+ $quote->client->getSetting($enabled_reminder) &&
+ $quote->client->getSetting('send_reminders') &&
+ (Ninja::isSelfHost() || $quote->company->account->isPaidHostedClient())) {
+ $quote->invitations->each(function ($invitation) use ($quote, $reminder_template) {
+ if ($invitation->contact && !$invitation->contact->trashed() && $invitation->contact->email) {
+ EmailEntity::dispatch($invitation, $invitation->company, $reminder_template);
+ nrlog("Firing reminder email for invoice {$quote->number} - {$reminder_template}");
+ $quote->entityEmailEvent($invitation, $reminder_template);
+ $quote->sendEvent(Webhook::EVENT_REMIND_INVOICE, "client");
+ }
+ });
+ }
+ $quote->service()->setReminder()->save();
+ } else {
+ $quote->next_send_date = null;
+ $quote->save();
+ }
+ }
+
+ private function addFeeToNewQuote(Quote $over_due_quote, string $reminder_template, array $fees)
+ {
+
+ $amount = $fees[0];
+ $percent = $fees[1];
+
+ $quote = false;
+
+ //2024-06-07 this early return prevented any reminders from sending for users who enabled lock_invoices.
+ if ($amount > 0 || $percent > 0) {
+ // return;
+
+ $fee = $amount;
+
+ if ($over_due_quote->partial > 0) {
+ $fee += round($over_due_quote->partial * $percent / 100, 2);
+ } else {
+ $fee += round($over_due_quote->balance * $percent / 100, 2);
+ }
+
+ /** @var \App\Models\Invoice $quote */
+ $quote = InvoiceFactory::create($over_due_quote->company_id, $over_due_quote->user_id);
+ $quote->client_id = $over_due_quote->client_id;
+ $quote->date = now()->format('Y-m-d');
+ $quote->due_date = now()->format('Y-m-d');
+
+ $quote_item = new InvoiceItem();
+ $quote_item->type_id = '5';
+ $quote_item->product_key = trans('texts.fee');
+ $quote_item->notes = ctrans('texts.late_fee_added_locked_invoice', ['invoice' => $over_due_quote->number, 'date' => $this->translateDate(now()->startOfDay(), $over_due_invoice->client->date_format(), $over_due_invoice->client->locale())]);
+ $quote_item->quantity = 1;
+ $quote_item->cost = $fee;
+
+ $quote_items = [];
+ $quote_items[] = $quote_item;
+
+ $quote->line_items = $quote_items;
+
+ /**Refresh Invoice values*/
+ $quote = $quote->calc()->getInvoice();
+ $quote->service()
+ ->createInvitations()
+ ->applyNumber()
+ ->markSent()
+ ->save();
+ }
+
+ if(!$quote) {
+ $quote = $over_due_quote;
+ }
+
+ $enabled_reminder = 'enable_'.$reminder_template;
+ // if ($reminder_template == 'endless_reminder') {
+ // $enabled_reminder = 'enable_reminder_endless';
+ // }
+
+ if (in_array($reminder_template, ['reminder1', 'reminder2', 'reminder3', 'reminder_endless', 'endless_reminder']) &&
+ $quote->client->getSetting($enabled_reminder) &&
+ $quote->client->getSetting('send_reminders') &&
+ (Ninja::isSelfHost() || $quote->company->account->isPaidHostedClient())) {
+ $quote->invitations->each(function ($invitation) use ($quote, $reminder_template) {
+ if ($invitation->contact && !$invitation->contact->trashed() && $invitation->contact->email) {
+ EmailEntity::dispatch($invitation, $invitation->company, $reminder_template);
+ nrlog("Firing reminder email for qipte {$quote->number} - {$reminder_template}");
+ event(new QuoteReminderWasEmailed($invitation, $invitation->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null), $reminder_template));
+ $quote->sendEvent(Webhook::EVENT_REMIND_QUOTE, "client");
+ }
+ });
+ }
+
+ $quote->service()->setReminder()->save();
+
+ }
+
+ /**
+ * Calculates the late if - if any - and rebuilds the invoice
+ *
+ * @param Invoice $quote
+ * @param string $template
+ * @return array
+ */
+ private function calcLateFee($quote, $template): array
+ {
+ $late_fee_amount = 0;
+ $late_fee_percent = 0;
+
+ switch ($template) {
+ case 'reminder1':
+ $late_fee_amount = $quote->client->getSetting('late_fee_amount1');
+ $late_fee_percent = $quote->client->getSetting('late_fee_percent1');
+ break;
+ case 'reminder2':
+ $late_fee_amount = $quote->client->getSetting('late_fee_amount2');
+ $late_fee_percent = $quote->client->getSetting('late_fee_percent2');
+ break;
+ case 'reminder3':
+ $late_fee_amount = $quote->client->getSetting('late_fee_amount3');
+ $late_fee_percent = $quote->client->getSetting('late_fee_percent3');
+ break;
+ case 'endless_reminder':
+ $late_fee_amount = $quote->client->getSetting('late_fee_endless_amount');
+ $late_fee_percent = $quote->client->getSetting('late_fee_endless_percent');
+ break;
+ default:
+ $late_fee_amount = 0;
+ $late_fee_percent = 0;
+ break;
+ }
+
+ return [$late_fee_amount, $late_fee_percent];
+ }
+
+ /**
+ * Applies the late fee to the invoice line items
+ *
+ * @param Invoice $quote
+ * @param float $amount The fee amount
+ * @param float $percent The fee percentage amount
+ *
+ * @return Invoice
+ */
+ private function setLateFee($quote, $amount, $percent): Invoice
+ {
+
+ $temp_invoice_balance = $quote->balance;
+
+ if ($amount <= 0 && $percent <= 0) {
+ return $quote;
+ }
+
+ $fee = $amount;
+
+ if ($quote->partial > 0) {
+ $fee += round($quote->partial * $percent / 100, 2);
+ } else {
+ $fee += round($quote->balance * $percent / 100, 2);
+ }
+
+ $quote_item = new InvoiceItem();
+ $quote_item->type_id = '5';
+ $quote_item->product_key = trans('texts.fee');
+ $quote_item->notes = ctrans('texts.late_fee_added', ['date' => $this->translateDate(now()->startOfDay(), $quote->client->date_format(), $quote->client->locale())]);
+ $quote_item->quantity = 1;
+ $quote_item->cost = $fee;
+
+ $quote_items = $quote->line_items;
+ $quote_items[] = $quote_item;
+
+ $quote->line_items = $quote_items;
+
+ /**Refresh Invoice values*/
+ $quote = $quote->calc()->getInvoice();
+
+ $quote->ledger()->updateInvoiceBalance($quote->balance - $temp_invoice_balance, "Late Fee Adjustment for invoice {$quote->number}");
+ $quote->client->service()->calculateBalance();
+
+ return $quote;
+ }
+}
diff --git a/app/Libraries/MultiDB.php b/app/Libraries/MultiDB.php
index 712ed37184e4..962bc657f6f7 100644
--- a/app/Libraries/MultiDB.php
+++ b/app/Libraries/MultiDB.php
@@ -449,6 +449,23 @@ class MultiDB
return false;
}
+
+ public static function findUserByReferralCode(string $referral_code): ?User
+ {
+ $current_db = config('database.default');
+
+ foreach (self::$dbs as $db) {
+ if ($user = User::on($db)->where('referral_code', $referral_code)->first()) {
+ self::setDb($db);
+ return $user;
+ }
+ }
+
+ self::setDB($current_db);
+
+ return null;
+ }
+
public static function findAndSetDbByClientId($client_id): ?Client
{
$current_db = config('database.default');
@@ -538,7 +555,7 @@ class MultiDB
$current_db = config('database.default');
- if(SMSNumbers::hasNumber($phone)) {
+ if(SMSNumbers::hasNumber($phone)) { // @phpstan-ignore-line
return true;
}
diff --git a/app/Listeners/Quote/QuoteReminderEmailActivity.php b/app/Listeners/Quote/QuoteReminderEmailActivity.php
new file mode 100644
index 000000000000..f343b248b218
--- /dev/null
+++ b/app/Listeners/Quote/QuoteReminderEmailActivity.php
@@ -0,0 +1,60 @@
+company->db);
+
+ $fields = new stdClass();
+
+ $user_id = isset($event->event_vars['user_id']) ? $event->event_vars['user_id'] : $event->invitation->quote->user_id;
+
+ $reminder = match($event->template) {
+ 'quote_reminder1' => 142,
+ default => 142,
+ };
+
+ $fields->user_id = $user_id;
+ $fields->quote_id = $event->invitation->quote_id;
+ $fields->company_id = $event->invitation->company_id;
+ $fields->client_contact_id = $event->invitation->client_contact_id;
+ $fields->client_id = $event->invitation->quote->client_id;
+ $fields->activity_type_id = $reminder;
+
+ $this->activity_repo->save($fields, $event->invitation, $event->event_vars);
+ }
+}
diff --git a/app/Models/Activity.php b/app/Models/Activity.php
index 97e561b41c97..13e52f5619ac 100644
--- a/app/Models/Activity.php
+++ b/app/Models/Activity.php
@@ -261,7 +261,10 @@ class Activity extends StaticModel
public const EMAIL_STATEMENT = 140;
-
+ public const USER_NOTE = 141;
+
+ public const QUOTE_REMINDER1_SENT = 142;
+
protected $casts = [
'is_system' => 'boolean',
'updated_at' => 'timestamp',
diff --git a/app/Models/Company.php b/app/Models/Company.php
index 8a0ef899de12..d1e402ece50b 100644
--- a/app/Models/Company.php
+++ b/app/Models/Company.php
@@ -842,7 +842,6 @@ class Company extends BaseModel
->get();
}
-
public function resolveRouteBinding($value, $field = null)
{
return $this->where('id', $this->decodePrimaryKey($value))
diff --git a/app/Models/Quote.php b/app/Models/Quote.php
index 283d55b3aeb2..b0f7a17f6d53 100644
--- a/app/Models/Quote.php
+++ b/app/Models/Quote.php
@@ -399,4 +399,26 @@ class Quote extends BaseModel
{
return $entity_string;
}
+
+
+ /**
+ * isPayable - proxy for matching Invoice status as
+ * to whether the quote is still valid, allows
+ * reuse of UpdateReminder class
+ *
+ * @return bool
+ */
+ public function isPayable(): bool
+ {
+ if ($this->status_id == self::STATUS_SENT && $this->is_deleted == false && $this->due_date->gte(now()->addSeconds($this->timezone_offset()))) {
+ return true;
+ } elseif ($this->status_id == self::STATUS_DRAFT || $this->is_deleted) {
+ return false;
+ } elseif (in_array($this->status_id, [self::STATUS_APPROVED, self::STATUS_CONVERTED])) {
+ return false;
+ } else {
+ return false;
+ }
+ }
+
}
diff --git a/app/Models/Task.php b/app/Models/Task.php
index 87a63d0da2dd..4646f203c450 100644
--- a/app/Models/Task.php
+++ b/app/Models/Task.php
@@ -11,10 +11,11 @@
namespace App\Models;
-use App\Utils\Traits\MakesHash;
use Carbon\CarbonInterval;
-use Illuminate\Database\Eloquent\SoftDeletes;
+use App\Models\CompanyUser;
use Illuminate\Support\Carbon;
+use App\Utils\Traits\MakesHash;
+use Illuminate\Database\Eloquent\SoftDeletes;
/**
* App\Models\Task
@@ -332,4 +333,11 @@ class Task extends BaseModel
})->toArray();
}
+ public function assignedCompanyUser()
+ {
+ if(!$this->assigned_user_id)
+ return false;
+
+ return CompanyUser::where('company_id', $this->company_id)->where('user_id', $this->assigned_user_id)->first();
+ }
}
diff --git a/app/Models/User.php b/app/Models/User.php
index c10132696530..b3b71535599e 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -67,6 +67,7 @@ use Laracasts\Presenter\PresentableTrait;
* @property string|null $custom_value2
* @property string|null $custom_value3
* @property string|null $custom_value4
+ * @property object|null $referral_meta
* @property int|null $created_at
* @property int|null $updated_at
* @property int|null|Carbon $deleted_at
@@ -181,6 +182,7 @@ class User extends Authenticatable implements MustVerifyEmail
'created_at' => 'timestamp',
'deleted_at' => 'timestamp',
'oauth_user_token_expiry' => 'datetime',
+ 'referral_meta' => 'object',
];
public function name()
@@ -680,4 +682,5 @@ class User extends Authenticatable implements MustVerifyEmail
{
return ctrans('texts.user');
}
+
}
diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php
index 02eb4911f006..3b90960b60c5 100644
--- a/app/Models/Webhook.php
+++ b/app/Models/Webhook.php
@@ -174,7 +174,10 @@ class Webhook extends BaseModel
public const EVENT_SENT_PURCHASE_ORDER = 63;
+ public const EVENT_REMIND_QUOTE = 64;
+
public static $valid_events = [
+ self::EVENT_REMIND_QUOTE,
self::EVENT_CREATE_PURCHASE_ORDER,
self::EVENT_UPDATE_PURCHASE_ORDER,
self::EVENT_DELETE_PURCHASE_ORDER,
diff --git a/app/Observers/ClientContactObserver.php b/app/Observers/ClientContactObserver.php
index dec67dbccb61..f9c4fd5984f7 100644
--- a/app/Observers/ClientContactObserver.php
+++ b/app/Observers/ClientContactObserver.php
@@ -57,28 +57,29 @@ class ClientContactObserver
$clientContact->recurring_invoice_invitations()->delete();
//ensure entity state is preserved
-
+
InvoiceInvitation::withTrashed()->where('client_contact_id', $client_contact_id)->cursor()->each(function ($invite) {
- if ($invite->invoice()->doesnthave('invitations')) {
+ /** @var \App\Models\InvoiceInvitation $invite */
+ if ($invite->invoice()->doesnthave('invitations')) { // @phpstan-ignore-line
$invite->invoice->service()->createInvitations();
}
});
QuoteInvitation::withTrashed()->where('client_contact_id', $client_contact_id)->cursor()->each(function ($invite) {
- if ($invite->quote()->doesnthave('invitations')) {
+ if ($invite->quote()->doesnthave('invitations')) { // @phpstan-ignore-line
$invite->quote->service()->createInvitations();
}
});
RecurringInvoiceInvitation::withTrashed()->where('client_contact_id', $client_contact_id)->cursor()->each(function ($invite) {
- if ($invite->recurring_invoice()->doesnthave('invitations')) {
+ if ($invite->recurring_invoice()->doesnthave('invitations')) {// @phpstan-ignore-line
$invite->recurring_invoice->service()->createInvitations();
}
});
CreditInvitation::withTrashed()->where('client_contact_id', $client_contact_id)->cursor()->each(function ($invite) {
- if ($invite->credit()->doesnthave('invitations')) {
+ if ($invite->credit()->doesnthave('invitations')) {// @phpstan-ignore-line
$invite->credit->service()->createInvitations();
}
});
diff --git a/app/Observers/TaskObserver.php b/app/Observers/TaskObserver.php
index a8ccd6d9489c..96dc353159e8 100644
--- a/app/Observers/TaskObserver.php
+++ b/app/Observers/TaskObserver.php
@@ -54,7 +54,6 @@ class TaskObserver
$event = Webhook::EVENT_DELETE_TASK;
}
-
$subscriptions = Webhook::where('company_id', $task->company_id)
->where('event_id', $event)
->exists();
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index b7f1a37159e5..54e3039ea124 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -11,269 +11,271 @@
namespace App\Providers;
-use App\Events\Account\AccountCreated;
-use App\Events\Account\StripeConnectFailure;
-use App\Events\Client\ClientWasArchived;
-use App\Events\Client\ClientWasCreated;
-use App\Events\Client\ClientWasDeleted;
-use App\Events\Client\ClientWasRestored;
-use App\Events\Client\ClientWasUpdated;
-use App\Events\Company\CompanyDocumentsDeleted;
-use App\Events\Contact\ContactLoggedIn;
-use App\Events\Credit\CreditWasArchived;
-use App\Events\Credit\CreditWasCreated;
-use App\Events\Credit\CreditWasDeleted;
-use App\Events\Credit\CreditWasEmailed;
-use App\Events\Credit\CreditWasEmailedAndFailed;
-use App\Events\Credit\CreditWasMarkedSent;
-use App\Events\Credit\CreditWasRestored;
-use App\Events\Credit\CreditWasUpdated;
-use App\Events\Credit\CreditWasViewed;
-use App\Events\Design\DesignWasArchived;
-use App\Events\Design\DesignWasDeleted;
-use App\Events\Design\DesignWasRestored;
-use App\Events\Design\DesignWasUpdated;
-use App\Events\Document\DocumentWasArchived;
-use App\Events\Document\DocumentWasCreated;
-use App\Events\Document\DocumentWasDeleted;
-use App\Events\Document\DocumentWasRestored;
-use App\Events\Document\DocumentWasUpdated;
-use App\Events\Expense\ExpenseWasArchived;
-use App\Events\Expense\ExpenseWasCreated;
-use App\Events\Expense\ExpenseWasDeleted;
-use App\Events\Expense\ExpenseWasRestored;
-use App\Events\Expense\ExpenseWasUpdated;
-use App\Events\Invoice\InvoiceReminderWasEmailed;
-use App\Events\Invoice\InvoiceWasArchived;
-use App\Events\Invoice\InvoiceWasCancelled;
-use App\Events\Invoice\InvoiceWasCreated;
-use App\Events\Invoice\InvoiceWasDeleted;
-use App\Events\Invoice\InvoiceWasEmailed;
-use App\Events\Invoice\InvoiceWasEmailedAndFailed;
-use App\Events\Invoice\InvoiceWasMarkedSent;
-use App\Events\Invoice\InvoiceWasPaid;
-use App\Events\Invoice\InvoiceWasRestored;
-use App\Events\Invoice\InvoiceWasReversed;
-use App\Events\Invoice\InvoiceWasUpdated;
-use App\Events\Invoice\InvoiceWasViewed;
-use App\Events\Misc\InvitationWasViewed;
-use App\Events\Payment\PaymentWasArchived;
-use App\Events\Payment\PaymentWasCreated;
-use App\Events\Payment\PaymentWasDeleted;
-use App\Events\Payment\PaymentWasEmailed;
-use App\Events\Payment\PaymentWasEmailedAndFailed;
-use App\Events\Payment\PaymentWasRefunded;
-use App\Events\Payment\PaymentWasRestored;
-use App\Events\Payment\PaymentWasUpdated;
-use App\Events\Payment\PaymentWasVoided;
-use App\Events\PurchaseOrder\PurchaseOrderWasAccepted;
-use App\Events\PurchaseOrder\PurchaseOrderWasArchived;
-use App\Events\PurchaseOrder\PurchaseOrderWasCreated;
-use App\Events\PurchaseOrder\PurchaseOrderWasDeleted;
-use App\Events\PurchaseOrder\PurchaseOrderWasEmailed;
-use App\Events\PurchaseOrder\PurchaseOrderWasRestored;
-use App\Events\PurchaseOrder\PurchaseOrderWasUpdated;
-use App\Events\PurchaseOrder\PurchaseOrderWasViewed;
-use App\Events\Quote\QuoteWasApproved;
-use App\Events\Quote\QuoteWasArchived;
-use App\Events\Quote\QuoteWasCreated;
-use App\Events\Quote\QuoteWasDeleted;
-use App\Events\Quote\QuoteWasEmailed;
-use App\Events\Quote\QuoteWasRestored;
-use App\Events\Quote\QuoteWasUpdated;
-use App\Events\Quote\QuoteWasViewed;
-use App\Events\RecurringExpense\RecurringExpenseWasArchived;
-use App\Events\RecurringExpense\RecurringExpenseWasCreated;
-use App\Events\RecurringExpense\RecurringExpenseWasDeleted;
-use App\Events\RecurringExpense\RecurringExpenseWasRestored;
-use App\Events\RecurringExpense\RecurringExpenseWasUpdated;
-use App\Events\RecurringInvoice\RecurringInvoiceWasArchived;
-use App\Events\RecurringInvoice\RecurringInvoiceWasCreated;
-use App\Events\RecurringInvoice\RecurringInvoiceWasDeleted;
-use App\Events\RecurringInvoice\RecurringInvoiceWasRestored;
-use App\Events\RecurringInvoice\RecurringInvoiceWasUpdated;
-use App\Events\RecurringQuote\RecurringQuoteWasArchived;
-use App\Events\RecurringQuote\RecurringQuoteWasCreated;
-use App\Events\RecurringQuote\RecurringQuoteWasDeleted;
-use App\Events\RecurringQuote\RecurringQuoteWasRestored;
-use App\Events\RecurringQuote\RecurringQuoteWasUpdated;
-use App\Events\Statement\StatementWasEmailed;
-use App\Events\Subscription\SubscriptionWasArchived;
-use App\Events\Subscription\SubscriptionWasCreated;
-use App\Events\Subscription\SubscriptionWasDeleted;
-use App\Events\Subscription\SubscriptionWasRestored;
-use App\Events\Subscription\SubscriptionWasUpdated;
-use App\Events\Task\TaskWasArchived;
-use App\Events\Task\TaskWasCreated;
-use App\Events\Task\TaskWasDeleted;
-use App\Events\Task\TaskWasRestored;
-use App\Events\Task\TaskWasUpdated;
-use App\Events\User\UserLoggedIn;
-use App\Events\User\UserWasArchived;
-use App\Events\User\UserWasCreated;
-use App\Events\User\UserWasDeleted;
-use App\Events\User\UserWasRestored;
-use App\Events\User\UserWasUpdated;
-use App\Events\Vendor\VendorContactLoggedIn;
-use App\Events\Vendor\VendorWasArchived;
-use App\Events\Vendor\VendorWasCreated;
-use App\Events\Vendor\VendorWasDeleted;
-use App\Events\Vendor\VendorWasRestored;
-use App\Events\Vendor\VendorWasUpdated;
-use App\Listeners\Account\StripeConnectFailureListener;
-use App\Listeners\Activity\ArchivedClientActivity;
-use App\Listeners\Activity\ClientUpdatedActivity;
-use App\Listeners\Activity\CreatedClientActivity;
-use App\Listeners\Activity\CreatedCreditActivity;
-use App\Listeners\Activity\CreatedExpenseActivity;
-use App\Listeners\Activity\CreatedQuoteActivity;
-use App\Listeners\Activity\CreatedSubscriptionActivity;
-use App\Listeners\Activity\CreatedTaskActivity;
-use App\Listeners\Activity\CreatedVendorActivity;
-use App\Listeners\Activity\CreditArchivedActivity;
-use App\Listeners\Activity\DeleteClientActivity;
-use App\Listeners\Activity\DeleteCreditActivity;
-use App\Listeners\Activity\ExpenseArchivedActivity;
-use App\Listeners\Activity\ExpenseDeletedActivity;
-use App\Listeners\Activity\ExpenseRestoredActivity;
-use App\Listeners\Activity\ExpenseUpdatedActivity;
-use App\Listeners\Activity\PaymentArchivedActivity;
-use App\Listeners\Activity\PaymentCreatedActivity;
-use App\Listeners\Activity\PaymentDeletedActivity;
-use App\Listeners\Activity\PaymentRefundedActivity;
-use App\Listeners\Activity\PaymentUpdatedActivity;
-use App\Listeners\Activity\PaymentVoidedActivity;
-use App\Listeners\Activity\QuoteUpdatedActivity;
-use App\Listeners\Activity\RestoreClientActivity;
-use App\Listeners\Activity\SubscriptionArchivedActivity;
-use App\Listeners\Activity\SubscriptionDeletedActivity;
-use App\Listeners\Activity\SubscriptionRestoredActivity;
-use App\Listeners\Activity\SubscriptionUpdatedActivity;
-use App\Listeners\Activity\TaskArchivedActivity;
-use App\Listeners\Activity\TaskDeletedActivity;
-use App\Listeners\Activity\TaskRestoredActivity;
-use App\Listeners\Activity\TaskUpdatedActivity;
-use App\Listeners\Activity\UpdatedCreditActivity;
-use App\Listeners\Activity\VendorArchivedActivity;
-use App\Listeners\Activity\VendorDeletedActivity;
-use App\Listeners\Activity\VendorRestoredActivity;
-use App\Listeners\Activity\VendorUpdatedActivity;
-use App\Listeners\Contact\UpdateContactLastLogin;
-use App\Listeners\Credit\CreditCreatedNotification;
-use App\Listeners\Credit\CreditEmailedNotification;
-use App\Listeners\Credit\CreditRestoredActivity;
-use App\Listeners\Credit\CreditViewedActivity;
-use App\Listeners\Document\DeleteCompanyDocuments;
-use App\Listeners\Invoice\CreateInvoiceActivity;
-use App\Listeners\Invoice\InvoiceArchivedActivity;
-use App\Listeners\Invoice\InvoiceCancelledActivity;
-use App\Listeners\Invoice\InvoiceCreatedNotification;
-use App\Listeners\Invoice\InvoiceDeletedActivity;
-use App\Listeners\Invoice\InvoiceEmailActivity;
-use App\Listeners\Invoice\InvoiceEmailedNotification;
-use App\Listeners\Invoice\InvoiceEmailFailedActivity;
-use App\Listeners\Invoice\InvoiceFailedEmailNotification;
-use App\Listeners\Invoice\InvoicePaidActivity;
-use App\Listeners\Invoice\InvoiceReminderEmailActivity;
-use App\Listeners\Invoice\InvoiceRestoredActivity;
-use App\Listeners\Invoice\InvoiceReversedActivity;
-use App\Listeners\Invoice\InvoiceViewedActivity;
-use App\Listeners\Invoice\UpdateInvoiceActivity;
-use App\Listeners\Mail\MailSentListener;
-use App\Listeners\Misc\InvitationViewedListener;
-use App\Listeners\Payment\PaymentBalanceActivity;
-use App\Listeners\Payment\PaymentEmailedActivity;
-use App\Listeners\Payment\PaymentNotification;
-use App\Listeners\Payment\PaymentRestoredActivity;
-use App\Listeners\PurchaseOrder\CreatePurchaseOrderActivity;
-use App\Listeners\PurchaseOrder\PurchaseOrderAcceptedActivity;
-use App\Listeners\PurchaseOrder\PurchaseOrderAcceptedListener;
-use App\Listeners\PurchaseOrder\PurchaseOrderArchivedActivity;
-use App\Listeners\PurchaseOrder\PurchaseOrderCreatedListener;
-use App\Listeners\PurchaseOrder\PurchaseOrderDeletedActivity;
-use App\Listeners\PurchaseOrder\PurchaseOrderEmailActivity;
-use App\Listeners\PurchaseOrder\PurchaseOrderEmailedNotification;
-use App\Listeners\PurchaseOrder\PurchaseOrderRestoredActivity;
-use App\Listeners\PurchaseOrder\PurchaseOrderViewedActivity;
-use App\Listeners\PurchaseOrder\UpdatePurchaseOrderActivity;
-use App\Listeners\Quote\QuoteApprovedActivity;
-use App\Listeners\Quote\QuoteApprovedNotification;
-use App\Listeners\Quote\QuoteApprovedWebhook;
-use App\Listeners\Quote\QuoteArchivedActivity;
-use App\Listeners\Quote\QuoteCreatedNotification;
-use App\Listeners\Quote\QuoteDeletedActivity;
-use App\Listeners\Quote\QuoteEmailActivity;
-use App\Listeners\Quote\QuoteEmailedNotification;
-use App\Listeners\Quote\QuoteRestoredActivity;
-use App\Listeners\Quote\QuoteViewedActivity;
-use App\Listeners\Quote\ReachWorkflowSettings;
-use App\Listeners\RecurringExpense\CreatedRecurringExpenseActivity;
-use App\Listeners\RecurringExpense\RecurringExpenseArchivedActivity;
-use App\Listeners\RecurringExpense\RecurringExpenseDeletedActivity;
-use App\Listeners\RecurringExpense\RecurringExpenseRestoredActivity;
-use App\Listeners\RecurringExpense\RecurringExpenseUpdatedActivity;
-use App\Listeners\RecurringInvoice\CreateRecurringInvoiceActivity;
-use App\Listeners\RecurringInvoice\RecurringInvoiceArchivedActivity;
-use App\Listeners\RecurringInvoice\RecurringInvoiceDeletedActivity;
-use App\Listeners\RecurringInvoice\RecurringInvoiceRestoredActivity;
-use App\Listeners\RecurringInvoice\UpdateRecurringInvoiceActivity;
-use App\Listeners\RecurringQuote\CreateRecurringQuoteActivity;
-use App\Listeners\RecurringQuote\RecurringQuoteArchivedActivity;
-use App\Listeners\RecurringQuote\RecurringQuoteDeletedActivity;
-use App\Listeners\RecurringQuote\RecurringQuoteRestoredActivity;
-use App\Listeners\RecurringQuote\UpdateRecurringQuoteActivity;
-use App\Listeners\SendVerificationNotification;
-use App\Listeners\Statement\StatementEmailedActivity;
-use App\Listeners\User\ArchivedUserActivity;
-use App\Listeners\User\CreatedUserActivity;
-use App\Listeners\User\DeletedUserActivity;
-use App\Listeners\User\RestoredUserActivity;
-use App\Listeners\User\UpdatedUserActivity;
-use App\Listeners\User\UpdateUserLastLogin;
-use App\Listeners\Vendor\UpdateVendorContactLastLogin;
-use App\Models\Account;
+use App\Models\Task;
+use App\Models\User;
+use App\Models\Quote;
use App\Models\Client;
-use App\Models\ClientContact;
-use App\Models\Company;
-use App\Models\CompanyGateway;
-use App\Models\CompanyToken;
use App\Models\Credit;
+use App\Models\Vendor;
+use App\Models\Account;
+use App\Models\Company;
use App\Models\Expense;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\Product;
use App\Models\Project;
use App\Models\Proposal;
-use App\Models\PurchaseOrder;
-use App\Models\Quote;
+use App\Models\CompanyToken;
use App\Models\Subscription;
-use App\Models\Task;
-use App\Models\User;
-use App\Models\Vendor;
+use App\Models\ClientContact;
+use App\Models\PurchaseOrder;
use App\Models\VendorContact;
-use App\Observers\AccountObserver;
-use App\Observers\ClientContactObserver;
+use App\Models\CompanyGateway;
+use App\Observers\TaskObserver;
+use App\Observers\UserObserver;
+use App\Observers\QuoteObserver;
+use App\Events\User\UserLoggedIn;
use App\Observers\ClientObserver;
-use App\Observers\CompanyGatewayObserver;
-use App\Observers\CompanyObserver;
-use App\Observers\CompanyTokenObserver;
use App\Observers\CreditObserver;
+use App\Observers\VendorObserver;
+use App\Observers\AccountObserver;
+use App\Observers\CompanyObserver;
use App\Observers\ExpenseObserver;
use App\Observers\InvoiceObserver;
use App\Observers\PaymentObserver;
use App\Observers\ProductObserver;
use App\Observers\ProjectObserver;
+use App\Events\Task\TaskWasCreated;
+use App\Events\Task\TaskWasDeleted;
+use App\Events\Task\TaskWasUpdated;
+use App\Events\User\UserWasCreated;
+use App\Events\User\UserWasDeleted;
+use App\Events\User\UserWasUpdated;
use App\Observers\ProposalObserver;
-use App\Observers\PurchaseOrderObserver;
-use App\Observers\QuoteObserver;
+use App\Events\Quote\QuoteWasViewed;
+use App\Events\Task\TaskWasArchived;
+use App\Events\Task\TaskWasRestored;
+use App\Events\User\UserWasArchived;
+use App\Events\User\UserWasRestored;
+use App\Events\Quote\QuoteWasCreated;
+use App\Events\Quote\QuoteWasDeleted;
+use App\Events\Quote\QuoteWasEmailed;
+use App\Events\Quote\QuoteWasUpdated;
+use App\Events\Account\AccountCreated;
+use App\Events\Credit\CreditWasViewed;
+use App\Events\Invoice\InvoiceWasPaid;
+use App\Events\Quote\QuoteWasApproved;
+use App\Events\Quote\QuoteWasArchived;
+use App\Events\Quote\QuoteWasRestored;
+use App\Events\Client\ClientWasCreated;
+use App\Events\Client\ClientWasDeleted;
+use App\Events\Client\ClientWasUpdated;
+use App\Events\Contact\ContactLoggedIn;
+use App\Events\Credit\CreditWasCreated;
+use App\Events\Credit\CreditWasDeleted;
+use App\Events\Credit\CreditWasEmailed;
+use App\Events\Credit\CreditWasUpdated;
+use App\Events\Design\DesignWasDeleted;
+use App\Events\Design\DesignWasUpdated;
+use App\Events\Vendor\VendorWasCreated;
+use App\Events\Vendor\VendorWasDeleted;
+use App\Events\Vendor\VendorWasUpdated;
+use App\Observers\CompanyTokenObserver;
use App\Observers\SubscriptionObserver;
-use App\Observers\TaskObserver;
-use App\Observers\UserObserver;
-use App\Observers\VendorContactObserver;
-use App\Observers\VendorObserver;
-use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
-use Illuminate\Mail\Events\MessageSending;
use Illuminate\Mail\Events\MessageSent;
+use App\Events\Client\ClientWasArchived;
+use App\Events\Client\ClientWasRestored;
+use App\Events\Credit\CreditWasArchived;
+use App\Events\Credit\CreditWasRestored;
+use App\Events\Design\DesignWasArchived;
+use App\Events\Design\DesignWasRestored;
+use App\Events\Invoice\InvoiceWasViewed;
+use App\Events\Misc\InvitationWasViewed;
+use App\Events\Payment\PaymentWasVoided;
+use App\Events\Vendor\VendorWasArchived;
+use App\Events\Vendor\VendorWasRestored;
+use App\Listeners\Mail\MailSentListener;
+use App\Observers\ClientContactObserver;
+use App\Observers\PurchaseOrderObserver;
+use App\Observers\VendorContactObserver;
+use App\Events\Expense\ExpenseWasCreated;
+use App\Events\Expense\ExpenseWasDeleted;
+use App\Events\Expense\ExpenseWasUpdated;
+use App\Events\Invoice\InvoiceWasCreated;
+use App\Events\Invoice\InvoiceWasDeleted;
+use App\Events\Invoice\InvoiceWasEmailed;
+use App\Events\Invoice\InvoiceWasUpdated;
+use App\Events\Payment\PaymentWasCreated;
+use App\Events\Payment\PaymentWasDeleted;
+use App\Events\Payment\PaymentWasEmailed;
+use App\Events\Payment\PaymentWasUpdated;
+use App\Observers\CompanyGatewayObserver;
+use App\Events\Credit\CreditWasMarkedSent;
+use App\Events\Expense\ExpenseWasArchived;
+use App\Events\Expense\ExpenseWasRestored;
+use App\Events\Invoice\InvoiceWasArchived;
+use App\Events\Invoice\InvoiceWasRestored;
+use App\Events\Invoice\InvoiceWasReversed;
+use App\Events\Payment\PaymentWasArchived;
+use App\Events\Payment\PaymentWasRefunded;
+use App\Events\Payment\PaymentWasRestored;
+use Illuminate\Mail\Events\MessageSending;
+use App\Events\Document\DocumentWasCreated;
+use App\Events\Document\DocumentWasDeleted;
+use App\Events\Document\DocumentWasUpdated;
+use App\Events\Invoice\InvoiceWasCancelled;
+use App\Listeners\Quote\QuoteEmailActivity;
+use App\Listeners\User\CreatedUserActivity;
+use App\Listeners\User\DeletedUserActivity;
+use App\Listeners\User\UpdatedUserActivity;
+use App\Listeners\User\UpdateUserLastLogin;
+use App\Events\Account\StripeConnectFailure;
+use App\Events\Document\DocumentWasArchived;
+use App\Events\Document\DocumentWasRestored;
+use App\Events\Invoice\InvoiceWasMarkedSent;
+use App\Events\Vendor\VendorContactLoggedIn;
+use App\Listeners\Quote\QuoteViewedActivity;
+use App\Listeners\User\ArchivedUserActivity;
+use App\Listeners\User\RestoredUserActivity;
+use App\Events\Quote\QuoteReminderWasEmailed;
+use App\Events\Statement\StatementWasEmailed;
+use App\Listeners\Quote\QuoteApprovedWebhook;
+use App\Listeners\Quote\QuoteDeletedActivity;
+use App\Listeners\Credit\CreditViewedActivity;
+use App\Listeners\Invoice\InvoicePaidActivity;
+use App\Listeners\Payment\PaymentNotification;
+use App\Listeners\Quote\QuoteApprovedActivity;
+use App\Listeners\Quote\QuoteArchivedActivity;
+use App\Listeners\Quote\QuoteRestoredActivity;
+use App\Listeners\Quote\ReachWorkflowSettings;
+use App\Events\Company\CompanyDocumentsDeleted;
+use App\Listeners\Activity\CreatedTaskActivity;
+use App\Listeners\Activity\TaskDeletedActivity;
+use App\Listeners\Activity\TaskUpdatedActivity;
+use App\Listeners\Invoice\InvoiceEmailActivity;
+use App\Listeners\SendVerificationNotification;
+use App\Events\Credit\CreditWasEmailedAndFailed;
+use App\Listeners\Activity\CreatedQuoteActivity;
+use App\Listeners\Activity\DeleteClientActivity;
+use App\Listeners\Activity\DeleteCreditActivity;
+use App\Listeners\Activity\QuoteUpdatedActivity;
+use App\Listeners\Activity\TaskArchivedActivity;
+use App\Listeners\Activity\TaskRestoredActivity;
+use App\Listeners\Credit\CreditRestoredActivity;
+use App\Listeners\Invoice\CreateInvoiceActivity;
+use App\Listeners\Invoice\InvoiceViewedActivity;
+use App\Listeners\Invoice\UpdateInvoiceActivity;
+use App\Listeners\Misc\InvitationViewedListener;
+use App\Events\Invoice\InvoiceReminderWasEmailed;
+use App\Listeners\Activity\ClientUpdatedActivity;
+use App\Listeners\Activity\CreatedClientActivity;
+use App\Listeners\Activity\CreatedCreditActivity;
+use App\Listeners\Activity\CreatedVendorActivity;
+use App\Listeners\Activity\PaymentVoidedActivity;
+use App\Listeners\Activity\RestoreClientActivity;
+use App\Listeners\Activity\UpdatedCreditActivity;
+use App\Listeners\Activity\VendorDeletedActivity;
+use App\Listeners\Activity\VendorUpdatedActivity;
+use App\Listeners\Contact\UpdateContactLastLogin;
+use App\Listeners\Invoice\InvoiceDeletedActivity;
+use App\Listeners\Payment\PaymentBalanceActivity;
+use App\Listeners\Payment\PaymentEmailedActivity;
+use App\Listeners\Quote\QuoteCreatedNotification;
+use App\Listeners\Quote\QuoteEmailedNotification;
+use App\Events\Invoice\InvoiceWasEmailedAndFailed;
+use App\Events\Payment\PaymentWasEmailedAndFailed;
+use App\Listeners\Activity\ArchivedClientActivity;
+use App\Listeners\Activity\CreatedExpenseActivity;
+use App\Listeners\Activity\CreditArchivedActivity;
+use App\Listeners\Activity\ExpenseDeletedActivity;
+use App\Listeners\Activity\ExpenseUpdatedActivity;
+use App\Listeners\Activity\PaymentCreatedActivity;
+use App\Listeners\Activity\PaymentDeletedActivity;
+use App\Listeners\Activity\PaymentUpdatedActivity;
+use App\Listeners\Activity\VendorArchivedActivity;
+use App\Listeners\Activity\VendorRestoredActivity;
+use App\Listeners\Document\DeleteCompanyDocuments;
+use App\Listeners\Invoice\InvoiceArchivedActivity;
+use App\Listeners\Invoice\InvoiceRestoredActivity;
+use App\Listeners\Invoice\InvoiceReversedActivity;
+use App\Listeners\Payment\PaymentRestoredActivity;
+use App\Listeners\Quote\QuoteApprovedNotification;
+use App\Events\Subscription\SubscriptionWasCreated;
+use App\Events\Subscription\SubscriptionWasDeleted;
+use App\Events\Subscription\SubscriptionWasUpdated;
+use App\Listeners\Activity\ExpenseArchivedActivity;
+use App\Listeners\Activity\ExpenseRestoredActivity;
+use App\Listeners\Activity\PaymentArchivedActivity;
+use App\Listeners\Activity\PaymentRefundedActivity;
+use App\Listeners\Credit\CreditCreatedNotification;
+use App\Listeners\Credit\CreditEmailedNotification;
+use App\Listeners\Invoice\InvoiceCancelledActivity;
+use App\Listeners\Quote\QuoteReminderEmailActivity;
+use App\Events\PurchaseOrder\PurchaseOrderWasViewed;
+use App\Events\Subscription\SubscriptionWasArchived;
+use App\Events\Subscription\SubscriptionWasRestored;
+use App\Events\PurchaseOrder\PurchaseOrderWasCreated;
+use App\Events\PurchaseOrder\PurchaseOrderWasDeleted;
+use App\Events\PurchaseOrder\PurchaseOrderWasEmailed;
+use App\Events\PurchaseOrder\PurchaseOrderWasUpdated;
+use App\Listeners\Invoice\InvoiceCreatedNotification;
+use App\Listeners\Invoice\InvoiceEmailedNotification;
+use App\Listeners\Invoice\InvoiceEmailFailedActivity;
+use App\Listeners\Statement\StatementEmailedActivity;
+use App\Events\PurchaseOrder\PurchaseOrderWasAccepted;
+use App\Events\PurchaseOrder\PurchaseOrderWasArchived;
+use App\Events\PurchaseOrder\PurchaseOrderWasRestored;
+use App\Listeners\Vendor\UpdateVendorContactLastLogin;
+use App\Events\RecurringQuote\RecurringQuoteWasCreated;
+use App\Events\RecurringQuote\RecurringQuoteWasDeleted;
+use App\Events\RecurringQuote\RecurringQuoteWasUpdated;
+use App\Listeners\Account\StripeConnectFailureListener;
+use App\Listeners\Activity\CreatedSubscriptionActivity;
+use App\Listeners\Activity\SubscriptionDeletedActivity;
+use App\Listeners\Activity\SubscriptionUpdatedActivity;
+use App\Listeners\Invoice\InvoiceReminderEmailActivity;
+use App\Events\RecurringQuote\RecurringQuoteWasArchived;
+use App\Events\RecurringQuote\RecurringQuoteWasRestored;
+use App\Listeners\Activity\SubscriptionArchivedActivity;
+use App\Listeners\Activity\SubscriptionRestoredActivity;
+use App\Listeners\Invoice\InvoiceFailedEmailNotification;
+use App\Events\RecurringExpense\RecurringExpenseWasCreated;
+use App\Events\RecurringExpense\RecurringExpenseWasDeleted;
+use App\Events\RecurringExpense\RecurringExpenseWasUpdated;
+use App\Events\RecurringInvoice\RecurringInvoiceWasCreated;
+use App\Events\RecurringInvoice\RecurringInvoiceWasDeleted;
+use App\Events\RecurringInvoice\RecurringInvoiceWasUpdated;
+use App\Listeners\PurchaseOrder\PurchaseOrderEmailActivity;
+use App\Events\RecurringExpense\RecurringExpenseWasArchived;
+use App\Events\RecurringExpense\RecurringExpenseWasRestored;
+use App\Events\RecurringInvoice\RecurringInvoiceWasArchived;
+use App\Events\RecurringInvoice\RecurringInvoiceWasRestored;
+use App\Listeners\PurchaseOrder\CreatePurchaseOrderActivity;
+use App\Listeners\PurchaseOrder\PurchaseOrderViewedActivity;
+use App\Listeners\PurchaseOrder\UpdatePurchaseOrderActivity;
+use App\Listeners\PurchaseOrder\PurchaseOrderCreatedListener;
+use App\Listeners\PurchaseOrder\PurchaseOrderDeletedActivity;
+use App\Listeners\PurchaseOrder\PurchaseOrderAcceptedActivity;
+use App\Listeners\PurchaseOrder\PurchaseOrderAcceptedListener;
+use App\Listeners\PurchaseOrder\PurchaseOrderArchivedActivity;
+use App\Listeners\PurchaseOrder\PurchaseOrderRestoredActivity;
+use App\Listeners\RecurringQuote\CreateRecurringQuoteActivity;
+use App\Listeners\RecurringQuote\UpdateRecurringQuoteActivity;
+use App\Listeners\RecurringQuote\RecurringQuoteDeletedActivity;
+use App\Listeners\RecurringQuote\RecurringQuoteArchivedActivity;
+use App\Listeners\RecurringQuote\RecurringQuoteRestoredActivity;
+use App\Listeners\PurchaseOrder\PurchaseOrderEmailedNotification;
+use App\Listeners\RecurringInvoice\CreateRecurringInvoiceActivity;
+use App\Listeners\RecurringInvoice\UpdateRecurringInvoiceActivity;
+use App\Listeners\RecurringExpense\CreatedRecurringExpenseActivity;
+use App\Listeners\RecurringExpense\RecurringExpenseDeletedActivity;
+use App\Listeners\RecurringExpense\RecurringExpenseUpdatedActivity;
+use App\Listeners\RecurringInvoice\RecurringInvoiceDeletedActivity;
+use App\Listeners\RecurringExpense\RecurringExpenseArchivedActivity;
+use App\Listeners\RecurringExpense\RecurringExpenseRestoredActivity;
+use App\Listeners\RecurringInvoice\RecurringInvoiceArchivedActivity;
+use App\Listeners\RecurringInvoice\RecurringInvoiceRestoredActivity;
+use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
@@ -534,6 +536,10 @@ class EventServiceProvider extends ServiceProvider
QuoteWasRestored::class => [
QuoteRestoredActivity::class,
],
+ QuoteReminderWasEmailed::class =>[
+ QuoteReminderEmailActivity::class,
+ // QuoteEmailedNotification::class,
+ ],
RecurringExpenseWasCreated::class => [
CreatedRecurringExpenseActivity::class,
],
diff --git a/app/Providers/StaticServiceProvider.php b/app/Providers/StaticServiceProvider.php
index 77dc905535a4..00aa774c204f 100644
--- a/app/Providers/StaticServiceProvider.php
+++ b/app/Providers/StaticServiceProvider.php
@@ -23,6 +23,7 @@ use App\Models\DateFormat;
use App\Models\PaymentTerm;
use App\Models\PaymentType;
use App\Models\DatetimeFormat;
+use Illuminate\Support\Facades\Cache;
use Illuminate\Support\ServiceProvider;
use App\DataMapper\EmailTemplateDefaults;
@@ -37,62 +38,174 @@ class StaticServiceProvider extends ServiceProvider
{
/** @return \Illuminate\Support\Collection */
app()->singleton('currencies', function ($app) {
- return Currency::query()->orderBy('name')->get();
+
+ if($resource = Cache::get('currencies')) {
+ return $resource;
+ }
+
+ $resource = Currency::query()->orderBy('name')->get();
+
+ Cache::forever('currencies', $resource);
+
+ return $resource;
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('languages', function ($app) {
- return Language::query()->orderBy('name')->get();
+
+ if($resource = Cache::get('languages')) {
+ return $resource;
+ }
+
+ $resource = Language::query()->orderBy('name')->get();
+
+ Cache::forever('languages', $resource);
+
+ return $resource;
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('countries', function ($app) {
- return Country::query()->orderBy('name')->get();
+
+ if($resource = Cache::get('countries')) {
+ return $resource;
+ }
+
+ $resource = Country::query()->orderBy('name')->get();
+
+ Cache::forever('countries', $resource);
+
+ return $resource;
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('payment_types', function ($app) {
- return PaymentType::query()->orderBy('id')->get();
+
+ if($resource = Cache::get('payment_types')) {
+ return $resource;
+ }
+
+ $resource = PaymentType::query()->orderBy('id')->get();
+
+ Cache::forever('payment_types', $resource);
+
+ return $resource;
+
});
- /** @return \Illuminate\Support\Collection */
- app()->singleton('industries', function ($app) {
- return Industry::query()->orderBy('name')->get();
- });
/** @return \Illuminate\Support\Collection */
app()->singleton('banks', function ($app) {
- return Bank::query()->orderBy('name')->get();
+
+
+ if($resource = Cache::get('banks')) {
+ return $resource;
+ }
+
+ $resource = Bank::query()->orderBy('name')->get();
+
+ Cache::forever('banks', $resource);
+
+ return $resource;
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('date_formats', function ($app) {
- return DateFormat::query()->orderBy('id')->get();
+
+
+ if($resource = Cache::get('date_formats')) {
+ return $resource;
+ }
+
+ $resource = DateFormat::query()->orderBy('id')->get();
+
+ Cache::forever('date_formats', $resource);
+
+ return $resource;
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('timezones', function ($app) {
- return Timezone::query()->orderBy('id')->get();
+
+
+ if($resource = Cache::get('timezones')) {
+ return $resource;
+ }
+
+ $resource = Timezone::query()->orderBy('id')->get();
+
+ Cache::forever('timezones', $resource);
+
+ return $resource;
+
});
-
+
/** @return \Illuminate\Support\Collection */
app()->singleton('gateways', function ($app) {
- return Gateway::query()->orderBy('id')->get();
+
+ if($resource = Cache::get('gateways')) {
+ return $resource;
+ }
+
+ $resource = Gateway::query()->orderBy('id')->get();
+
+ Cache::forever('gateways', $resource);
+
+ return $resource;
+
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('industries', function ($app) {
- return Industry::query()->orderBy('id')->get();
+
+
+ if($resource = Cache::get('industries')) {
+ return $resource;
+ }
+
+ $resource = Industry::query()->orderBy('id')->get();
+
+ Cache::forever('industries', $resource);
+
+ return $resource;
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('sizes', function ($app) {
- return Size::query()->orderBy('id')->get();
+
+
+ if($resource = Cache::get('sizes')) {
+ return $resource;
+ }
+
+ $resource = Size::query()->orderBy('id')->get();
+
+ Cache::forever('sizes', $resource);
+
+ return $resource;
+
});
/** @return \Illuminate\Support\Collection */
app()->singleton('datetime_formats', function ($app) {
- return DatetimeFormat::query()->orderBy('id')->get();
+
+ if($resource = Cache::get('datetime_formats')) {
+ return $resource;
+ }
+
+ $resource = DatetimeFormat::query()->orderBy('id')->get();
+
+ Cache::forever('datetime_formats', $resource);
+
+ return $resource;
+
});
app()->singleton('templates', function ($app) {
@@ -109,6 +222,10 @@ class StaticServiceProvider extends ServiceProvider
'subject' => EmailTemplateDefaults::emailPaymentSubject(),
'body' => EmailTemplateDefaults::emailPaymentTemplate(),
],
+ 'quote_reminder1' => [
+ 'subject' => EmailTemplateDefaults::emailQuoteReminder1Subject(),
+ 'body' => EmailTemplateDefaults::emailQuoteReminder1Body(),
+ ],
'reminder1' => [
'subject' => EmailTemplateDefaults::emailReminder1Subject(),
'body' => EmailTemplateDefaults::emailReminder1Template(),
diff --git a/app/Repositories/TaskRepository.php b/app/Repositories/TaskRepository.php
index 4035021b7bfc..ff6684287aa4 100644
--- a/app/Repositories/TaskRepository.php
+++ b/app/Repositories/TaskRepository.php
@@ -12,6 +12,7 @@
namespace App\Repositories;
use App\Factory\TaskFactory;
+use App\Jobs\Task\TaskAssigned;
use App\Models\Task;
use App\Utils\Traits\GeneratesCounter;
use Illuminate\Database\QueryException;
@@ -45,6 +46,13 @@ class TaskRepository extends BaseRepository
$this->new_task = false;
}
+ if(isset($data['assigned_user_id']) && $data['assigned_user_id'] != $task->assigned_user_id){
+ TaskAssigned::dispatch($task, $task->company->db)->delay(2);
+ }
+
+ if(!is_numeric($task->rate) && !isset($data['rate']))
+ $data['rate'] = 0;
+
$task->fill($data);
$task->saveQuietly();
diff --git a/app/Services/Bank/BankService.php b/app/Services/Bank/BankService.php
index f17bf8dba34c..8460a6249a20 100644
--- a/app/Services/Bank/BankService.php
+++ b/app/Services/Bank/BankService.php
@@ -20,22 +20,6 @@ class BankService
{
}
-
- public function matchInvoiceNumber()
- {
- if (strlen($this->bank_transaction->description) > 1) {
- $i = Invoice::query()->where('company_id', $this->bank_transaction->company_id)
- ->whereIn('status_id', [1,2,3])
- ->where('is_deleted', 0)
- ->where('number', 'LIKE', '%'.$this->bank_transaction->description.'%')
- ->first();
-
- return $i ?: false;
- }
-
- return false;
- }
-
public function processRules()
{
(new ProcessBankRules($this->bank_transaction))->run();
diff --git a/app/Services/Bank/ProcessBankRules.php b/app/Services/Bank/ProcessBankRules.php
index e65a4462bcad..171864304f1e 100644
--- a/app/Services/Bank/ProcessBankRules.php
+++ b/app/Services/Bank/ProcessBankRules.php
@@ -14,8 +14,10 @@ namespace App\Services\Bank;
use App\Factory\ExpenseCategoryFactory;
use App\Factory\ExpenseFactory;
use App\Models\BankTransaction;
+use App\Models\Client;
use App\Models\ExpenseCategory;
use App\Models\Invoice;
+use App\Models\Payment;
use App\Services\AbstractService;
use App\Utils\Traits\GeneratesCounter;
use Illuminate\Support\Carbon;
@@ -49,6 +51,13 @@ class ProcessBankRules extends AbstractService
}
}
+ // $payment.amount => "Payment Amount", float
+ // $payment.transaction_reference => "Payment Transaction Reference", string
+ // $invoice.amount => "Invoice Amount", float
+ // $invoice.number => "Invoice Number", string
+ // $client.id_number => "Client ID Number", string
+ // $client.email => "Client Email", string
+ // $invoice.po_number => "Invoice Purchase Order Number", string
private function matchCredit()
{
$this->invoices = Invoice::query()->where('company_id', $this->bank_transaction->company_id)
@@ -70,9 +79,293 @@ class ProcessBankRules extends AbstractService
$this->credit_rules = $this->bank_transaction->company->credit_rules();
//stub for credit rules
- foreach ($this->credit_rules as $rule) {
- // $this->bank_transaction->bank_transaction_rule_id = $bank_transaction_rule->id;
+ foreach ($this->credit_rules as $bank_transaction_rule) {
+ $matches = 0;
+
+ if (!is_array($bank_transaction_rule['rules'])) {
+ continue;
+ }
+
+ foreach ($bank_transaction_rule['rules'] as $rule) {
+ $rule_count = count($bank_transaction_rule['rules']);
+
+ $invoiceNumbers = false;
+ $invoiceNumber = false;
+ $invoiceAmounts = false;
+ $paymentAmounts = false;
+ $paymentReferences = false;
+ $clientIdNumbers = false;
+ $clientEmails = false;
+ $invoicePONumbers = false;
+
+ if ($rule['search_key'] == '$invoice.number') {
+
+ $invoiceNumbers = Invoice::query()->where('company_id', $this->bank_transaction->company_id)
+ ->whereIn('status_id', [1,2,3])
+ ->where('is_deleted', 0)
+ ->get();
+
+ $invoiceNumber = $invoiceNumbers->first(function ($value, $key) {
+ return str_contains($this->bank_transaction->description, $value->number) || str_contains(str_replace("\n", "", $this->bank_transaction->description), $value->number);
+ });
+
+ if($invoiceNumber)
+ $matches++;
+
+ }
+
+ if ($rule['search_key'] == '$invoice.po_number') {
+
+ $invoicePONumbers = Invoice::query()->where('company_id', $this->bank_transaction->company_id)
+ ->whereIn('status_id', [1,2,3])
+ ->where('is_deleted', 0)
+ ->where('po_number', $this->bank_transaction->description)
+ ->get();
+
+ if($invoicePONumbers->count() > 0) {
+ $matches++;
+ }
+
+ }
+
+ if ($rule['search_key'] == '$invoice.amount') {
+
+ $$invoiceAmounts = Invoice::query()->where('company_id', $this->bank_transaction->company_id)
+ ->whereIn('status_id', [1,2,3])
+ ->where('is_deleted', 0)
+ ->where('amount', $rule['operator'], $this->bank_transaction->amount)
+ ->get();
+
+ $invoiceAmounts = $this->invoices;
+
+ if($invoiceAmounts->count() > 0) {
+ $matches++;
+ }
+
+ }
+
+ if ($rule['search_key'] == '$payment.amount') {
+
+
+ $paymentAmounts = Payment::query()->where('company_id', $this->bank_transaction->company_id)
+ ->whereIn('status_id', [1,4])
+ ->where('is_deleted', 0)
+ ->whereNull('transaction_id')
+ ->where('amount', $rule['operator'], $this->bank_transaction->amount)
+ ->get();
+
+
+
+ if($paymentAmounts->count() > 0) {
+ $matches++;
+ }
+
+ }
+
+
+ if ($rule['search_key'] == '$payment.transaction_reference') {
+
+ $ref_search = $this->bank_transaction->description;
+
+ switch ($rule['operator']) {
+ case 'is':
+ $operator = '=';
+ break;
+ case 'contains':
+ $ref_search = "%".$ref_search."%";
+ $operator = 'LIKE';
+ break;
+
+ default:
+ $operator = '=';
+ break;
+ }
+
+ $paymentReferences = Payment::query()->where('company_id', $this->bank_transaction->company_id)
+ ->whereIn('status_id', [1,4])
+ ->where('is_deleted', 0)
+ ->whereNull('transaction_id')
+ ->where('transaction_reference', $operator, $ref_search)
+ ->get();
+
+
+
+ if($paymentReferences->count() > 0) {
+ $matches++;
+ }
+
+ }
+
+ if ($rule['search_key'] == '$client.id_number') {
+
+ $ref_search = $this->bank_transaction->description;
+
+ switch ($rule['operator']) {
+ case 'is':
+ $operator = '=';
+ break;
+ case 'contains':
+ $ref_search = "%".$ref_search."%";
+ $operator = 'LIKE';
+ break;
+
+ default:
+ $operator = '=';
+ break;
+ }
+
+ $clientIdNumbers = Client::query()->where('company_id', $this->bank_transaction->company_id)
+ ->where('id_number', $operator, $ref_search)
+ ->get();
+
+ if($clientIdNumbers->count() > 0) {
+ $matches++;
+ }
+
+ }
+
+
+ if ($rule['search_key'] == '$client.email') {
+
+ $clientEmails = Client::query()
+ ->where('company_id', $this->bank_transaction->company_id)
+ ->whereHas('contacts', function ($q){
+ $q->where('email', $this->bank_transaction->description);
+ })
+ ->get();
+
+
+ if($clientEmails->count() > 0) {
+ $matches++;
+ }
+
+ if (($bank_transaction_rule['matches_on_all'] && ($matches == $rule_count)) || (!$bank_transaction_rule['matches_on_all'] && $matches > 0)) {
+
+ //determine which combination has succeeded, ie link a payment / or / invoice
+ $invoice_ids = null;
+ $payment_id = null;
+
+ if($invoiceNumber){
+ $invoice_ids = $invoiceNumber->hashed_id;
+ }
+
+ if($invoicePONumbers && strlen($invoice_ids ?? '') == 0){
+
+ if($clientEmails){ // @phpstan-ignore-line
+
+ $invoice_ids = $this->matchInvoiceAndClient($invoicePONumbers, $clientEmails);
+
+ }
+
+ if($clientIdNumbers && strlen($invoice_ids ?? '') == 0)
+ {
+
+ $invoice_ids = $this->matchInvoiceAndClient($invoicePONumbers, $clientIdNumbers);
+
+ }
+
+ if(strlen($invoice_ids ?? '') == 0)
+ {
+ $invoice_ids = $invoicePONumbers->first()->hashed_id;
+ }
+
+ }
+
+
+ if($invoiceAmounts && strlen($invoice_ids ?? '') == 0) {
+
+ if($clientEmails) {// @phpstan-ignore-line
+
+ $invoice_ids = $this->matchInvoiceAndClient($invoiceAmounts, $clientEmails);
+
+ }
+
+ if($clientIdNumbers && strlen($invoice_ids ?? '') == 0) {
+
+ $invoice_ids = $this->matchInvoiceAndClient($invoiceAmounts, $clientIdNumbers);
+
+ }
+
+ if(strlen($invoice_ids ?? '') == 0) {
+ $invoice_ids = $invoiceAmounts->first()->hashed_id;
+ }
+
+ }
+
+
+ if($paymentAmounts && strlen($invoice_ids ?? '') == 0 && is_null($payment_id)) {
+
+ if($clientEmails) {// @phpstan-ignore-line
+
+ $payment_id = $this->matchPaymentAndClient($paymentAmounts, $clientEmails);
+
+ }
+
+ if($clientIdNumbers && is_null($payment_id)) {
+
+
+ $payment_id = $this->matchPaymentAndClient($paymentAmounts, $clientEmails);
+
+ }
+
+ if(is_null($payment_id)) {
+ $payment_id = $paymentAmounts->first()->id;
+ }
+
+ }
+
+ if(strlen($invoice_ids ?? '') > 1 || is_int($payment_id))
+ {
+
+ $this->bank_transaction->payment_id = $payment_id;
+ $this->bank_transaction->invoice_ids = $invoice_ids;
+ $this->bank_transaction->status_id = BankTransaction::STATUS_MATCHED;
+ $this->bank_transaction->bank_transaction_rule_id = $bank_transaction_rule->id;
+ $this->bank_transaction->save();
+
+ }
+
+ }
+
+ }
+
+ }
+
}
+
+ }
+
+
+ private function matchPaymentAndClient($payments, $clients): ?int
+ {
+ /** @var \Illuminate\Support\Collection $payments */
+ foreach($payments as $payment) {
+ foreach($clients as $client) {
+
+ if($payment->client_id == $client->id) {
+ return $payment->id;
+
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private function matchInvoiceAndClient($invoices, $clients): ?Invoice
+ {
+ /** @var \Illuminate\Support\Collection $invoices */
+ foreach($invoices as $invoice) {
+ foreach($clients as $client) {
+
+ if($invoice->client_id == $client->id) {
+ return $invoice->hashed_id;
+
+ }
+ }
+ }
+
+ return null;
}
private function matchDebit()
@@ -81,8 +374,6 @@ class ProcessBankRules extends AbstractService
$this->categories = collect(Cache::get('bank_categories'));
-
-
foreach ($this->debit_rules as $bank_transaction_rule) {
$matches = 0;
@@ -142,7 +433,7 @@ class ProcessBankRules extends AbstractService
private function coalesceExpenses($expense): string
{
- if (!$this->bank_transaction->expense_id || strlen($this->bank_transaction->expense_id) < 1) {
+ if (!$this->bank_transaction->expense_id || strlen($this->bank_transaction->expense_id ?? '') < 2) {
return $expense;
}
diff --git a/app/Services/Invoice/UpdateReminder.php b/app/Services/Invoice/UpdateReminder.php
index 96239d6780ef..2d861632d2f8 100644
--- a/app/Services/Invoice/UpdateReminder.php
+++ b/app/Services/Invoice/UpdateReminder.php
@@ -12,13 +12,14 @@
namespace App\Services\Invoice;
use App\Models\Invoice;
+use App\Models\Quote;
use App\Models\RecurringInvoice;
use App\Services\AbstractService;
use Carbon\Carbon;
class UpdateReminder extends AbstractService
{
- public function __construct(public Invoice $invoice, public mixed $settings = null)
+ public function __construct(public Invoice | Quote $invoice, public mixed $settings = null)
{
}
diff --git a/app/Services/Quote/QuoteService.php b/app/Services/Quote/QuoteService.php
index fc8508591649..cdc1b1dccd6c 100644
--- a/app/Services/Quote/QuoteService.php
+++ b/app/Services/Quote/QuoteService.php
@@ -17,6 +17,7 @@ use App\Jobs\EDocument\CreateEDocument;
use App\Models\Project;
use App\Models\Quote;
use App\Repositories\QuoteRepository;
+use App\Services\Invoice\UpdateReminder;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
use Illuminate\Support\Facades\Storage;
@@ -133,7 +134,6 @@ class QuoteService
$this->invoice
->service()
->markSent()
- // ->deletePdf()
->save();
}
@@ -259,6 +259,13 @@ class QuoteService
return $this;
}
+ public function setReminder($settings = null)
+ {
+ $this->quote = (new UpdateReminder($this->quote, $settings))->run();
+
+ return $this;
+ }
+
/**
* Saves the quote.
* @return Quote|null
diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php
index 83d4d8fb10a0..5ad95ba7cb9b 100644
--- a/app/Transformers/UserTransformer.php
+++ b/app/Transformers/UserTransformer.php
@@ -66,6 +66,7 @@ class UserTransformer extends EntityTransformer
'language_id' => (string) $user->language_id ?: '',
'user_logged_in_notification' => (bool) $user->user_logged_in_notification,
'referral_code' => (string) $user->referral_code,
+ 'referral_meta' => $user->referral_meta ? (object)$user->referral_meta : new \stdClass,
];
}
diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php
index 073d7d55b882..05880f5bcee9 100644
--- a/app/Utils/HtmlEngine.php
+++ b/app/Utils/HtmlEngine.php
@@ -222,6 +222,7 @@ class HtmlEngine
if ($this->entity->project) {
$data['$project.name'] = ['value' => $this->entity->project->name, 'label' => ctrans('texts.project')];
$data['$invoice.project'] = &$data['$project.name'];
+ $data['$quote.project'] = &$data['$project.name'];
}
$data['$status_logo'] = ['value' => ' ' . ctrans('texts.paid') .'
', 'label' => ''];
@@ -276,8 +277,10 @@ class HtmlEngine
$data['$credit.custom4'] = &$data['$quote.custom4'];
if ($this->entity->project) {
- $data['$project.name'] = ['value' => $this->entity->project->name, 'label' => ctrans('texts.project_name')];
+ $data['$project.name'] = ['value' => $this->entity->project->name, 'label' => ctrans('texts.project')];
$data['$invoice.project'] = &$data['$project.name'];
+ $data['$quote.project'] = &$data['$project.name'];
+
}
if ($this->entity->vendor) {
diff --git a/app/Utils/Traits/AppSetup.php b/app/Utils/Traits/AppSetup.php
index f95e398f85a2..bd39635136f6 100644
--- a/app/Utils/Traits/AppSetup.php
+++ b/app/Utils/Traits/AppSetup.php
@@ -29,9 +29,17 @@ trait AppSetup
return $check['system_health'] == 'true';
}
-
+
+ /**
+ * @deprecated
+ *
+ * @param mixed $force
+ * @return void
+ */
public function buildCache($force = false)
{
+ return;
+
$cached_tables = config('ninja.cached_tables');
foreach ($cached_tables as $name => $class) {
@@ -53,61 +61,6 @@ trait AppSetup
}
/*Build template cache*/
- $this->buildTemplates();
- }
-
- private function buildTemplates($name = 'templates')
- {
- $data = [
-
- 'invoice' => [
- 'subject' => EmailTemplateDefaults::emailInvoiceSubject(),
- 'body' => EmailTemplateDefaults::emailInvoiceTemplate(),
- ],
-
- 'quote' => [
- 'subject' => EmailTemplateDefaults::emailQuoteSubject(),
- 'body' => EmailTemplateDefaults::emailQuoteTemplate(),
- ],
- 'payment' => [
- 'subject' => EmailTemplateDefaults::emailPaymentSubject(),
- 'body' => EmailTemplateDefaults::emailPaymentTemplate(),
- ],
- 'payment_partial' => [
- 'subject' => EmailTemplateDefaults::emailPaymentPartialSubject(),
- 'body' => EmailTemplateDefaults::emailPaymentPartialTemplate(),
- ],
- 'reminder1' => [
- 'subject' => EmailTemplateDefaults::emailReminder1Subject(),
- 'body' => EmailTemplateDefaults::emailReminder1Template(),
- ],
- 'reminder2' => [
- 'subject' => EmailTemplateDefaults::emailReminder2Subject(),
- 'body' => EmailTemplateDefaults::emailReminder2Template(),
- ],
- 'reminder3' => [
- 'subject' => EmailTemplateDefaults::emailReminder3Subject(),
- 'body' => EmailTemplateDefaults::emailReminder3Template(),
- ],
- 'reminder_endless' => [
- 'subject' => EmailTemplateDefaults::emailReminderEndlessSubject(),
- 'body' => EmailTemplateDefaults::emailReminderEndlessTemplate(),
- ],
- 'statement' => [
- 'subject' => EmailTemplateDefaults::emailStatementSubject(),
- 'body' => EmailTemplateDefaults::emailStatementTemplate(),
- ],
- 'credit' => [
- 'subject' => EmailTemplateDefaults::emailCreditSubject(),
- 'body' => EmailTemplateDefaults::emailCreditTemplate(),
- ],
- 'purchase_order' => [
- 'subject' => EmailTemplateDefaults::emailPurchaseOrderSubject(),
- 'body' => EmailTemplateDefaults::emailPurchaseOrderTemplate(),
- ],
- ];
-
- Cache::forever($name, $data);
}
private function updateEnvironmentProperty(string $property, $value): void
diff --git a/app/Utils/Traits/Notifications/UserNotifies.php b/app/Utils/Traits/Notifications/UserNotifies.php
index a53f0d8c9204..043071c23db0 100644
--- a/app/Utils/Traits/Notifications/UserNotifies.php
+++ b/app/Utils/Traits/Notifications/UserNotifies.php
@@ -164,4 +164,9 @@ trait UserNotifies
return count(array_intersect($required_notification, $company_user->notifications->email)) >= 1;
}
+
+ public function findEntityAssignedNotification(\App\Models\CompanyUser $company_user, string $entity)
+ {
+ return count(array_intersect(["{$entity}_assigned"], $company_user->notifications->email)) >= 1;
+ }
}
diff --git a/database/migrations/2021_01_03_215053_update_canadian_dollar_symbol.php b/database/migrations/2021_01_03_215053_update_canadian_dollar_symbol.php
index 0a8d5c9204c0..43ea32fd5b8a 100644
--- a/database/migrations/2021_01_03_215053_update_canadian_dollar_symbol.php
+++ b/database/migrations/2021_01_03_215053_update_canadian_dollar_symbol.php
@@ -19,8 +19,7 @@ return new class extends Migration {
if ($currency) {
$currency->update(['symbol' => '$']);
}
-
- $this->buildCache(true);
+
}
/**
diff --git a/database/migrations/2021_01_07_023350_update_singapore_dollar_symbol.php b/database/migrations/2021_01_07_023350_update_singapore_dollar_symbol.php
index 1915a4cfdee6..30a64c7f8403 100644
--- a/database/migrations/2021_01_07_023350_update_singapore_dollar_symbol.php
+++ b/database/migrations/2021_01_07_023350_update_singapore_dollar_symbol.php
@@ -19,8 +19,6 @@ return new class extends Migration {
if ($currency) {
$currency->update(['symbol' => '$']);
}
-
- $this->buildCache(true);
}
/**
diff --git a/database/migrations/2021_04_22_110240_add_property_to_checkout_gateway_config.php b/database/migrations/2021_04_22_110240_add_property_to_checkout_gateway_config.php
index 734063651bb8..ba55cc317150 100644
--- a/database/migrations/2021_04_22_110240_add_property_to_checkout_gateway_config.php
+++ b/database/migrations/2021_04_22_110240_add_property_to_checkout_gateway_config.php
@@ -36,7 +36,6 @@ return new class extends Migration {
$checkout->save();
});
- // $this->buildCache(true);
}
/**
diff --git a/database/migrations/2022_05_08_004937_heal_stripe_gateway_configuration.php b/database/migrations/2022_05_08_004937_heal_stripe_gateway_configuration.php
index e12fafc9982f..b7c71804a628 100644
--- a/database/migrations/2022_05_08_004937_heal_stripe_gateway_configuration.php
+++ b/database/migrations/2022_05_08_004937_heal_stripe_gateway_configuration.php
@@ -34,7 +34,6 @@ return new class extends Migration {
$record->save();
}
- $this->buildCache(true);
}
}
diff --git a/database/migrations/2022_05_23_050754_drop_redundant_column_show_production_description_dropdown.php b/database/migrations/2022_05_23_050754_drop_redundant_column_show_production_description_dropdown.php
index 4574df9e7dbc..2a5569b59202 100644
--- a/database/migrations/2022_05_23_050754_drop_redundant_column_show_production_description_dropdown.php
+++ b/database/migrations/2022_05_23_050754_drop_redundant_column_show_production_description_dropdown.php
@@ -19,7 +19,6 @@ return new class extends Migration {
$table->dropColumn('show_production_description_dropdown');
});
- $this->buildCache(true);
}
/**
diff --git a/database/migrations/2022_07_06_080127_add_purchase_order_to_expense.php b/database/migrations/2022_07_06_080127_add_purchase_order_to_expense.php
index 741b54b3999b..510c50b62f17 100644
--- a/database/migrations/2022_07_06_080127_add_purchase_order_to_expense.php
+++ b/database/migrations/2022_07_06_080127_add_purchase_order_to_expense.php
@@ -36,8 +36,6 @@ class AddPurchaseOrderToExpense extends Migration
if (!$language) {
Language::unguard();
Language::create(['id' => 36, 'name' => 'Bulgarian', 'locale' => 'bg']);
-
- $this->buildCache(true);
}
}
diff --git a/database/migrations/2022_11_22_215618_lock_tasks_when_invoiced.php b/database/migrations/2022_11_22_215618_lock_tasks_when_invoiced.php
index 29bb60d3f649..ec7807063e35 100644
--- a/database/migrations/2022_11_22_215618_lock_tasks_when_invoiced.php
+++ b/database/migrations/2022_11_22_215618_lock_tasks_when_invoiced.php
@@ -60,8 +60,6 @@ return new class extends Migration {
}
\Illuminate\Support\Facades\Artisan::call('ninja:design-update');
-
- $this->buildCache(true);
}
/**
diff --git a/database/migrations/2022_11_30_063229_add_payment_id_to_bank_transaction_table.php b/database/migrations/2022_11_30_063229_add_payment_id_to_bank_transaction_table.php
index affa8ec6ff57..4ede57e4b06f 100644
--- a/database/migrations/2022_11_30_063229_add_payment_id_to_bank_transaction_table.php
+++ b/database/migrations/2022_11_30_063229_add_payment_id_to_bank_transaction_table.php
@@ -21,7 +21,6 @@ return new class extends Migration {
\Illuminate\Support\Facades\Artisan::call('ninja:design-update');
- $this->buildCache(true);
}
/**
diff --git a/database/migrations/2024_06_19_015127_2024_06_19_referral_meta_data.php b/database/migrations/2024_06_19_015127_2024_06_19_referral_meta_data.php
new file mode 100644
index 000000000000..b85db245d48d
--- /dev/null
+++ b/database/migrations/2024_06_19_015127_2024_06_19_referral_meta_data.php
@@ -0,0 +1,28 @@
+mediumText('referral_meta')->nullable();
+ });
+
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ //
+ }
+};
diff --git a/database/seeders/RandomDataSeeder.php b/database/seeders/RandomDataSeeder.php
index 16d7d4e42154..9e134dcf8ef1 100644
--- a/database/seeders/RandomDataSeeder.php
+++ b/database/seeders/RandomDataSeeder.php
@@ -59,8 +59,6 @@ class RandomDataSeeder extends Seeder
public function run()
{
- $this->buildCache(true);
-
$this->command->info('Running RandomDataSeeder');
Model::unguard();
diff --git a/lang/ar/texts.php b/lang/ar/texts.php
index 7de2e7d1e491..b5f08b03cf2c 100644
--- a/lang/ar/texts.php
+++ b/lang/ar/texts.php
@@ -192,7 +192,7 @@ $lang = array(
'removed_logo' => 'تمت إزالة الشعار بنجاح',
'sent_message' => 'تم إرسال الرسالة بنجاح',
'invoice_error' => 'يرجى التأكد من تحديد العميل وتصحيح أي أخطاء',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
+ 'limit_clients' => 'لقد وصلت إلى حد العميل :count للحسابات المجانية. تهانينا على نجاحك!',
'payment_error' => 'كان هناك خطأ في معالجة الدفع الخاص بك. الرجاء معاودة المحاولة في وقت لاحق',
'registration_required' => 'التسجيل مطلوب',
'confirmation_required' => 'يرجى تأكيد عنوان بريدك الإلكتروني: رابط لإعادة إرسال رسالة التأكيد عبر البريد الإلكتروني.',
@@ -2676,7 +2676,7 @@ $lang = array(
'no_assets' => 'لا توجد صور ، اسحب للتحميل',
'add_image' => 'إضافة صورة',
'select_image' => 'اختر صورة',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
+ 'upgrade_to_upload_images' => 'قم بالترقية إلى خطة Enterprise لتحميل الملفات والصور',
'delete_image' => 'حذف صورة',
'delete_image_help' => 'تحذير: سيؤدي حذف الصورة إلى إزالتها من جميع المقترحات.',
'amount_variable_help' => 'ملاحظة: سيستخدم حقل مبلغ الفاتورة $ الحقل الجزئي / الإيداع إذا تم تعيينه وإلا فسيستخدم رصيد الفاتورة.',
@@ -2915,13 +2915,6 @@ $lang = array(
'mime_types' => 'أنواع التمثيل الصامت',
'mime_types_placeholder' => '.pdf ، .docx ، .jpg',
'mime_types_help' => 'قائمة مفصولة بفواصل لأنواع التمثيل الصامت المسموح بها ، اتركها فارغة للجميع',
- 'ticket_number_start_help' => 'يجب أن يكون رقم التذكرة أكبر من رقم التذكرة الحالي',
- 'new_ticket_template_id' => 'تذكرة جديدة',
- 'new_ticket_autoresponder_help' => 'سيؤدي تحديد قالب إلى إرسال رد تلقائي إلى العميل / جهة الاتصال عند إنشاء بطاقة جديدة',
- 'update_ticket_template_id' => 'تذكرة محدثة',
- 'update_ticket_autoresponder_help' => 'سيؤدي تحديد قالب إلى إرسال رد تلقائي إلى العميل / جهة الاتصال عند تحديث التذكرة',
- 'close_ticket_template_id' => 'تذكرة مغلقة',
- 'close_ticket_autoresponder_help' => 'سيؤدي تحديد قالب إلى إرسال رد تلقائي إلى العميل / جهة الاتصال عند إغلاق التذكرة',
'default_priority' => 'الأولوية الافتراضية',
'alert_new_comment_id' => 'تعليق جديد',
'alert_comment_ticket_help' => 'سيؤدي تحديد قالب إلى إرسال إشعار (إلى الوكيل) عند إجراء تعليق.',
@@ -2938,8 +2931,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'إشعارات إضافية بشأن التذاكر المتأخرة',
'alert_ticket_overdue_email_help' => 'رسائل بريد إلكتروني مفصولة بفاصلة لإرسالها إلى نسخة مخفية الوجهة عند التأخر في تقديم التذكرة.',
'alert_ticket_overdue_agent_id_help' => 'سيؤدي تحديد قالب إلى إرسال إشعار (إلى الوكيل) عندما تصبح التذكرة متأخرة.',
- 'ticket_master' => 'مدير التذاكر',
- 'ticket_master_help' => 'لديه القدرة على تخصيص ونقل التذاكر. تم تعيينه كوكيل افتراضي لجميع التذاكر.',
'default_agent' => 'الوكيل الافتراضي',
'default_agent_help' => 'إذا تم تحديده فسيتم تخصيصه تلقائيًا لجميع التذاكر الواردة',
'show_agent_details' => 'إظهار تفاصيل الوكيل في الردود',
@@ -2947,43 +2938,19 @@ $lang = array(
'remove_avatar' => 'إزالة الصورة الرمزية',
'ticket_not_found' => 'لم يتم العثور على التذكرة',
'add_template' => 'أضف قالبًا',
- 'ticket_template' => 'قالب التذكرة',
- 'ticket_templates' => 'قوالب التذاكر',
'updated_ticket_template' => 'نموذج تذكرة محدث',
'created_ticket_template' => 'تم إنشاء نموذج تذكرة',
'archive_ticket_template' => 'قالب الأرشيف',
'restore_ticket_template' => 'استعادة النموذج',
'archived_ticket_template' => 'تمت أرشفة النموذج بنجاح',
'restored_ticket_template' => 'تمت استعادة القالب بنجاح',
- 'close_reason' => 'دعنا نعرف سبب إغلاق هذه التذكرة',
- 'reopen_reason' => 'أخبرنا عن سبب إعادة فتح هذه التذكرة',
'enter_ticket_message' => 'الرجاء إدخال رسالة لتحديث التذكرة',
'show_hide_all' => 'إظهار / إخفاء الكل',
'subject_required' => 'الموضوع (مطلوب',
'mobile_refresh_warning' => 'إذا كنت تستخدم تطبيق الهاتف المحمول ، فقد تحتاج إلى إجراء تحديث كامل.',
- 'enable_proposals_for_background' => 'لتحميل صورة خلفية :link لتمكين وحدة العروض.',
- 'ticket_assignment' => 'تم تخصيص التذكرة :ticket_number إلى :agent',
- 'ticket_contact_reply' => 'تم تحديث التذكرة :ticket_number بواسطة العميل :contact',
- 'ticket_new_template_subject' => 'تم إنشاء التذكرة :ticket_number.',
- 'ticket_updated_template_subject' => 'تم تحديث التذكرة :ticket_number.',
- 'ticket_closed_template_subject' => 'تم إغلاق التذكرة :ticket_number.',
- 'ticket_overdue_template_subject' => 'لقد فات موعد التذكرة :ticket_number الآن',
'merge' => 'دمج',
'merged' => 'مندمجة',
'agent' => 'عامل',
- 'parent_ticket' => 'تذكرة الوالدين',
- 'linked_tickets' => 'التذاكر المرتبطة',
- 'merge_prompt' => 'أدخل رقم التذكرة للدمج فيها',
- 'merge_from_to' => 'التذكرة رقم: اندمجت old_ticket في تذكرة #: new_ticket',
- 'merge_closed_ticket_text' => 'التذكرة رقم: تم إغلاق old_ticket ودمجها في تذكرة #: new_ticket - :subject',
- 'merge_updated_ticket_text' => 'التذكرة رقم: تم إغلاق التذكرة القديمة ودمجها في هذه التذكرة',
- 'merge_placeholder' => 'دمج التذكرة #: التذكرة في التذكرة التالية',
- 'select_ticket' => 'حدد تذكرة',
- 'new_internal_ticket' => 'تذكرة داخلية جديدة',
- 'internal_ticket' => 'تذكرة داخلية',
- 'create_ticket' => 'إنشاء تذكرة',
- 'allow_inbound_email_tickets_external' => 'تذاكر جديدة عن طريق البريد الإلكتروني (العميل)',
- 'allow_inbound_email_tickets_external_help' => 'السماح للعملاء بإنشاء تذاكر جديدة عن طريق البريد الإلكتروني',
'include_in_filter' => 'تضمين في التصفية',
'custom_client1' => ':قيمة',
'custom_client2' => ':قيمة',
@@ -4418,7 +4385,7 @@ $lang = array(
'client_shipping_country' => 'بلد شحن العميل',
'load_pdf' => 'قم بتحميل ملف PDF',
'start_free_trial' => 'ابدأ الإصدار التجريبي المجاني',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
+ 'start_free_trial_message' => 'ابدأ تجربتك المجانية لمدة 14 يومًا للخطة الاحترافية',
'due_on_receipt' => 'المستحقة على إيصال',
'is_paid' => 'مدفوع',
'age_group_paid' => 'مدفوع',
@@ -5277,45 +5244,46 @@ $lang = array(
'rappen_rounding' => 'تقريب رابين',
'rappen_rounding_help' => 'جولة المبلغ إلى 5 سنتات',
'assign_group' => 'تعيين المجموعة',
- 'paypal_advanced_cards' => 'Advanced Card Payments',
- 'local_domain_help' => 'EHLO domain (optional)',
- 'port_help' => 'ie. 25,587,465',
- 'host_help' => 'ie. smtp.gmail.com',
- 'always_show_required_fields' => 'Allows show required fields form',
- 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
- 'advanced_cards' => 'Advanced Cards',
- 'activity_140' => 'Statement sent to :client',
- 'invoice_net_amount' => 'Invoice Net Amount',
- 'round_to_minutes' => 'Round To Minutes',
- '1_second' => '1 Second',
- '1_minute' => '1 Minute',
- '5_minutes' => '5 Minutes',
- '15_minutes' => '15 Minutes',
- '30_minutes' => '30 Minutes',
- '1_hour' => '1 Hour',
- '1_day' => '1 Day',
- 'round_tasks' => 'Task Rounding Direction',
- 'round_tasks_help' => 'Round task times up or down.',
- 'direction' => 'Direction',
- 'round_up' => 'Round Up',
- 'round_down' => 'Round Down',
- 'task_round_to_nearest' => 'Round To Nearest',
- 'task_round_to_nearest_help' => 'The interval to round the task to.',
- 'bulk_updated' => 'Successfully updated data',
- 'bulk_update' => 'Bulk Update',
- 'calculate' => 'Calculate',
- 'sum' => 'Sum',
- 'money' => 'Money',
- 'web_app' => 'Web App',
- 'desktop_app' => 'Desktop App',
- 'disconnected' => 'Disconnected',
- 'reconnect' => 'Reconnect',
- 'e_invoice_settings' => 'E-Invoice Settings',
- 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
- 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
- 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
- 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'paypal_advanced_cards' => 'مدفوعات البطاقة المتقدمة',
+ 'local_domain_help' => 'مجال EHLO (اختياري)',
+ 'port_help' => 'أي. 25,587,465',
+ 'host_help' => 'أي. smtp.gmail.com',
+ 'always_show_required_fields' => 'يسمح بإظهار نموذج الحقول المطلوبة',
+ 'always_show_required_fields_help' => 'يعرض نموذج الحقول المطلوبة دائمًا عند الخروج',
+ 'advanced_cards' => 'بطاقات متقدمة',
+ 'activity_140' => 'تم إرسال البيان إلى :client',
+ 'invoice_net_amount' => 'صافي مبلغ الفاتورة',
+ 'round_to_minutes' => 'جولة إلى دقائق',
+ '1_second' => '1 ثانية',
+ '1_minute' => '1 دقيقة',
+ '5_minutes' => '5 دقائق',
+ '15_minutes' => '15 دقيقة',
+ '30_minutes' => '30 دقيقة',
+ '1_hour' => '1 ساعة',
+ '1_day' => 'يوم 1',
+ 'round_tasks' => 'اتجاه تقريب المهمة',
+ 'round_tasks_help' => 'قم بتقريب أوقات المهام لأعلى أو لأسفل.',
+ 'direction' => 'اتجاه',
+ 'round_up' => 'جمع الشمل',
+ 'round_down' => 'المستدير لأسفل',
+ 'task_round_to_nearest' => 'جولة إلى الأقرب',
+ 'task_round_to_nearest_help' => 'الفاصل الزمني لتقريب المهمة إلى.',
+ 'bulk_updated' => 'تم تحديث البيانات بنجاح',
+ 'bulk_update' => 'تحديث بالجملة',
+ 'calculate' => 'احسب',
+ 'sum' => 'مجموع',
+ 'money' => 'مال',
+ 'web_app' => 'التطبيق على شبكة الإنترنت',
+ 'desktop_app' => 'التطبيق سطح المكتب',
+ 'disconnected' => 'انقطع الاتصال',
+ 'reconnect' => 'أعد الاتصال',
+ 'e_invoice_settings' => 'إعدادات الفاتورة الإلكترونية',
+ 'btcpay_refund_subject' => 'استرداد فاتورتك عبر BTCPay',
+ 'btcpay_refund_body' => 'لقد تم إصدار المبلغ المسترد المخصص لك. للمطالبة بها عبر BTCPay، يرجى النقر على هذا الرابط:',
+ 'currency_mauritanian_ouguiya' => 'الأوقية الموريتانية',
+ 'currency_bhutan_ngultrum' => 'بوتان نغولتروم',
+ 'end_of_month' => 'نهاية الشهر',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/bg/texts.php b/lang/bg/texts.php
index af87cbbca4f4..716ec93c7cc0 100644
--- a/lang/bg/texts.php
+++ b/lang/bg/texts.php
@@ -200,7 +200,7 @@ $lang = array(
'removed_logo' => 'Логото е премахнато успешно',
'sent_message' => 'Съобщението е изпратено успешно',
'invoice_error' => 'Моля изберете клиент и коригирайте грешките',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Имаше проблем при обработването на плащането Ви. Моля опитайте пак по късно.',
'registration_required' => 'Необходима е регистрация',
'confirmation_required' => 'Моля потвърдете мейл адреса си, :link за да изпратите наново писмото за потвърждение ',
@@ -2198,7 +2198,7 @@ $lang = array(
'mailgun_private_key' => 'Mailgun частен ключ',
'brevo_domain' => 'Brevo Domain',
'brevo_private_key' => 'Brevo Private Key',
- 'send_test_email' => 'Изпращане на тестов имейл',
+ 'send_test_email' => 'Send Test Email',
'select_label' => 'Избор на етикет',
'label' => 'Етикет',
'service' => 'Услуга',
@@ -2696,7 +2696,7 @@ $lang = array(
'no_assets' => 'Без изображения, завлачете за качване',
'add_image' => 'Добави картинка',
'select_image' => 'Избери картинка',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Изтриване на изображение',
'delete_image_help' => 'Внимание: Изтриването на изображението ще го премахне от всички предложения.',
'amount_variable_help' => 'Забележка: Полето $amount във фактурата ще използва полето частично/депозит, ако е заложено; иначе ще използва баланса по фактурата.',
@@ -2935,13 +2935,6 @@ $lang = array(
'mime_types' => 'Mime типове',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Разделен със запетая списък на разрешените mime типове. Оставете празно, за да разрешите всички.',
- 'ticket_number_start_help' => 'Новерът на тикета трябва да е по-голям от номера на настоящия',
- 'new_ticket_template_id' => 'Нов Ticket',
- 'new_ticket_autoresponder_help' => 'Изборът на шаблон ще активира изпращането на автоматичен отговор на клиента / контакта при създаването на нов Ticket.',
- 'update_ticket_template_id' => 'Актуализиран Ticket',
- 'update_ticket_autoresponder_help' => 'Изборът на шаблон ще активира изпращането на автоматичен отговор на клиента / контакта при актуализирането на Ticket.',
- 'close_ticket_template_id' => 'Затворен Ticket',
- 'close_ticket_autoresponder_help' => 'Изборът на шаблон ще активира изпращането на автоматичен отговор на клиента / контакта при затварянето на Ticket.',
'default_priority' => 'Приоритет по подразбиране',
'alert_new_comment_id' => 'Нов коментар',
'alert_comment_ticket_help' => 'С избора на шаблон ще бъде изпращано известие (към агента), когато бъде направен коментар.',
@@ -2958,8 +2951,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Допълнителни известия за просрочен Ticket',
'alert_ticket_overdue_email_help' => 'Разделени със запетая имей адреси за bcc при просрочие на Ticket.',
'alert_ticket_overdue_agent_id_help' => 'С избора на шаблон ще бъде изпращано известие (към агента), когато тикетът стане просрочен.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Може да присвоява и да прехвърля тикети. Присвоен като агент по подразбиране за всички тикети.',
'default_agent' => 'Агент по подразбиране',
'default_agent_help' => 'Ако е избран, ще бъде присвоен на всички входящи тикет-и',
'show_agent_details' => 'Показване на детайлите на агента при отговор',
@@ -2967,43 +2958,19 @@ $lang = array(
'remove_avatar' => 'Премахване на аватар',
'ticket_not_found' => 'Тикетът не е намерен',
'add_template' => 'Добавяне на шаблон',
- 'ticket_template' => 'Шаблон за Ticket',
- 'ticket_templates' => 'Шаблони за Ticket',
'updated_ticket_template' => 'Актуализиран шаблон за Ticket',
'created_ticket_template' => 'Създаден шаблон за Ticket',
'archive_ticket_template' => 'Архивиране на шаблон',
'restore_ticket_template' => 'Възстановяване на шаблон',
'archived_ticket_template' => 'Успешно архивиран шаблон',
'restored_ticket_template' => 'Успешно възстановен шаблон',
- 'close_reason' => 'Кажете ни, защо затваряте този тикет',
- 'reopen_reason' => 'Кажете ни, защо отваряте отново този тикет',
'enter_ticket_message' => 'Моля, въведете съобщение за да актуализирате тикет-а',
'show_hide_all' => 'Показване / Скриване на всички',
'subject_required' => 'Полето Относно е задължително',
'mobile_refresh_warning' => 'Ако използвате мобилното приложение, може да трябва да направите full refresh.',
- 'enable_proposals_for_background' => 'За да качите фоново изображение :link за активиране на модула за предложения.',
- 'ticket_assignment' => 'Ticket :ticket_number е присвоен на :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number е актуализиран от клиент :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number е създаден.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number е актуализиран.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number е затворен.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number вече е просрочен',
'merge' => 'Обединяване',
'merged' => 'Обединен',
'agent' => 'Агент',
- 'parent_ticket' => 'Родителски тикет',
- 'linked_tickets' => 'Свързани тикети',
- 'merge_prompt' => 'Въведете номер на Ticket, към който да бъде добавен',
- 'merge_from_to' => 'Ticket #:old_ticket обединен в Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket е затворен и обединен в Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket е затворед и добавен в този',
- 'merge_placeholder' => 'Обедини Ticket #:ticket в следния',
- 'select_ticket' => 'Избор на Ticket',
- 'new_internal_ticket' => 'Нов вътрешен Ticket',
- 'internal_ticket' => 'Вътрешен Ticket',
- 'create_ticket' => 'Създаване на Ticket',
- 'allow_inbound_email_tickets_external' => 'Нови Tickets по имейл (клиент)',
- 'allow_inbound_email_tickets_external_help' => 'Клиентите могат да създават нови Ticket по имейл',
'include_in_filter' => 'Включи във филтъра',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4030,7 +3997,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4171,7 +4138,7 @@ $lang = array(
'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.',
+ 'quotes_with_status_sent_can_be_approved' => 'Only quotes with "Sent" status can be approved. Expired quotes cannot be approved.',
'no_quotes_available_for_download' => 'No quotes available for download.',
'copyright' => 'Copyright',
'user_created_user' => ':user created :created_user at :time',
@@ -4438,7 +4405,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5148,7 +5115,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5296,8 +5263,47 @@ $lang = array(
'flutter_web_warning' => 'We recommend using the new web app or the desktop app for the best performance',
'rappen_rounding' => 'Rappen Rounding',
'rappen_rounding_help' => 'Round amount to 5 cents',
- 'always_show_required_fields' => 'Always display required fields',
- 'always_show_required_fields_help' => 'Will show the form regards if the fields are filled or not'
+ 'assign_group' => 'Assign group',
+ 'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/ca/texts.php b/lang/ca/texts.php
index 07ff822ace02..ef7b8ccbb261 100644
--- a/lang/ca/texts.php
+++ b/lang/ca/texts.php
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number',
- 'new_ticket_template_id' => 'Nou tiquet',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Tiquet actualitzat',
- 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated',
- 'close_ticket_template_id' => 'Tiquet tancat',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'Nou comentari',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'Ticket not found',
'add_template' => 'Add Template',
- 'ticket_template' => 'Ticket Template',
- 'ticket_templates' => 'Plantilles de tiquet',
'updated_ticket_template' => 'Plantilla de tiquet actualitzada',
'created_ticket_template' => 'Plantilla de tiquet creada',
'archive_ticket_template' => 'Arxiva plantilla',
'restore_ticket_template' => 'Restaura plantilla',
'archived_ticket_template' => 'Successfully archived template',
'restored_ticket_template' => 'Successfully restored template',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Please enter a message to update the ticket',
'show_hide_all' => 'Mostra / oculta tot',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
- 'enable_proposals_for_background' => 'To upload a background image :link to enable the proposals module.',
- 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number has been updated by client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number has been created.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue',
'merge' => 'Fusiona',
'merged' => 'Fusionat',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket',
- 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket',
- 'select_ticket' => 'Select Ticket',
- 'new_internal_ticket' => 'New internal ticket',
- 'internal_ticket' => 'Internal ticket',
- 'create_ticket' => 'Create ticket',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5334,7 +5301,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/da/texts.php b/lang/da/texts.php
index df4dc4f1fe5d..1f0bd29703f3 100644
--- a/lang/da/texts.php
+++ b/lang/da/texts.php
@@ -2933,13 +2933,6 @@ $lang = array(
'mime_types' => 'Mime typer',
'mime_types_placeholder' => '. PDF , .docx, .jpg',
'mime_types_help' => 'Kommasepareret liste over tilladte mime-typer, lad tom for alle',
- 'ticket_number_start_help' => 'Sagsnummer skal være større end det nuværende sagsnummer',
- 'new_ticket_template_id' => 'Ny sag',
- 'new_ticket_autoresponder_help' => 'Valg af en skabelon vil sende et auto-svar til en klient/kontakt når en ny sag oprettes',
- 'update_ticket_template_id' => 'Sag blev opdateret',
- 'update_ticket_autoresponder_help' => 'Valg af en skabelon vil sende et auto-svar til en klient/kontakt når en sag bliver opdateret',
- 'close_ticket_template_id' => 'Sag blev lukket',
- 'close_ticket_autoresponder_help' => 'Valg af en skabelon vil sende et auto-svar til en klient/kontakt når en sag lukkes',
'default_priority' => 'Standardprioritet',
'alert_new_comment_id' => 'Ny kommentar',
'alert_comment_ticket_help' => 'Hvis du vælger en skabelon, sendes der en meddelelse (til agent), når der kommer en kommentar.',
@@ -2956,8 +2949,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Yderligere forfaldne Sag -meddelelser',
'alert_ticket_overdue_email_help' => 'Kommaseparerede e-mails til bcc på Sag forsinket.',
'alert_ticket_overdue_agent_id_help' => 'Valg af en skabelon vil sende en meddelelse (til agent), når en Sag bliver forsinket.',
- 'ticket_master' => 'Sag Master',
- 'ticket_master_help' => 'Har evnen til at tildele og overføre billetter. Tildelt som standardagent for alle billetter.',
'default_agent' => 'Standardagent',
'default_agent_help' => 'Hvis valgt vil det automatisk blive tildelt alle indgående billetter',
'show_agent_details' => 'Vis agentoplysninger om svar',
@@ -2965,43 +2956,19 @@ $lang = array(
'remove_avatar' => 'Fjern avatar',
'ticket_not_found' => 'Sag blev ikke fundet',
'add_template' => 'Tilføj skabelon',
- 'ticket_template' => 'Sagsskabelon',
- 'ticket_templates' => 'Sagsskabeloner',
'updated_ticket_template' => 'Sagsskabelon blev opdateret',
'created_ticket_template' => 'Sagsskabelon blev oprettet',
'archive_ticket_template' => 'Arkiv skabelon',
'restore_ticket_template' => 'Genskab skabelon',
'archived_ticket_template' => 'Succesfuldt arkiveret skabelon',
'restored_ticket_template' => 'Succesfuldt genskabt skabelon',
- 'close_reason' => 'Fortæl os hvorfor du lukker denne sag',
- 'reopen_reason' => 'Fortæl os hvorfor du genåbner denne sag',
'enter_ticket_message' => 'Skriv venligst en besked for at opdatere denne sag',
'show_hide_all' => 'Vis/skjul alle',
'subject_required' => 'Emne påkrævet',
'mobile_refresh_warning' => 'Hvis du bruger mobilappen, skal du muligvis foretage en fuld opdatering.',
- 'enable_proposals_for_background' => 'For at uploade et baggrundsbillede :link for at aktivere modulet forslag.',
- 'ticket_assignment' => 'Sag :ticket_number er blevet tildelt til :agent',
- 'ticket_contact_reply' => 'Sag :ticket_number er blevet opdateret af klienten :contact',
- 'ticket_new_template_subject' => 'Sag :ticket_number blev oprettet',
- 'ticket_updated_template_subject' => 'Sag :ticket_number er blevet opdateret',
- 'ticket_closed_template_subject' => 'Sag :ticket_number er blevet lukket.',
- 'ticket_overdue_template_subject' => 'Sag :ticket_number er nu forfalden',
'merge' => 'Fusionere',
'merged' => 'Fusioneret',
'agent' => 'Agent',
- 'parent_ticket' => 'Overordnet sag',
- 'linked_tickets' => 'Sammenkædede sager',
- 'merge_prompt' => 'Angiv dét sagsnummer som der skal flettes ind i',
- 'merge_from_to' => 'Sagen #:old_ticket blev flettet ind i sag #:new_ticket',
- 'merge_closed_ticket_text' => 'Sagen #:old_ticket blev lukket og flettet ind i sag#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Sagen #:old_ticket blev lukket og flettet ind i denne sag',
- 'merge_placeholder' => 'Sammenflet sagen #:ticket ind i følgende sag',
- 'select_ticket' => 'Vælg sag',
- 'new_internal_ticket' => 'Ny intern sag',
- 'internal_ticket' => 'Intern sag',
- 'create_ticket' => 'Opret sag',
- 'allow_inbound_email_tickets_external' => 'Nye sager per e-mail (klient)',
- 'allow_inbound_email_tickets_external_help' => 'Tillad at klienter opretter nye sager per e-mail',
'include_in_filter' => 'Inkluder i filter',
'custom_client1' => ':VÆRDI',
'custom_client2' => ':VÆRDI',
@@ -5333,7 +5300,8 @@ $lang = array(
'btcpay_refund_body' => 'En refundering til dig er blevet udstedt. For at gøre krav på det via BTCPay, klik venligst på dette link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/de/texts.php b/lang/de/texts.php
index 83575735e1ed..a282945440a5 100644
--- a/lang/de/texts.php
+++ b/lang/de/texts.php
@@ -2935,13 +2935,6 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'mime_types' => 'Mime-Typen',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Kommagetrennte Liste der zulässigen Mime-Typen, leer lassen für alle',
- 'ticket_number_start_help' => 'Die Ticketnummer muss größer sein als die aktuelle Ticketnummer.',
- 'new_ticket_template_id' => 'Neues Ticket',
- 'new_ticket_autoresponder_help' => 'Die Auswahl einer Vorlage sendet eine automatische Antwort an einen Kunden/Kontakt, wenn ein neues Ticket erstellt wird.',
- 'update_ticket_template_id' => 'Ticket aktualisiert',
- 'update_ticket_autoresponder_help' => 'Die Auswahl einer Vorlage sendet eine automatische Antwort an einen Kunden/Kontakt, wenn ein Ticket aktualisiert wird.',
- 'close_ticket_template_id' => 'Ticket geschlossen',
- 'close_ticket_autoresponder_help' => 'Die Auswahl einer Vorlage sendet eine automatische Antwort an einen Kunden/Kontakt, wenn ein Ticket geschlossen ist.',
'default_priority' => 'Standardpriorität',
'alert_new_comment_id' => 'Neuer Kommentar',
'alert_comment_ticket_help' => 'Die Auswahl einer Vorlage sendet eine Benachrichtigung (an den Agenten), wenn ein Kommentar abgegeben wird.',
@@ -2958,8 +2951,6 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'alert_ticket_overdue_email' => 'Zusätzliche überfällige Ticket-Benachrichtigungen',
'alert_ticket_overdue_email_help' => 'Komma getrennte E-Mails an bcc bei überfälligem Ticket.',
'alert_ticket_overdue_agent_id_help' => 'Die Auswahl einer Vorlage sendet eine Benachrichtigung (an den Agenten), wenn ein Ticket überfällig wird.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Hat die Fähigkeit, Tickets zuzuordnen und zu übertragen. Wird als Standard-Agent für alle Tickets zugewiesen.',
'default_agent' => 'Standard-Agent',
'default_agent_help' => 'Wenn ausgewählt, wird er automatisch allen eingehenden Tickets zugeordnet.',
'show_agent_details' => 'Zeigen Sie Agentendetails in den Antworten an',
@@ -2967,43 +2958,19 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'remove_avatar' => 'Profilbild entfernen',
'ticket_not_found' => 'Ticket nicht gefunden',
'add_template' => 'Vorlage hinzufügen',
- 'ticket_template' => 'Ticket Vorlage',
- 'ticket_templates' => 'Ticket Vorlagen',
'updated_ticket_template' => 'Ticket Vorlage aktualisiert',
'created_ticket_template' => 'Ticket Vorlage erstellt',
'archive_ticket_template' => 'Vorlage archiviert',
'restore_ticket_template' => 'Vorlage wieder herstellen',
'archived_ticket_template' => 'Vorlage erfolgreich archiviert',
'restored_ticket_template' => 'Vorlage erfolgreich wieder hergestellt',
- 'close_reason' => 'Lassen Sie uns wissen, warum Sie dieses Ticket schließen.',
- 'reopen_reason' => 'Lassen Sie uns wissen, warum Sie dieses Ticket wieder öffnen.',
'enter_ticket_message' => 'Bitte geben Sie eine Nachricht ein, um das Ticket zu aktualisieren.',
'show_hide_all' => 'Alle anzeigen / verstecken',
'subject_required' => 'Betreff erforderlich',
'mobile_refresh_warning' => 'Wenn Sie die mobile App verwenden, müssen Sie möglicherweise eine vollständige Aktualisierung durchführen.',
- 'enable_proposals_for_background' => 'So laden Sie ein Hintergrundbild hoch :link zum Aktivieren des Vorschlagsmoduls.',
- 'ticket_assignment' => 'Ticket :ticket_number wurde dem :agent zugewiesen.',
- 'ticket_contact_reply' => 'Ticket :ticket_number wurde vom Kunden :contact aktualisiert',
- 'ticket_new_template_subject' => 'Ticket :ticket_number wurde erstellt.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number wurde aktualisiert.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number wurde geschlossen.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number ist jetzt überfällig.',
'merge' => 'Zusammenführen',
'merged' => 'Zusammengeführt',
'agent' => 'Agent',
- 'parent_ticket' => 'Übergeordnetes Ticket',
- 'linked_tickets' => 'Verknüpfte Tickets',
- 'merge_prompt' => 'Geben Sie die Ticketnummer ein, mit der Sie zusammenführen möchten.',
- 'merge_from_to' => 'Ticket #:old_ticket mit Ticket #:new_ticket zusammengeführt',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket wurde geschlossen und in Ticket#:new_ticket zusammengeführt -:: Subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket wurde geschlossen und mit diesem Ticket zusammengeführt.',
- 'merge_placeholder' => 'Zusammenführen von Ticket #:ticket in das folgende Ticket',
- 'select_ticket' => 'Ticket auswählen',
- 'new_internal_ticket' => 'Neues internes Ticket',
- 'internal_ticket' => 'Internes Ticket',
- 'create_ticket' => 'Ticket erstellen',
- 'allow_inbound_email_tickets_external' => 'Neue Tickets per E-Mail (Kunde)',
- 'allow_inbound_email_tickets_external_help' => 'Ermöglicht es Kunden, neue Tickets per E-Mail zu erstellen.',
'include_in_filter' => 'In den Filter aufnehmen',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5338,7 +5305,8 @@ Leistungsempfängers',
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/el/texts.php b/lang/el/texts.php
index 025735402c50..9dde6b9dafd8 100644
--- a/lang/el/texts.php
+++ b/lang/el/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Επιτυχής διαγραφή λογότυπου',
'sent_message' => 'Επιτυχής αποστολή μηνύματος',
'invoice_error' => 'Παρακαλώ σιγουρευτείτε ότι επιλέξατε ένα πελάτη και διορθώσατε τυχόν σφάλματα',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Προέκυψε ένα σφάλμα κατά τη διαδικασία της πληρωμής. Παρακαλώ, δοκιμάστε ξανά σε λίγο.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Παρακαλώ επιβεβαιώστε τη διεύθυνση email, :link για να ξαναστείλετε το email επιβεβαίωσης.',
@@ -2695,7 +2695,7 @@ $lang = array(
'no_assets' => 'Δεν υπάρχουν εικόνες, σύρατε για μεταφόρτωση',
'add_image' => 'Προσθήκη εικόνας',
'select_image' => 'Επιλογή εικόνας',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Διαγραφή εικόνας',
'delete_image_help' => 'Ειδοποίηση: διαγράφοντας την εικόνα θα την αφαιρέσει από όλες τις προτάσεις.',
'amount_variable_help' => 'Σημείωση: το πεδίο $amount του τιμολογίου θα χρησιμοποιήσει το πεδίο μερική προκαταβολή εάν οριστεί διαφορετικά θα χρησιμοποιήσει το υπόλοιπο του τιμολογίου.',
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Τύποι αρχείων',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Λίστα χωριζόμενων με κόμμα τύπων αρχείων, αφήστε το κενό για όλους',
- 'ticket_number_start_help' => 'Ο αριθμός του αιτήματος υποστήριξης πρέπει να είναι μεγαλύτερος από τον τρέχοντα αριθμό αιτήματος βοήθειας',
- 'new_ticket_template_id' => 'Νέο αίτημα υποστήριξης',
- 'new_ticket_autoresponder_help' => 'Η επιλογή ενός προτύπου θα στείλει μία αυτόματη ειδοποίηση στον πελάτη/επαφή όταν δημιουργηθεί ένα νέο αίτημα υποστήριξης.',
- 'update_ticket_template_id' => 'Ενημερωμένο Αιτήματος υποστήριξης',
- 'update_ticket_autoresponder_help' => 'Η επιλογή ενός προτύπου θα στείλει μία αυτόματη ειδοποίηση στον πελάτη/επαφή όταν ανανεωθεί ένα αίτημα υποστήριξης.',
- 'close_ticket_template_id' => 'Κλεισμένο Αίτημα υποστήριξης',
- 'close_ticket_autoresponder_help' => 'Η επιλογή ενός προτύπου θα στείλει μία αυτόματη ειδοποίηση στον πελάτη/επαφή όταν κλείσει ένα αίτημα υποστήριξης.',
'default_priority' => 'Προεπιλεγμένη προτεραιότητα',
'alert_new_comment_id' => 'Νέο σχόλιο',
'alert_comment_ticket_help' => 'Η επιλογή ενός προτύπου θα στείλει μία ειδοποίηση (στον εκπρόσωπο) όταν προστεθεί ένα σχόλιο.',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Επιπλέον ειδοποιήσεις καθυστερούμενου αιτήματος υποστήριξης',
'alert_ticket_overdue_email_help' => 'Διαχωρίστε με κόμμα τα emails για να σταλεί μια κρυφή κοινοποίηση όταν το αίτημα υποστήριξης τεθεί σε καθυστέρηση',
'alert_ticket_overdue_agent_id_help' => 'Η επιλογή ενός προτύπου θα στείλει μία ειδοποίηση (στον εκπρόσωπο) όταν ένα αίτημα υποστήριξης γίνει εκπρόθεσμο.',
- 'ticket_master' => 'Αρχηγός Αιτημάτων Βοήθειας',
- 'ticket_master_help' => 'Έχει τη δυνατότητα να αναθέτει και να μεταφέρει αιτήματα υποστήριξης. Ορίζεται ως προεπιλεγμένος εκπρόσωπος σε όλα τα αιτήματα υποστήριξης.',
'default_agent' => 'Προεπιλεγμένος Εκπρόσωπος',
'default_agent_help' => 'Εάν επιλεγεί θα του ανατεθούν όλα τα εισερχόμενα αιτήματα υποστήριξης',
'show_agent_details' => 'Εμφάνιση λεπτομερειών εκπροσώπου στις απαντήσεις',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'Διαγραφή avatar',
'ticket_not_found' => 'Δεν βρέθηκε το αίτημα υποστήριξης',
'add_template' => 'Προσθήκη Προτύπου',
- 'ticket_template' => 'Πρότυπο αιτήματος υποστήριξης',
- 'ticket_templates' => 'Πρότυπα αιτήματος υποστήριξης',
'updated_ticket_template' => 'Ενημερώθηκε το πρότυπο αιτήματος υποστήριξης',
'created_ticket_template' => 'Δημιουργήθηκε το πρότυπο αιτήματος υποστήριξης',
'archive_ticket_template' => 'Αρχειοθέτηση Προτύπου',
'restore_ticket_template' => 'Ανάκτηση Προτύπου',
'archived_ticket_template' => 'Επιτυχής αρχειοθέτηση προτύπου',
'restored_ticket_template' => 'Επιτυχής ανάκτηση προτύπου',
- 'close_reason' => 'Ενημερώστε μας γιατί κλείνετε αυτό το αίτημα υποστήριξης',
- 'reopen_reason' => 'Ενημερώστε μας γιατί ξανά ανοίγετε αυτό το αίτημα υποστήριξης',
'enter_ticket_message' => 'Παρακαλώ εισάγετε ένα μήνυμα για να ενημερώσετε το αίτημα υποστήριξης',
'show_hide_all' => 'Εμφάνιση / Απόκρυψη όλων',
'subject_required' => 'Απαιτείται Θέμα',
'mobile_refresh_warning' => 'Εάν χρησιμοποιείτε την εφαρμογή κινητού ίσως χρειαστεί να κάνετε μία πλήρη ανανέωση.',
- 'enable_proposals_for_background' => 'Για να ανεβάσετε μια εικόνα φόντου :link για να ενεργοποιήσετε τη λειτουργική μονάδα προτάσεων.',
- 'ticket_assignment' => 'Το αίτημα υποστήριξης :ticket_number έχει ανατεθεί στον :agent',
- 'ticket_contact_reply' => 'Το αίτημα υποστήριξης :ticket_number έχει ενημερωθεί από τον πελάτη :contact',
- 'ticket_new_template_subject' => 'Το αίτημα υποστήριξης :ticket_number έχει δημιουργηθεί.',
- 'ticket_updated_template_subject' => 'Το αίτημα υποστήριξης :ticket_number έχει ανανεωθεί.',
- 'ticket_closed_template_subject' => 'Το αίτημα υποστήριξης :ticket_number έχει κλείσει.',
- 'ticket_overdue_template_subject' => 'Το αίτημα υποστήριξης :ticket_number βρίσκεται πλέον σε καθυστέρηση',
'merge' => 'Συνένωση',
'merged' => 'Συνενώθηκε',
'agent' => 'Εκπρόσωπος',
- 'parent_ticket' => 'Πατρικό Αίτημα υποστήριξης',
- 'linked_tickets' => 'Συνδεδεμένα Αιτήματα υποστήριξης',
- 'merge_prompt' => 'Επιλέξτε αριθμό αιτήματος υποστήριξης στο οποίο να γίνει η συνένωση',
- 'merge_from_to' => 'Το αίτημα υποστήριξης #:old_ticket συνενώθηκε στο αίτημα υποστήριξης #:new_ticket',
- 'merge_closed_ticket_text' => 'Το αίτημα υποστήριξης #:old_ticket έκλεισε και συνενώθηκε στο αίτημα υποστήριξης #:new_ticket',
- 'merge_updated_ticket_text' => 'Το αίτημα υποστήριξης #:old_ticket έκλεισε και συνενώθηκε στο παρόν αίτημα υποστήριξης',
- 'merge_placeholder' => 'Συνενώστε το αίτημα υποστήριξης #:ticket στο ακόλουθο αίτημα υποστήριξης',
- 'select_ticket' => 'Επιλέξτε Αίτημα υποστήριξης',
- 'new_internal_ticket' => 'Νέο εσωτερικό αίτημα υποστήριξης',
- 'internal_ticket' => 'Εσωτερικό αίτημα υποστήριξης',
- 'create_ticket' => 'Δημιουργήστε αίτημα υποστήριξης',
- 'allow_inbound_email_tickets_external' => 'Νέα Αιτήματα υποστήριξης ανά email (Πελάτη)',
- 'allow_inbound_email_tickets_external_help' => 'Επιτρέψτε στους πελάτες να δημιουργούν αιτήματα υποστήριξης μέσω email',
'include_in_filter' => 'Συμπεριλάβετε στο φίλτρο',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4029,7 +3996,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4437,7 +4404,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5297,6 +5264,45 @@ $lang = array(
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/en/texts.php b/lang/en/texts.php
index 43674305c77a..7a44966e7df6 100644
--- a/lang/en/texts.php
+++ b/lang/en/texts.php
@@ -2364,7 +2364,7 @@ $lang = array(
'currency_gold_troy_ounce' => 'Gold Troy Ounce',
'currency_nicaraguan_córdoba' => 'Nicaraguan Córdoba',
'currency_malagasy_ariary' => 'Malagasy ariary',
- "currency_tongan_pa_anga" => "Tongan Pa'anga",
+ "currency_tongan_paanga" => "Tongan Pa'anga",
'review_app_help' => 'We hope you\'re enjoying using the app.
If you\'d consider :link we\'d greatly appreciate it!',
'writing_a_review' => 'writing a review',
@@ -2880,19 +2880,6 @@ $lang = array(
'refunded' => 'Refunded',
'marked_quote_as_sent' => 'Successfully marked quote as sent',
'custom_module_settings' => 'Custom Module Settings',
- 'ticket' => 'Ticket',
- 'tickets' => 'Tickets',
- 'ticket_number' => 'Ticket #',
- 'new_ticket' => 'New Ticket',
- 'edit_ticket' => 'Edit Ticket',
- 'view_ticket' => 'View Ticket',
- 'archive_ticket' => 'Archive Ticket',
- 'restore_ticket' => 'Restore Ticket',
- 'delete_ticket' => 'Delete Ticket',
- 'archived_ticket' => 'Successfully archived ticket',
- 'archived_tickets' => 'Successfully archived tickets',
- 'restored_ticket' => 'Successfully restored ticket',
- 'deleted_ticket' => 'Successfully deleted ticket',
'open' => 'Open',
'new' => 'New',
'closed' => 'Closed',
@@ -2909,14 +2896,6 @@ $lang = array(
'assigned_to' => 'Assigned to',
'reply' => 'Reply',
'awaiting_reply' => 'Awaiting reply',
- 'ticket_close' => 'Close Ticket',
- 'ticket_reopen' => 'Reopen Ticket',
- 'ticket_open' => 'Open Ticket',
- 'ticket_split' => 'Split Ticket',
- 'ticket_merge' => 'Merge Ticket',
- 'ticket_update' => 'Update Ticket',
- 'ticket_settings' => 'Ticket Settings',
- 'updated_ticket' => 'Ticket Updated',
'mark_spam' => 'Mark as Spam',
'local_part' => 'Local Part',
'local_part_unavailable' => 'Name taken',
@@ -2943,29 +2922,14 @@ $lang = array(
'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'New comment',
- 'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
- 'alert_comment_ticket_email_help' => 'Comma separated emails to bcc on new comment.',
- 'new_ticket_notification_list' => 'Additional new ticket notifications',
'update_ticket_notification_list' => 'Additional new comment notifications',
'comma_separated_values' => 'admin@example.com, supervisor@example.com',
- 'alert_ticket_assign_agent_id' => 'Ticket assignment',
- 'alert_ticket_assign_agent_id_hel' => 'Selecting a template will send a notification (to agent) when a ticket is assigned.',
- 'alert_ticket_assign_agent_id_notifications' => 'Additional ticket assigned notifications',
- 'alert_ticket_assign_agent_id_help' => 'Comma separated emails to bcc on ticket assignment.',
- 'alert_ticket_transfer_email_help' => 'Comma separated emails to bcc on ticket transfer.',
- 'alert_ticket_overdue_agent_id' => 'Ticket overdue',
- 'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
- 'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
- 'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
'avatar' => 'Avatar',
'remove_avatar' => 'Remove avatar',
- 'ticket_not_found' => 'Ticket not found',
'add_template' => 'Add Template',
- 'updated_ticket_template' => 'Updated Ticket Template',
- 'created_ticket_template' => 'Created Ticket Template',
'archive_ticket_template' => 'Archive Template',
'restore_ticket_template' => 'Restore Template',
'archived_ticket_template' => 'Successfully archived template',
@@ -5310,6 +5274,16 @@ $lang = array(
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
'end_of_month' => 'End Of Month',
'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
+ 'task_assigned_subject' => 'New task assignment [Task :task] [ :date ]',
+ 'task_assigned_body' => 'You have been assigned task :task
Description: :description
Client: :client',
+ 'activity_141' => 'User :user entered note: :notes',
+ 'quote_reminder_subject' => 'Reminder: Quote :quote from :company',
+ 'quote_reminder_message' => 'Reminder for quote :number for :amount',
+ 'quote_reminder1' => 'First Quote Reminder',
+ 'before_valid_until_date' => 'Before the valid until date',
+ 'after_valid_until_date' => 'After the valid until date',
+ 'after_quote_date' => 'After the quote date',
+ 'remind_quote' => 'Remind Quote',
'end_of_month' => 'End Of Month',
'tax_currency_mismatch' => 'Tax currency is different from invoice currency',
'edocument_import_already_exists' => '\nThe invoice has already been imported on :date'
diff --git a/lang/es/texts.php b/lang/es/texts.php
index 0cc1d8c1a34c..ad5fccf156b8 100644
--- a/lang/es/texts.php
+++ b/lang/es/texts.php
@@ -2933,13 +2933,6 @@ $lang = array(
'mime_types' => 'Tipos de mimo',
'mime_types_placeholder' => '.pdf, .docx, .jpg',
'mime_types_help' => 'Lista separada por comas de tipos MIME permitidos, déjela en blanco para todos',
- 'ticket_number_start_help' => 'El número de boleto debe ser mayor que el número de boleto actual',
- 'new_ticket_template_id' => 'Nuevo billete',
- 'new_ticket_autoresponder_help' => 'Al seleccionar una plantilla, se enviará una respuesta automática a un cliente/contacto cuando se cree un nuevo ticket.',
- 'update_ticket_template_id' => 'Boleto actualizado',
- 'update_ticket_autoresponder_help' => 'Al seleccionar una plantilla, se enviará una respuesta automática a un cliente/contacto cuando se actualice un ticket.',
- 'close_ticket_template_id' => 'Boleto cerrado',
- 'close_ticket_autoresponder_help' => 'Al seleccionar una plantilla, se enviará una respuesta automática a un cliente/contacto cuando se cierre un ticket.',
'default_priority' => 'Prioridad predeterminada',
'alert_new_comment_id' => 'Nuevo comentario',
'alert_comment_ticket_help' => 'Al seleccionar una plantilla, se enviará una notificación (al agente) cuando se realice un comentario.',
@@ -2956,8 +2949,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Notificaciones adicionales de boletos vencidos',
'alert_ticket_overdue_email_help' => 'Correos electrónicos separados por comas a BCC en ticket vencido.',
'alert_ticket_overdue_agent_id_help' => 'Al seleccionar una plantilla, se enviará una notificación (al agente) cuando venza un ticket.',
- 'ticket_master' => 'Maestro de boletos',
- 'ticket_master_help' => 'Tiene la capacidad de asignar y transferir boletos. Asignado como agente predeterminado para todos los tickets.',
'default_agent' => 'Agente predeterminado',
'default_agent_help' => 'Si se selecciona, se asignará automáticamente a todos los boletos entrantes',
'show_agent_details' => 'Mostrar detalles del agente en las respuestas',
@@ -2965,43 +2956,19 @@ $lang = array(
'remove_avatar' => 'Quitar avatar',
'ticket_not_found' => 'Boleto no encontrado',
'add_template' => 'Agregar plantilla',
- 'ticket_template' => 'Plantilla de boleto',
- 'ticket_templates' => 'Plantillas de entradas',
'updated_ticket_template' => 'Plantilla de ticket actualizada',
'created_ticket_template' => 'Plantilla de ticket creada',
'archive_ticket_template' => 'Plantilla de archivo',
'restore_ticket_template' => 'Plantilla de restauración',
'archived_ticket_template' => 'Plantilla archivada correctamente',
'restored_ticket_template' => 'Plantilla restaurada con éxito',
- 'close_reason' => 'Háganos saber por qué está cerrando este ticket',
- 'reopen_reason' => 'Háganos saber por qué está reabriendo este ticket',
'enter_ticket_message' => 'Por favor ingrese un mensaje para actualizar el boleto',
'show_hide_all' => 'Mostrar / Ocultar todo',
'subject_required' => 'Sujeto (requerido',
'mobile_refresh_warning' => 'Si está utilizando la aplicación móvil, es posible que deba realizar una actualización completa.',
- 'enable_proposals_for_background' => 'Para subir una imagen de fondo :link para habilitar el módulo de propuestas.',
- 'ticket_assignment' => 'El ticket :ticket_number ha sido asignado a :agent',
- 'ticket_contact_reply' => 'El ticket :ticket_number ha sido actualizado por el cliente :contact',
- 'ticket_new_template_subject' => 'Se ha creado el ticket :ticket_number.',
- 'ticket_updated_template_subject' => 'El ticket :ticket_number ha sido actualizado.',
- 'ticket_closed_template_subject' => 'El ticket :ticket_number se ha cerrado.',
- 'ticket_overdue_template_subject' => 'El ticket :ticket_number ya venció',
'merge' => 'Unir',
'merged' => 'fusionado',
'agent' => 'Agente',
- 'parent_ticket' => 'Boleto para padres',
- 'linked_tickets' => 'Entradas vinculadas',
- 'merge_prompt' => 'Ingrese el número de boleto para fusionarse',
- 'merge_from_to' => 'Ticket #:old_ticket combinado con Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket se cerró y se fusionó con Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'El ticket #:old_ticket se cerró y se fusionó con este ticket',
- 'merge_placeholder' => 'Fusionar ticket #:ticket en el siguiente ticket',
- 'select_ticket' => 'Seleccionar billete',
- 'new_internal_ticket' => 'Nuevo ticket interno',
- 'internal_ticket' => 'Boleto interno',
- 'create_ticket' => 'Crear Ticket',
- 'allow_inbound_email_tickets_external' => 'Nuevos Tickets por email (Cliente)',
- 'allow_inbound_email_tickets_external_help' => 'Permitir a los clientes crear nuevos tickets por correo electrónico',
'include_in_filter' => 'Incluir en el filtro',
'custom_client1' => ':VALOR',
'custom_client2' => ':VALOR',
@@ -5333,7 +5300,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/es_ES/texts.php b/lang/es_ES/texts.php
index c8a26a3abe21..ea9cba5585dd 100644
--- a/lang/es_ES/texts.php
+++ b/lang/es_ES/texts.php
@@ -2930,13 +2930,6 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'mime_types' => 'Tipos de ficheros',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Lista separada por comas de los tipos mime de fichero aceptados, déjalo en blanco para todos',
- 'ticket_number_start_help' => 'El número de ticket debe ser mayor que el número de ticket actual',
- 'new_ticket_template_id' => 'Nuevo ticket',
- 'new_ticket_autoresponder_help' => 'Seleccionando una plantilla enviará una auto respuesta a un cliente/contacto cuando cree un nuevo ticket',
- 'update_ticket_template_id' => 'Ticket actualizado',
- 'update_ticket_autoresponder_help' => 'Seleccionando una plantilla enviará una auto respuesta a un cliente/contacto cuando actualice un ticket',
- 'close_ticket_template_id' => 'Ticket cerrado',
- 'close_ticket_autoresponder_help' => 'Seleccionando una plantilla enviará una auto respuesta a un cliente/contacto cuando cierre un ticket',
'default_priority' => 'Prioridad por defecto',
'alert_new_comment_id' => 'Nuevo comentario',
'alert_comment_ticket_help' => 'Seleccionando una plantilla enviará una notificación (a un agente) cuando se haga un comentario.',
@@ -2953,8 +2946,6 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'alert_ticket_overdue_email' => 'Notificaciones de ticket vencido adicionales',
'alert_ticket_overdue_email_help' => 'Lista de emails separados por coma en el campo BCC en el vencimiento de ticket.',
'alert_ticket_overdue_agent_id_help' => 'Seleccionando una plantilla enviará una notificación (a un agente) cuando un ticket llegue a la fecha de vencimiento.',
- 'ticket_master' => 'Jefe de Tickets',
- 'ticket_master_help' => 'Tiene la facultad de asignar y transferir tickets. Asignado como agente por defecto para todos los tickets.',
'default_agent' => 'Agente por Defecto',
'default_agent_help' => 'Si se selecciona, será asignado automáticamente en todos los tickets de entrada',
'show_agent_details' => 'Mostrar los detalles del agente en las respuestas',
@@ -2962,43 +2953,19 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'remove_avatar' => 'Eliminar avatar',
'ticket_not_found' => 'Ticket no encontrado',
'add_template' => 'Añadir Plantila',
- 'ticket_template' => 'Plantilla de Ticket',
- 'ticket_templates' => 'Plantillas de Ticket',
'updated_ticket_template' => 'Plantilla de Ticket Actualizada',
'created_ticket_template' => 'Plantilla de Ticket Creada',
'archive_ticket_template' => 'Archivar Plantilla',
'restore_ticket_template' => 'Restaurar Plantilla',
'archived_ticket_template' => 'Plantilla archivada correctamente',
'restored_ticket_template' => 'Plantilla restaurada correctamente',
- 'close_reason' => 'Háznos saber por qué estás cerrando este ticket',
- 'reopen_reason' => 'Indícanos por qué estás reabriendo este ticket',
'enter_ticket_message' => 'Por favor, introduce un mensaje para actualizar el ticket',
'show_hide_all' => 'Mostrar / Ocultar todo',
'subject_required' => 'Asunto requerido',
'mobile_refresh_warning' => 'Si estás usando la app móvil necesitarás hacer un refresco completo.',
- 'enable_proposals_for_background' => 'Para subir una imagen de fondo :link para activar el módulo de propuestas.',
- 'ticket_assignment' => 'El ticket :ticket_number ha sido asignado a :agent',
- 'ticket_contact_reply' => 'El ticket :ticket_number ha sido actualizado por el cliente :contact',
- 'ticket_new_template_subject' => 'El ticket :ticket_number ha sido creado.',
- 'ticket_updated_template_subject' => 'El ticket :ticket_number ha sido actualizado.',
- 'ticket_closed_template_subject' => 'El ticket :ticket_number ha sido cerrado.',
- 'ticket_overdue_template_subject' => 'El ticket :ticket_number ha vencido.',
'merge' => 'Unir',
'merged' => 'Unidos',
'agent' => 'Agente',
- 'parent_ticket' => 'Ticket Padre',
- 'linked_tickets' => 'Tickets Enlazados',
- 'merge_prompt' => 'Introduce número de ticket con el que unir',
- 'merge_from_to' => 'Ticket #:old_ticket se ha unido con el ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket se ha cerrado y unido con el Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket se ha cerrado y unido con este ticket',
- 'merge_placeholder' => 'Unir ticket #:ticket con el siguiente ticket',
- 'select_ticket' => 'Seleccionar Ticket',
- 'new_internal_ticket' => 'Nuevo ticket interno',
- 'internal_ticket' => 'Ticket Interno',
- 'create_ticket' => 'Crear ticket',
- 'allow_inbound_email_tickets_external' => 'Nuevos Tickets por email (Cliente)',
- 'allow_inbound_email_tickets_external_help' => 'Permitir a los clientes crear nuevos tickets por email',
'include_in_filter' => 'Incluir en el filtro',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5331,7 +5298,8 @@ De lo contrario, este campo deberá dejarse en blanco.',
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/et/texts.php b/lang/et/texts.php
index 0db32759e38f..49c6a1a51309 100644
--- a/lang/et/texts.php
+++ b/lang/et/texts.php
@@ -200,7 +200,7 @@ $lang = array(
'removed_logo' => 'Logo edukalt eemaldatud',
'sent_message' => 'Sõnum edukalt saadetud',
'invoice_error' => 'Valige kindlasti klient ja parandage kõik vead',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Teie makse töötlemisel ilmnes viga. Palun proovi hiljem uuesti.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Palun kinnitage oma meiliaadress, :link kinnitusmeili uuesti saatmiseks.',
@@ -2695,7 +2695,7 @@ $lang = array(
'no_assets' => 'Pilte pole, lohistage üleslaadimiseks ',
'add_image' => 'Lisa Pilt',
'select_image' => 'Valige Pilt',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Kustuta pilt',
'delete_image_help' => 'Warning: deleting the image will remove it from all proposals.',
'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Pileti number peab olema suurem kui praegune pileti number',
- 'new_ticket_template_id' => 'Uus pilet',
- 'new_ticket_autoresponder_help' => 'Malli valimine saadab uue pileti loomisel kliendile/kontaktile automaatse vastuse',
- 'update_ticket_template_id' => 'Uuendatud pilet',
- 'update_ticket_autoresponder_help' => 'Malli valimine saadab pileti värskendamisel kliendile/kontaktile automaatse vastuse',
- 'close_ticket_template_id' => 'Suletud pilet',
- 'close_ticket_autoresponder_help' => 'Malli valimine saadab pileti sulgemisel kliendile/kontaktile automaatse vastuse',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'Uus kommentaar',
'alert_comment_ticket_help' => 'Malli valimine saadab kommentaari tegemisel teate (agendile).',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Malli valimine saadab (agendile) teate, kui pilet on üle tähtaja.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Vaikimisi agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Näidake vastuste kohta agendi üksikasju',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'Eemalda avatar',
'ticket_not_found' => 'Piletit ei leitud',
'add_template' => 'Lisa mall',
- 'ticket_template' => 'Pileti mall',
- 'ticket_templates' => 'Pileti mallid',
'updated_ticket_template' => 'Uuendatud pileti mall',
'created_ticket_template' => 'Loodud pileti mall',
'archive_ticket_template' => 'Arhiveeri mall',
'restore_ticket_template' => 'Taasta mall',
'archived_ticket_template' => 'Mall edukalt arhiveeritud',
'restored_ticket_template' => 'Mall edukalt taastatud',
- 'close_reason' => 'Andke meile teada, miks te selle pileti sulgete',
- 'reopen_reason' => 'Andke meile teada, miks te selle pileti uuesti avate',
'enter_ticket_message' => 'Pileti uuendamiseks sisestage teade',
'show_hide_all' => 'Näita/peida kõik',
'subject_required' => 'Teema nõutav',
'mobile_refresh_warning' => 'Kui kasutate mobiilirakendust, peate võib-olla tegema täieliku värskenduse.',
- 'enable_proposals_for_background' => 'Taustapildi üleslaadimiseks :link ettepanekute mooduli lubamiseks.',
- 'ticket_assignment' => 'Pilet :ticket_number on määratud :agent',
- 'ticket_contact_reply' => 'Piletit :ticket_number on uuendanud kliendi :contact poolt',
- 'ticket_new_template_subject' => 'Pilet :ticket_number on loodud.',
- 'ticket_updated_template_subject' => 'Pilet :ticket_number on uuendatud.',
- 'ticket_closed_template_subject' => 'Pilet :ticket_number on suletud.',
- 'ticket_overdue_template_subject' => 'Pilet :ticket_number on nüüd üle tähtaja',
'merge' => 'Ühendage',
'merged' => 'Ühendatud',
'agent' => 'Agent',
- 'parent_ticket' => 'Vanem pilet',
- 'linked_tickets' => 'Lingitud piletid',
- 'merge_prompt' => 'Sisestage ühendamiseks pileti number',
- 'merge_from_to' => 'Pilet #:old_ticket liideti piletiga #:new_ticket',
- 'merge_closed_ticket_text' => 'Pilet #:old_ticket suleti ja liideti piletiga #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Pilet #:old_ticket suleti ja liideti sellesse piletisse',
- 'merge_placeholder' => 'Ühendage pilet #:ticket järgmiseks piletiks',
- 'select_ticket' => 'Valige Pilet',
- 'new_internal_ticket' => 'New internal ticket',
- 'internal_ticket' => 'Internal ticket',
- 'create_ticket' => 'Loo pilet',
- 'allow_inbound_email_tickets_external' => 'Uued piletid meili teel (klient)',
- 'allow_inbound_email_tickets_external_help' => 'Lubage klientidel e-posti teel uusi pileteid luua',
'include_in_filter' => 'Kaasake filtrisse',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4029,7 +3996,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4437,7 +4404,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5297,6 +5264,45 @@ $lang = array(
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/fa/texts.php b/lang/fa/texts.php
index c07313ce65e4..6e8601a35128 100644
--- a/lang/fa/texts.php
+++ b/lang/fa/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Successfully removed logo',
'sent_message' => 'Successfully sent message',
'invoice_error' => 'Please make sure to select a client and correct any errors',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'There was an error processing your payment. Please try again later.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
@@ -2695,7 +2695,7 @@ $lang = array(
'no_assets' => 'No images, drag to upload',
'add_image' => 'Add Image',
'select_image' => 'Select Image',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Delete Image',
'delete_image_help' => 'Warning: deleting the image will remove it from all proposals.',
'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number',
- 'new_ticket_template_id' => 'New ticket',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Updated ticket',
- 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated',
- 'close_ticket_template_id' => 'Closed ticket',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'New comment',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'Ticket not found',
'add_template' => 'Add Template',
- 'ticket_template' => 'Ticket Template',
- 'ticket_templates' => 'Ticket Templates',
'updated_ticket_template' => 'Updated Ticket Template',
'created_ticket_template' => 'Created Ticket Template',
'archive_ticket_template' => 'Archive Template',
'restore_ticket_template' => 'Restore Template',
'archived_ticket_template' => 'Successfully archived template',
'restored_ticket_template' => 'Successfully restored template',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Please enter a message to update the ticket',
'show_hide_all' => 'Show / Hide all',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
- 'enable_proposals_for_background' => 'To upload a background image :link to enable the proposals module.',
- 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number has been updated by client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number has been created.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue',
'merge' => 'Merge',
'merged' => 'Merged',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket',
- 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket',
- 'select_ticket' => 'Select Ticket',
- 'new_internal_ticket' => 'New internal ticket',
- 'internal_ticket' => 'Internal ticket',
- 'create_ticket' => 'Create ticket',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4029,7 +3996,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4437,7 +4404,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5297,6 +5264,45 @@ $lang = array(
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/fi/texts.php b/lang/fi/texts.php
index 6c1c6174df43..d23e9dc3672c 100644
--- a/lang/fi/texts.php
+++ b/lang/fi/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Logo on poistettu onnistuneesti ',
'sent_message' => 'Viesti on onnistuneesti lähetetty',
'invoice_error' => 'Ystävällisesti varmistakaa että asiakasta on valittu ja korjaatkaa kaikki virheet',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Maksukäsittelyssä ilmeni ongelma. Yrittäkää myöhemmin uudelleen.',
'registration_required' => 'Rekisteröinti vaaditaan',
'confirmation_required' => 'Ole hyvä ja vahvista sähköpostiosoitteesi, :link paina tästä uudelleenlähettääksesi vahvistussähköpostin. ',
@@ -2200,7 +2200,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'send_test_email' => 'Send Test Email',
'select_label' => 'Valitse kenttä',
'label' => 'Label',
- 'service' => 'Service',
+ 'service' => 'Palvelu',
'update_payment_details' => 'Päivitä maksu tiedot',
'updated_payment_details' => 'Onnistuneesti päivitetty maksun tiedot',
'update_credit_card' => 'päivitä luotto kortti',
@@ -2453,7 +2453,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'time_hrs' => 'hrs',
'clear' => 'Clear',
'warn_payment_gateway' => 'Huom: Online-maksujen vastaanottaminen vaatii maksujen käsittelyjärjestelmän (maksutavan), :link lisätäksesi sellaisen.',
- 'task_rate' => 'Tehtävän luokitus',
+ 'task_rate' => 'Tehtävän hinta',
'task_rate_help' => 'Aseta oletus luokitus laskutetuille tehtäville.',
'past_due' => 'Past Due',
'document' => 'Document',
@@ -2695,7 +2695,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'no_assets' => 'ei images, drag upload',
'add_image' => 'Lisää kuva',
'select_image' => 'Select Image',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Poista Image',
'delete_image_help' => 'Warning: deleting kuva will remove it from kaikki proposals.',
'amount_variable_help' => 'Huom: lasku $amount kenttä will use partial/deposit kenttä jos set otherwise it will use lasku balance.',
@@ -2934,13 +2934,6 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Pilkulla erotettu lista allowed mime types, jätä tyhjäksi kaikki',
- 'ticket_number_start_help' => 'tiketti numero must be greater than current tiketti numero',
- 'new_ticket_template_id' => 'uusi tiketti',
- 'new_ticket_autoresponder_help' => 'Selecting template will send auto response asiakas/kontakti when uusi tiketti is luotu',
- 'update_ticket_template_id' => 'päivitetty tiketti',
- 'update_ticket_autoresponder_help' => 'Selecting template will send auto response asiakas/kontakti when tiketti is päivitetty',
- 'close_ticket_template_id' => 'suljettu tiketti',
- 'close_ticket_autoresponder_help' => 'Selecting template will send auto response asiakas/kontakti when tiketti is closed',
'default_priority' => 'oletus priority',
'alert_new_comment_id' => 'uusi comment',
'alert_comment_ticket_help' => 'Selecting template will send notification ( agent) when comment is made.',
@@ -2957,8 +2950,6 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'alert_ticket_overdue_email' => 'Täydentävät Uusi tiketti yliajalla -ilmoitukset',
'alert_ticket_overdue_email_help' => 'pilkulla erotetut sähköpostit bcc on tiketti overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting template will send notification ( agent) when tiketti becomes overdue.',
- 'ticket_master' => 'tiketti Master',
- 'ticket_master_help' => 'Has ability assign ja transfer tiketit. Assigned as oletus agent kaikki tiketit.',
'default_agent' => 'oletus Agent',
'default_agent_help' => 'If selected will automatically be assigned kaikki inbound tiketit',
'show_agent_details' => 'Näytä agentin tiedot vastauksissa',
@@ -2966,43 +2957,19 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'tiketti ei löydy',
'add_template' => 'Lisää mallipohja',
- 'ticket_template' => 'tiketti pohja',
- 'ticket_templates' => 'tiketti pohjat',
'updated_ticket_template' => 'päivitetty tiketti pohja',
'created_ticket_template' => 'luotu tiketti pohja',
'archive_ticket_template' => 'Arkistoi pohja',
'restore_ticket_template' => 'palauta pohja',
'archived_ticket_template' => 'onnistuneesti arkistoitu template',
'restored_ticket_template' => 'onnistuneesti palautettu template',
- 'close_reason' => 'Let us know why you on closing this tiketti',
- 'reopen_reason' => 'Let us know why you on reopening this tiketti',
'enter_ticket_message' => ' Kirjoita viesti päivittääksesi tiketin',
'show_hide_all' => 'Näytä / Piilota kaikki',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'If you\'re using mobile app you may need do full refresh.',
- 'enable_proposals_for_background' => 'To upload background kuva :link enable proposals module.',
- 'ticket_assignment' => 'tiketti :ticket_number on assigned :agent',
- 'ticket_contact_reply' => 'tiketti :ticket_number on päivitetty by asiakas :kontakti',
- 'ticket_new_template_subject' => 'tiketti :ticket_number on luotu.',
- 'ticket_updated_template_subject' => 'tiketti :ticket_number on päivitetty.',
- 'ticket_closed_template_subject' => 'tiketti :ticket_number on closed.',
- 'ticket_overdue_template_subject' => 'tiketti :ticket_number is nyt overdue',
'merge' => 'Merge',
'merged' => 'Merged',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent tiketti',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter tiketti numero merge into',
- 'merge_from_to' => 'tiketti #:old_ticket merged into tiketti #:new_ticket',
- 'merge_closed_ticket_text' => 'tiketti #:old_ticket was closed ja merged into tiketti#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'tiketti #:old_ticket was closed ja merged into this tiketti',
- 'merge_placeholder' => 'Merge tiketti #:tiketti into following tiketti',
- 'select_ticket' => 'Select tiketti',
- 'new_internal_ticket' => 'uusi internal tiketti',
- 'internal_ticket' => 'Internal tiketti',
- 'create_ticket' => 'luo tiketti',
- 'allow_inbound_email_tickets_external' => 'uusi Tickets by sähköposti (asiakas)',
- 'allow_inbound_email_tickets_external_help' => 'Allow asiakkaat create uusi tiketit by sähköposti',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4029,7 +3996,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Toimittajan katuosoite',
'vendor_address2' => 'Toimittajan huoneisto-osoite',
@@ -4437,7 +4404,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5297,6 +5264,45 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/fr/texts.php b/lang/fr/texts.php
index 46957138dc48..864588991af3 100644
--- a/lang/fr/texts.php
+++ b/lang/fr/texts.php
@@ -2934,13 +2934,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'mime_types' => 'Type MIME',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Liste séparée par une virgule pour les types MIME autorisés. Laisser vide pour tout autoriser',
- 'ticket_number_start_help' => 'Le numéro du billet doit être plus grand que le billet en cours',
- 'new_ticket_template_id' => 'Nouveau ticket',
- 'new_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un nouveau ticket est créé',
- 'update_ticket_template_id' => 'Ticket mis à jour',
- 'update_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un ticket est mis à jour',
- 'close_ticket_template_id' => 'Fermer le ticket',
- 'close_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un ticket est fermé',
'default_priority' => 'Priorité par défaut',
'alert_new_comment_id' => 'Nouveau commentaire',
'alert_comment_ticket_help' => 'En sélectionnant un modèle, une notification (à l\'agent) sera envoyée lorsqu\'un commentaire est posté',
@@ -2957,8 +2950,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'alert_ticket_overdue_email' => 'Notifications de billets en retard additionnels',
'alert_ticket_overdue_email_help' => 'E-mails séparés par une virgule pour CCI lors d\'un ticket en retard.',
'alert_ticket_overdue_agent_id_help' => 'En sélectionnant un modèle, une notification (à l\'agent) sera envoyée lorsqu\'un ticket est en retard.',
- 'ticket_master' => 'Ticket maitre',
- 'ticket_master_help' => 'Peut assigner et transférer les tickets. Assigné par défaut pour tous les tickets.',
'default_agent' => 'Agent par défaut',
'default_agent_help' => 'Cette sélection va automatiquement être assignée à tous les courriels entrants',
'show_agent_details' => 'Afficher les informations de l\'agent dans les réponses',
@@ -2966,43 +2957,19 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'remove_avatar' => 'Enlever l\'avatar',
'ticket_not_found' => 'Ticket non trouvé',
'add_template' => 'Ajouter un modèle',
- 'ticket_template' => 'Modèle de ticket',
- 'ticket_templates' => 'Modèles de ticket',
'updated_ticket_template' => 'Modèle de ticket mis à jour',
'created_ticket_template' => 'Modèle de ticket crée',
'archive_ticket_template' => 'Archiver modèle',
'restore_ticket_template' => 'Restaurer modèle',
'archived_ticket_template' => 'Modèle archivé avec succès',
'restored_ticket_template' => 'Modèle restaurer avec succès',
- 'close_reason' => 'Faites nous savoir pourquoi vous fermez ce ticket',
- 'reopen_reason' => 'Faites nous savoir pourquoi vous ré-ouvrez ce ticket',
'enter_ticket_message' => 'Entrez un message pour mettre à jour le ticket',
'show_hide_all' => 'Afficher / Masquer tout',
'subject_required' => 'Sujet requis',
'mobile_refresh_warning' => 'Si vous utilisez l\'app mobile, vous devez faire une actualisation complète.',
- 'enable_proposals_for_background' => 'Pour envoyer une image de fond :link pour activer le module de propositions.',
- 'ticket_assignment' => 'Le ticket :ticket_number a été assigné à :agent',
- 'ticket_contact_reply' => 'Le ticket :ticket_number a été mis à jour par le client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number a été crée.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number a été mis à jour.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number a été fermé.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number est maintenant arriéré.',
'merge' => 'Fusionner',
'merged' => 'Fusionné',
'agent' => 'Agent',
- 'parent_ticket' => 'Ticket parent',
- 'linked_tickets' => 'Ticket lié',
- 'merge_prompt' => 'Entrez un numéro de ticket pour fusionner avec',
- 'merge_from_to' => 'Le ticket #:old_ticket a été fusionné avec le ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Le ticket #:old_ticket a été fermé et fusionner dans le ticket #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Le ticket #:old_ticket a été fermé et fusionner dans ce ticket',
- 'merge_placeholder' => 'Fusionner le ticket #:ticket dans le ticket suivant',
- 'select_ticket' => 'Sélectionner un ticket',
- 'new_internal_ticket' => 'Nouveau ticket interne',
- 'internal_ticket' => 'Ticket interne',
- 'create_ticket' => 'Créer un ticket',
- 'allow_inbound_email_tickets_external' => 'Nouveaux tickets par courriel (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Permettre aux clients de créer des nouveaux tickets par courriel',
'include_in_filter' => 'Inclure dans le filtre',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5334,7 +5301,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php
index 4f89ea736773..fff46aa33247 100644
--- a/lang/fr_CA/texts.php
+++ b/lang/fr_CA/texts.php
@@ -2931,13 +2931,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'mime_types' => 'Type MIME',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Liste séparée par une virgule pour les types MIME autorisés. Laissant vide pour tout autoriser',
- 'ticket_number_start_help' => 'Le numéro du billet doit être plus grand que le billet en cours',
- 'new_ticket_template_id' => 'Nouveau billet',
- 'new_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un nouveau billet est créé',
- 'update_ticket_template_id' => 'Billet mis à jour',
- 'update_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un billet est mis à jour',
- 'close_ticket_template_id' => 'Billet fermé',
- 'close_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un billet est fermé',
'default_priority' => 'Priorité par défaut',
'alert_new_comment_id' => 'Nouveau commentaire',
'alert_comment_ticket_help' => 'En sélectionnant un modèle, une notification (à l\'agent) sera envoyée lorsqu\'un commentaire est fait',
@@ -2954,8 +2947,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'alert_ticket_overdue_email' => 'Notifications de billets en retard additionnels',
'alert_ticket_overdue_email_help' => 'Courriels séparés par une virgule pour Cci sur un billet en retard.',
'alert_ticket_overdue_agent_id_help' => 'En sélectionnant un modèle, une notification (à l\'agent) sera envoyée lorsqu\'un billet est en retard.',
- 'ticket_master' => 'Gestionnaire de billet',
- 'ticket_master_help' => 'Peut assigner et transférer les billets. Assigné par défaut pour tous les billets.',
'default_agent' => 'Agent par défaut',
'default_agent_help' => 'Cette sélection va automatiquement être assignée à tous les courriels entrants',
'show_agent_details' => 'Afficher les informations de l\'agent dans les réponses',
@@ -2963,43 +2954,19 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'remove_avatar' => 'Retirer l\'avatar',
'ticket_not_found' => 'Billet introuvable',
'add_template' => 'Ajouter un modèle',
- 'ticket_template' => 'Modèle de billet',
- 'ticket_templates' => 'Modèles de billets',
'updated_ticket_template' => 'Modèle de billets mise à jour',
'created_ticket_template' => 'Modèle de billet créés',
'archive_ticket_template' => 'Archiver le modèle',
'restore_ticket_template' => 'Restaurer le modèle',
'archived_ticket_template' => 'Le modèle a été archivé',
'restored_ticket_template' => 'Le modèle a été restauré',
- 'close_reason' => 'Faites-nous savoir pourquoi vous fermez ce billet',
- 'reopen_reason' => 'Faites-nous savoir pourquoi vous souhaitez réouvrir ce billet',
'enter_ticket_message' => 'Veuillez saisir un message pour mettre à jour ce billet',
'show_hide_all' => 'Afficher / masquer tout',
'subject_required' => 'Objet requis',
'mobile_refresh_warning' => 'Si vous utilisez l\'app mobile, vous devez faire une actualisation complète.',
- 'enable_proposals_for_background' => 'Pour téléverser une image de fond :link pour activer le module de propositions.',
- 'ticket_assignment' => 'Le billet :ticket_number a été assigné à :agent',
- 'ticket_contact_reply' => 'Le billet :ticket_number a été mis à jour par le client :contact',
- 'ticket_new_template_subject' => 'Le billet :ticket_number a été créé.',
- 'ticket_updated_template_subject' => 'Le billet :ticket_number a été mis à jour.',
- 'ticket_closed_template_subject' => 'Le billet :ticket_number a été fermé.',
- 'ticket_overdue_template_subject' => 'Le biller :ticket_number est en retard',
'merge' => 'Fusionner',
'merged' => 'Fusionné',
'agent' => 'Agent',
- 'parent_ticket' => 'Billet parent',
- 'linked_tickets' => 'Billets liés',
- 'merge_prompt' => 'Veuillez saisir un numéro de billet pour fusionner',
- 'merge_from_to' => 'Le billet #:old_ticket a été fusionné avec le billet #:new_ticket',
- 'merge_closed_ticket_text' => 'Le billet #:old_ticket a été fermé et fusionner avec le billet #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Le billet #:old_ticket a été fermé et fusionné avec ce billet',
- 'merge_placeholder' => 'Fusionner le billet #:ticket avec le billet suivant',
- 'select_ticket' => 'Sélectionner le billet',
- 'new_internal_ticket' => 'Nouveau billet interne',
- 'internal_ticket' => 'Billet interne',
- 'create_ticket' => 'Créer un billet',
- 'allow_inbound_email_tickets_external' => 'Nouveaux billets par courriel (client)',
- 'allow_inbound_email_tickets_external_help' => 'Autoriser les clients à créer de nouveaux billets par courriel',
'include_in_filter' => 'Inclure dans le filtre',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5331,7 +5298,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'btcpay_refund_body' => 'Un remboursement qui vous est destiné a été émis. Pour le réclamer via BTCPay, veuillez cliquer sur ce lien :',
'currency_mauritanian_ouguiya' => 'Ouguiya mauritanien',
'currency_bhutan_ngultrum' => 'Ngultrum Bhoutan',
- 'end_of_month' => 'Fin de mois'
+ 'end_of_month' => 'Fin de mois',
+ 'merge_e_invoice_to_pdf' => 'Fusionner E-Facture et PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/fr_CH/texts.php b/lang/fr_CH/texts.php
index c0c848899595..18e98ff527fc 100644
--- a/lang/fr_CH/texts.php
+++ b/lang/fr_CH/texts.php
@@ -2931,13 +2931,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'mime_types' => 'Type MIME',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Liste séparée par une virgule pour les types MIME autorisés. Laissant vide pour tout autoriser',
- 'ticket_number_start_help' => 'Le numéro du billet doit être plus grand que le billet en cours',
- 'new_ticket_template_id' => 'Nouveau billet',
- 'new_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un nouveau billet est créé',
- 'update_ticket_template_id' => 'Billet mis à jour',
- 'update_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un billet est mis à jour',
- 'close_ticket_template_id' => 'Billet fermé',
- 'close_ticket_autoresponder_help' => 'En sélectionnant un modèle, une réponse automatique sera envoyée à un client/contact lorsqu\'un billet est fermé',
'default_priority' => 'Priorité par défaut',
'alert_new_comment_id' => 'Nouveau commentaire',
'alert_comment_ticket_help' => 'En sélectionnant un modèle, une notification (à l\'agent) sera envoyée lorsqu\'un commentaire est fait',
@@ -2954,8 +2947,6 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'alert_ticket_overdue_email' => 'Notifications de billets en retard additionnels',
'alert_ticket_overdue_email_help' => 'Courriels séparés par une virgule pour CCI sur un billet en retard.',
'alert_ticket_overdue_agent_id_help' => 'En sélectionnant un modèle, une notification (à l\'agent) sera envoyée lorsqu\'un billet est en retard.',
- 'ticket_master' => 'Gestionnaire de billet',
- 'ticket_master_help' => 'Peut assigner et transférer les billets. Assigné par défaut pour tous les billets.',
'default_agent' => 'Agent par défaut',
'default_agent_help' => 'Cette sélection va automatiquement être assignée à tous les courriels entrants',
'show_agent_details' => 'Afficher les informations de l\'agent dans les réponses',
@@ -2963,43 +2954,19 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'remove_avatar' => 'Retirer l\'avatar',
'ticket_not_found' => 'Billet introuvable',
'add_template' => 'Ajouter un modèle',
- 'ticket_template' => 'Modèle de billet',
- 'ticket_templates' => 'Modèles de billets',
'updated_ticket_template' => 'Modèle de billets mise à jour',
'created_ticket_template' => 'Modèle de billet créés',
'archive_ticket_template' => 'Archiver le modèle',
'restore_ticket_template' => 'Restaurer le modèle',
'archived_ticket_template' => 'Le modèle a été archivé avec succès',
'restored_ticket_template' => 'Le modèle a été restauré avec succès',
- 'close_reason' => 'Faites-nous savoir pourquoi vous fermez ce billet',
- 'reopen_reason' => 'Faites-nous savoir pourquoi vous souhaitez réouvrir ce billet',
'enter_ticket_message' => 'Veuillez entrer un message pour mettre à jour ce billet',
'show_hide_all' => 'Afficher / masquer tout',
'subject_required' => 'Objet requis',
'mobile_refresh_warning' => 'Si vous utilisez l\'app mobile, vous devez faire une actualisation complète.',
- 'enable_proposals_for_background' => 'Pour téléverser une image de fond :link pour activer le module de propositions.',
- 'ticket_assignment' => 'Le billet :ticket_number a été assigné à :agent',
- 'ticket_contact_reply' => 'Le billet :ticket_number a été mis à jour par le client :contact',
- 'ticket_new_template_subject' => 'Le billet :ticket_number a été créé.',
- 'ticket_updated_template_subject' => 'Le billet :ticket_number a été mis à jour.',
- 'ticket_closed_template_subject' => 'Le billet :ticket_number a été fermé.',
- 'ticket_overdue_template_subject' => 'Le biller :ticket_number est en retard',
'merge' => 'Fusionner',
'merged' => 'Fusionné',
'agent' => 'Agent',
- 'parent_ticket' => 'Billet parent',
- 'linked_tickets' => 'Billets liés',
- 'merge_prompt' => 'Veuillez saisir un numéro de billet pour fusionner',
- 'merge_from_to' => 'Le billet #:old_ticket a été fusionné avec le billet #:new_ticket',
- 'merge_closed_ticket_text' => 'Le billet #:old_ticket a été fermé et fusionner avec le billet #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Le billet #:old_ticket a été fermé et fusionné avec ce billet',
- 'merge_placeholder' => 'Fusionner le billet #:ticket avec le billet suivant',
- 'select_ticket' => 'Sélectionner le billet',
- 'new_internal_ticket' => 'Nouveau billet interne',
- 'internal_ticket' => 'Billet interne',
- 'create_ticket' => 'Créer un billet',
- 'allow_inbound_email_tickets_external' => 'Nouveaux billets par courriel (client)',
- 'allow_inbound_email_tickets_external_help' => 'Autoriser les clients à créer de nouveaux billets par courriel',
'include_in_filter' => 'Inclure dans le filtre',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5331,7 +5298,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/he/texts.php b/lang/he/texts.php
index 85ea250aca9b..e76823443c71 100644
--- a/lang/he/texts.php
+++ b/lang/he/texts.php
@@ -2932,13 +2932,6 @@ $lang = array(
'mime_types' => 'סוגי פנטומימה',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'רשימה מופרדת בפסיק של סוגי פנטומימאי מותרים, השאר ריק עבור כולם',
- 'ticket_number_start_help' => 'מספר הכרטיס חייב להיות גדול ממספר הכרטיס הנוכחי',
- 'new_ticket_template_id' => 'כרטיס חדש',
- 'new_ticket_autoresponder_help' => 'בחירת תבנית תשלח תגובה אוטומטית ללקוח/איש קשר כאשר נוצר כרטיס חדש',
- 'update_ticket_template_id' => 'כרטיס מעודכן',
- 'update_ticket_autoresponder_help' => 'בחירת תבנית תשלח תגובה אוטומטית ללקוח/איש קשר כאשר הכרטיס מעודכן',
- 'close_ticket_template_id' => 'כרטיס סגור',
- 'close_ticket_autoresponder_help' => 'בחירת תבנית תשלח תגובה אוטומטית ללקוח/איש קשר כאשר כרטיס נסגר',
'default_priority' => 'עדיפות ברירת מחדל',
'alert_new_comment_id' => 'תגובה חדשה',
'alert_comment_ticket_help' => 'בחירת תבנית תשלח הודעה (לסוכן) עם הערה.',
@@ -2955,8 +2948,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'הודעות נוספות על כרטיס איחור',
'alert_ticket_overdue_email_help' => 'הודעות דוא"ל מופרדות בפסיק לעותק מוסתר על איחור בכרטיס.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'מאסטר כרטיסים',
- 'ticket_master_help' => 'בעל יכולת להקצות ולהעביר כרטיסים. הוקצה כסוכן ברירת המחדל עבור כל הכרטיסים.',
'default_agent' => 'סוכן ברירת מחדל',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'הצג פרטי סוכן בתגובות',
@@ -2964,43 +2955,19 @@ $lang = array(
'remove_avatar' => 'הסר את הדמות',
'ticket_not_found' => 'הכרטיס לא נמצא',
'add_template' => 'הוסף תבנית',
- 'ticket_template' => 'תבנית כרטיס',
- 'ticket_templates' => 'תבניות כרטיסים',
'updated_ticket_template' => 'תבנית כרטיס מעודכנת',
'created_ticket_template' => 'נוצר תבנית כרטיס',
'archive_ticket_template' => 'תבנית ארכיון',
'restore_ticket_template' => 'שחזר תבנית',
'archived_ticket_template' => 'תבנית הועברה לארכיון בהצלחה',
'restored_ticket_template' => 'התבנית שוחזרה בהצלחה',
- 'close_reason' => 'מהי סיבת סגירת הכרטיס?',
- 'reopen_reason' => 'סיבת פתיחת הכרטיס?',
'enter_ticket_message' => 'נא להזין הודעה כדי לעדכן את הכרטיס',
'show_hide_all' => 'הצג / הסתר הכל',
'subject_required' => 'נושא חובה',
'mobile_refresh_warning' => 'אם אתה משתמש באפליקציה לנייד, ייתכן שיהיה עליך לבצע רענון מלא.',
- 'enable_proposals_for_background' => 'To upload a background image :link to enable the proposals module.',
- 'ticket_assignment' => 'הכרטיס :ticket_number הוקצה ל-:agent',
- 'ticket_contact_reply' => 'כרטיס :ticket_number עודכן על ידי הלקוח :contact',
- 'ticket_new_template_subject' => 'כרטיס :ticket_number נוצר.',
- 'ticket_updated_template_subject' => 'כרטיס :ticket_number עודכן.',
- 'ticket_closed_template_subject' => 'כרטיס :ticket_number נסגר.',
- 'ticket_overdue_template_subject' => 'כרטיס :ticket_number הגיע לאיחור',
'merge' => 'לְמַזֵג',
'merged' => 'מוזג',
'agent' => 'סוֹכֵן',
- 'parent_ticket' => 'כרטיס הורה',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'הזן את מספר הכרטיס להתמזג אליו',
- 'merge_from_to' => 'כרטיס מס':כרטיס_ישן מוזג לכרטיס מס':כרטיס_חדש',
- 'merge_closed_ticket_text' => 'כרטיס מס':old_ticket נסגר ומוזג לתוך Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'כרטיס מס':old_ticket נסגר ואוחד לתוך כרטיס זה',
- 'merge_placeholder' => 'מיזוג כרטיס מס':כרטיס לכרטיס הבא',
- 'select_ticket' => 'בחר כרטיס',
- 'new_internal_ticket' => 'כרטיס פנימי חדש',
- 'internal_ticket' => 'כרטיס פנימי',
- 'create_ticket' => 'צור כרטיס',
- 'allow_inbound_email_tickets_external' => 'כרטיסים חדשים בדוא"ל (לקוח)',
- 'allow_inbound_email_tickets_external_help' => 'אפשר ללקוחות ליצור כרטיסים חדשים בדוא"ל',
'include_in_filter' => 'כלול בפילטר',
'custom_client1' => ':ערך',
'custom_client2' => ':ערך',
@@ -5332,7 +5299,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/hr/texts.php b/lang/hr/texts.php
index 56a7db783fc4..14077898567f 100644
--- a/lang/hr/texts.php
+++ b/lang/hr/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Logo je uspješno uklonjen',
'sent_message' => 'Poruka je uspješno poslana',
'invoice_error' => 'Molimo provjerite da odaberete klijenta i korigirate greške',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Došlo je do greške pri procesuiranju vaše uplate. Molimo pokušajte kasnije.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
@@ -2696,7 +2696,7 @@ Nevažeći kontakt email',
'no_assets' => 'No images, drag to upload',
'add_image' => 'Add Image',
'select_image' => 'Select Image',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Delete Image',
'delete_image_help' => 'Warning: deleting the image will remove it from all proposals.',
'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
@@ -2935,13 +2935,6 @@ Nevažeći kontakt email',
'mime_types' => 'MIME tipovi',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Popis dopuštenih vrsta MIME tipova, odvojeni zarezima. Za sve, ostavite prazno',
- 'ticket_number_start_help' => 'Broj radnog naloga mora biti veći od zadnjeg broja naloga',
- 'new_ticket_template_id' => 'Novi radni nalog',
- 'new_ticket_autoresponder_help' => 'Odabir predloška poslat će automatski odgovor klijentu / kontaktu kada se kreira novi radni nalog',
- 'update_ticket_template_id' => 'Ažurirani radni nalog',
- 'update_ticket_autoresponder_help' => 'Odabir predloška poslat će automatski odgovor klijentu / kontaktu kada se radni nalog ažurira',
- 'close_ticket_template_id' => 'Radni nalog zatvoren',
- 'close_ticket_autoresponder_help' => 'Odabir predloška poslat će automatski odgovor klijentu / kontaktu kada se radni nalog zatvori',
'default_priority' => 'Zadani prioritet',
'alert_new_comment_id' => 'Novi komentar',
'alert_comment_ticket_help' => 'Odabirom predloška poslat će se obavijest (agentu) kad se kreira komentar.',
@@ -2958,8 +2951,6 @@ Nevažeći kontakt email',
'alert_ticket_overdue_email' => 'Dodatne obavijesti o kašnjenju radnog naloga',
'alert_ticket_overdue_email_help' => 'E-adrese odvojene zarezom na koje će se poslati skrivena kopija kašnjenja radnog naloga.',
'alert_ticket_overdue_agent_id_help' => 'Odabirom predloška, obavijesti će biti poslana (agentu) kada je radni nalog kasni.',
- 'ticket_master' => 'Vlasnik radnog naloga',
- 'ticket_master_help' => 'Ima mogućnost dodjeljivanja i prijenosa radnih naloga. Dodijeljen kao zadani agent za sve ulaznice.',
'default_agent' => 'Zadani agent',
'default_agent_help' => 'Ako se odabere, automatski će se dodijeliti svim ulaznim radnim nalozima',
'show_agent_details' => 'Prikaži detalje agenta u odgovorima',
@@ -2967,43 +2958,19 @@ Nevažeći kontakt email',
'remove_avatar' => 'Ukloni Avatar',
'ticket_not_found' => 'Radni nalog nije pronađen',
'add_template' => 'Dodaj Predložak',
- 'ticket_template' => 'Predložak radnog naloga',
- 'ticket_templates' => 'Predlošci radnih naloga',
'updated_ticket_template' => 'Ažuriran predložak radnog naloga',
'created_ticket_template' => 'Kreirani predložak radnog naloga',
'archive_ticket_template' => 'Arhiviran predložak ranog naloga',
'restore_ticket_template' => 'Vrati predložak radnog naloga',
'archived_ticket_template' => 'Predložak uspješno arhiviran',
'restored_ticket_template' => 'Uspješno obnovljen predložak',
- 'close_reason' => 'Recite nam zašto zatvarate radni nalog',
- 'reopen_reason' => 'Recite nam zašto ponovno otvarate radni nalog',
'enter_ticket_message' => 'Unesite poruku kako biste ažurirali radni nalog',
'show_hide_all' => 'Prikaži / sakrij sve',
'subject_required' => 'Predmet je obavezan',
'mobile_refresh_warning' => 'Ako koristite mobilnu aplikaciju, možda ćete morati izvršiti potpuno osvježavanje.',
- 'enable_proposals_for_background' => 'Za učitavanje pozadinske slike :link za omogućavanje modula prijedloga.',
- 'ticket_assignment' => 'Radni nalog :ticket_number dodijeljen je agentu :agent',
- 'ticket_contact_reply' => 'Radni nalog :ticket_number je ažuriran od strane klijenta :contact',
- 'ticket_new_template_subject' => 'Radni nalog :ticket_number je stvoren.',
- 'ticket_updated_template_subject' => 'Radni nalog :ticket_number je ažuriran.',
- 'ticket_closed_template_subject' => 'Radni nalog :ticket_number je zatvoren.',
- 'ticket_overdue_template_subject' => 'Radni nalog :ticket_number kasni.',
'merge' => 'Spoji',
'merged' => 'Spojeno',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Povezani radni nalozi',
- 'merge_prompt' => 'Unesite broj ranog naloga u kojeg će se spojiti',
- 'merge_from_to' => 'Radni nalog #:old_ticket je spojen u radni nalog #:new_ticket',
- 'merge_closed_ticket_text' => 'Radni nalog #:old_ticket je zatvoren i spojen u radni nalog #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Radni nalog #:old_ticket je zatvoren i spojen s ovime',
- 'merge_placeholder' => 'Spoji radni nalog #:ticket u sljedeći radni nalog',
- 'select_ticket' => 'Odaberi radni nalog',
- 'new_internal_ticket' => 'Novi interni radni nalog',
- 'internal_ticket' => 'Interni radni nalog',
- 'create_ticket' => 'Stvori radni nalog',
- 'allow_inbound_email_tickets_external' => 'Novi radni nalog putem e-maila (Klijent)',
- 'allow_inbound_email_tickets_external_help' => 'Dozvoli klijentima da kreiraju novi radni nalog putem e-maila',
'include_in_filter' => 'Uključi u filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4030,7 +3997,7 @@ Nevažeći kontakt email',
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4438,7 +4405,7 @@ Nevažeći kontakt email',
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5148,7 +5115,7 @@ Nevažeći kontakt email',
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5298,6 +5265,45 @@ Nevažeći kontakt email',
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/hu/texts.php b/lang/hu/texts.php
index a932fd05b79a..b5b7d3694ead 100644
--- a/lang/hu/texts.php
+++ b/lang/hu/texts.php
@@ -2918,13 +2918,6 @@ adva :date',
'mime_types' => 'MIME típusok',
'mime_types_placeholder' => '.pdf, .docx, stb.',
'mime_types_help' => 'Példa MIME típusok: .pdf, .docx, .png',
- 'ticket_number_start_help' => 'A jegyazonosító első száma',
- 'new_ticket_template_id' => 'Új jegy sablon',
- 'new_ticket_autoresponder_help' => 'Az új jegy automatikus válaszának kiválasztott sablonja',
- 'update_ticket_template_id' => 'Jegy frissítése sablon',
- 'update_ticket_autoresponder_help' => 'A jegy frissítésére adott automatikus válasz kiválasztott sablonja',
- 'close_ticket_template_id' => 'Jegy bezárása sablon',
- 'close_ticket_autoresponder_help' => 'A jegy bezárására adott automatikus válasz kiválasztott sablonja',
'default_priority' => 'Alapértelmezett prioritás',
'alert_new_comment_id' => 'Értesítés új megjegyzésről',
'alert_comment_ticket_help' => 'Az új megjegyzésre adott értesítés kiválasztott sablonja',
@@ -2941,8 +2934,6 @@ adva :date',
'alert_ticket_overdue_email' => 'Lejárt jegy e-mail értesítés',
'alert_ticket_overdue_email_help' => 'Az értesítés küldése, amikor egy jegy lejár',
'alert_ticket_overdue_agent_id_help' => 'Az ügynöknek történő értesítés küldése, amikor egy jegy lejár',
- 'ticket_master' => 'Jegymester',
- 'ticket_master_help' => 'Az összes jegyhez hozzáférő felhasználó',
'default_agent' => 'Alapértelmezett ügynök',
'default_agent_help' => 'Az új jegyekhez rendelt alapértelmezett ügynök',
'show_agent_details' => 'Ügynök részleteinek megjelenítése',
@@ -2950,43 +2941,19 @@ adva :date',
'remove_avatar' => 'Profilkép eltávolítása',
'ticket_not_found' => 'A jegy nem található',
'add_template' => 'Sablon hozzáadása',
- 'ticket_template' => 'Jegy sablon',
- 'ticket_templates' => 'Jegy sablonok',
'updated_ticket_template' => 'Frissített jegy sablon',
'created_ticket_template' => 'Létrehozott jegy sablon',
'archive_ticket_template' => 'Jegy sablon archiválása',
'restore_ticket_template' => 'Jegy sablon visszaállítása',
'archived_ticket_template' => 'Archivált jegy sablon',
'restored_ticket_template' => 'Visszaállított jegy sablon',
- 'close_reason' => 'Bezárás oka',
- 'reopen_reason' => 'Újranyitás oka',
'enter_ticket_message' => 'Írja be a jegy üzenetét',
'show_hide_all' => 'Összes megjelenítése/elrejtése',
'subject_required' => 'Tárgy kötelező',
'mobile_refresh_warning' => 'Ha mobilalkalmazást használ, frissítheti az alkalmazást az új tartalom megtekintéséhez.',
- 'enable_proposals_for_background' => 'A háttérhez engedélyezze az ajánlatokat',
- 'ticket_assignment' => 'Jegy hozzárendelése',
- 'ticket_contact_reply' => 'Jegy válasz ügyfélnek',
- 'ticket_new_template_subject' => 'Új jegy sablon tárgya',
- 'ticket_updated_template_subject' => 'Frissített jegy sablon tárgya',
- 'ticket_closed_template_subject' => 'Bezárt jegy sablon tárgya',
- 'ticket_overdue_template_subject' => 'Lejárt jegy sablon tárgya',
'merge' => 'Összevonás',
'merged' => 'Összevont',
'agent' => 'Ügyintéző',
- 'parent_ticket' => 'Szülő jegy',
- 'linked_tickets' => 'Kapcsolt jegyek',
- 'merge_prompt' => 'Összevonás felhívás',
- 'merge_from_to' => 'Összevonás forrás-ide',
- 'merge_closed_ticket_text' => 'Az összevont jegyek bezárva lesznek',
- 'merge_updated_ticket_text' => 'Az összevont jegy frissítve lesz',
- 'merge_placeholder' => 'Összevonás helyőrző',
- 'select_ticket' => 'Jegy kiválasztása',
- 'new_internal_ticket' => 'Új belső jegy',
- 'internal_ticket' => 'Belső jegy',
- 'create_ticket' => 'Jegy létrehozása',
- 'allow_inbound_email_tickets_external' => 'Beérkező e-mail jegyek engedélyezése külső',
- 'allow_inbound_email_tickets_external_help' => 'Engedélyezi a külső ügyfeleknek a beérkező e-mail alapú jegyek létrehozását.',
'include_in_filter' => 'Beleértve a szűrőbe',
'custom_client1' => 'Egyéni ügyfél 1',
'custom_client2' => 'Egyéni ügyfél 2',
@@ -5318,7 +5285,8 @@ adva :date',
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/it/texts.php b/lang/it/texts.php
index f3b397946071..f72f831d3ff2 100644
--- a/lang/it/texts.php
+++ b/lang/it/texts.php
@@ -2925,13 +2925,6 @@ $lang = array(
'mime_types' => 'Tipi file MIME',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Elenco separato da virgole dei tipi mime consentiti, lasciare vuoto per tutti',
- 'ticket_number_start_help' => 'Il numero del ticket deve essere maggiore del numero di ticket corrente',
- 'new_ticket_template_id' => 'Nuovo ticket',
- 'new_ticket_autoresponder_help' => 'Selezionando un modello verrà inviata una risposta automatica a un cliente/contatto quando viene creato un nuovo ticket',
- 'update_ticket_template_id' => 'Ticket aggiornato',
- 'update_ticket_autoresponder_help' => 'Selezionando un modello verrà inviata una risposta automatica a un cliente/contatto quando un ticket viene aggiornato',
- 'close_ticket_template_id' => 'Ticket chiuso',
- 'close_ticket_autoresponder_help' => 'Selezionando un modello verrà inviata una risposta automatica a un cliente/contatto quando un ticket viene chiuso',
'default_priority' => 'Priorità predefinita',
'alert_new_comment_id' => 'Nuovo commento',
'alert_comment_ticket_help' => 'Selezionando un modello, verrà inviata una notifica (all\'agente) quando viene fatto un commento.',
@@ -2948,8 +2941,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Ulteriori notifiche di ticket scaduti',
'alert_ticket_overdue_email_help' => 'Email separate da virgole a bcc su ticket scaduti.',
'alert_ticket_overdue_agent_id_help' => 'Selezionando un modello invierà una notifica (all\'agente) quando un ticket va in scadenza.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Ha la capacità di assegnare e trasferire ticket. Assegnato come agente predefinito per tutti i ticket.',
'default_agent' => 'Agente predefinito',
'default_agent_help' => 'Se selezionato sarà automaticamente assegnato a tutti i ticket in entrata',
'show_agent_details' => 'Mostra i dettagli dell\'agente sulle risposte',
@@ -2957,43 +2948,19 @@ $lang = array(
'remove_avatar' => 'Rimuovi avatar',
'ticket_not_found' => 'Ticket non trovato',
'add_template' => 'Aggiungi Modello',
- 'ticket_template' => 'Modello Ticket',
- 'ticket_templates' => 'Modelli Ticket',
'updated_ticket_template' => 'Modello Ticket Aggiornato',
'created_ticket_template' => 'Modello Ticket Creato',
'archive_ticket_template' => 'Archivia il modello',
'restore_ticket_template' => 'Riprestina il modello',
'archived_ticket_template' => 'Modello archiviato con successo',
'restored_ticket_template' => 'Modello ripristinato con successo',
- 'close_reason' => 'Facci sapere perché stai chiudendo questo ticket',
- 'reopen_reason' => 'Facci sapere perché stai riaprendo questo ticket',
'enter_ticket_message' => 'Inserire un messaggio per aggiornare il biglietto',
'show_hide_all' => 'Mostra / Nascondi tutto',
'subject_required' => 'Soggetto richiesto',
'mobile_refresh_warning' => 'Se stai usando l\'app mobile potresti aver bisogno di fare un ricaricamento completo.',
- 'enable_proposals_for_background' => 'Per caricare un'immagine di sfondo :link per abilitare il modulo proposte.',
- 'ticket_assignment' => 'Il ticket :ticket_number è stato assegnato a :agent',
- 'ticket_contact_reply' => 'Il ticket :ticket_number è stato aggiornato dal cliente :contact',
- 'ticket_new_template_subject' => 'Il ticket :ticket_number è stato creato.',
- 'ticket_updated_template_subject' => 'Il ticket :ticket_number è stato aggiornato.',
- 'ticket_closed_template_subject' => 'Il ticket :ticket_number è stato chiuso.',
- 'ticket_overdue_template_subject' => 'Il ticket :ticket_number è scaduto',
'merge' => 'Unisci',
'merged' => 'Unito',
'agent' => 'Agente',
- 'parent_ticket' => 'Ticket padre',
- 'linked_tickets' => 'Tickets collegati',
- 'merge_prompt' => 'Inserisci il numero del ticket da unire',
- 'merge_from_to' => 'Ticket #:old_ticket unito al ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Il ticket #:old_ticket è stato chiuso e unito al ticket #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Il ticket #:old_ticket è stato chiuso e unito a questo ticket',
- 'merge_placeholder' => 'Unisci il ticket #:ticket al seguente ticket',
- 'select_ticket' => 'Seleziona ticket',
- 'new_internal_ticket' => 'Nuovo ticket interno',
- 'internal_ticket' => 'Ticket interno',
- 'create_ticket' => 'Crea ticket',
- 'allow_inbound_email_tickets_external' => 'Nuovi ticket via e-mail (cliente)',
- 'allow_inbound_email_tickets_external_help' => 'Permettere ai clienti di creare nuovi ticket via e-mail',
'include_in_filter' => 'Includi nel filtro',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5325,7 +5292,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/ja/texts.php b/lang/ja/texts.php
index dfec27c63c5c..fd1ef612f47f 100644
--- a/lang/ja/texts.php
+++ b/lang/ja/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'ロゴを削除しました。',
'sent_message' => 'メッセージを送信しました。',
'invoice_error' => '顧客を選択し、エラーを修正したことを確認してください。',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'There was an error processing your payment. Please try again later.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'メールボックスを確認してください。確認メールを再送する場合は :link をクリックしてください。',
@@ -2695,7 +2695,7 @@ $lang = array(
'no_assets' => 'No images, drag to upload',
'add_image' => 'Add Image',
'select_image' => 'Select Image',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Delete Image',
'delete_image_help' => '警告: 画像を削除すると、すべての提案から削除されます。',
'amount_variable_help' => '注: 請求書の $amount フィールドは、設定されている場合は部分/預金フィールドを使用し、それ以外の場合は請求書の残高を使用します。',
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number',
- 'new_ticket_template_id' => 'New ticket',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Updated ticket',
- 'update_ticket_autoresponder_help' => 'テンプレートを選択すると、チケット更新時にクライアント/連絡先に対して自動応答が送信されます。',
- 'close_ticket_template_id' => 'Closed ticket',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'New comment',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'Ticket not found',
'add_template' => 'Add Template',
- 'ticket_template' => 'Ticket Template',
- 'ticket_templates' => 'Ticket Templates',
'updated_ticket_template' => 'Updated Ticket Template',
'created_ticket_template' => 'Created Ticket Template',
'archive_ticket_template' => 'Archive Template',
'restore_ticket_template' => 'Restore Template',
'archived_ticket_template' => 'Successfully archived template',
'restored_ticket_template' => 'Successfully restored template',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Please enter a message to update the ticket',
'show_hide_all' => 'Show / Hide all',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
- 'enable_proposals_for_background' => '背景画像 :link をアップロードして、提案モジュールを有効にします。',
- 'ticket_assignment' => 'チケット :ticket_number が :agent に割り当てられました',
- 'ticket_contact_reply' => 'チケット :ticket_number がクライアント :contact によって更新されました',
- 'ticket_new_template_subject' => 'チケット :ticket_number が作成されました。',
- 'ticket_updated_template_subject' => 'チケット :ticket_number が更新されました。',
- 'ticket_closed_template_subject' => 'チケット :ticket_number はクローズされました。',
- 'ticket_overdue_template_subject' => 'チケット :ticket_number の期限が過ぎています',
'merge' => 'Merge',
'merged' => 'Merged',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'チケット #:old_ticket はチケット #:new_ticket に統合されました',
- 'merge_closed_ticket_text' => 'チケット #:old_ticket はクローズされ、Ticket#:new_ticket に統合されました - :subject',
- 'merge_updated_ticket_text' => 'チケット #:old_ticket はクローズされ、このチケットに統合されました',
- 'merge_placeholder' => 'チケット #:ticket を次のチケットにマージします',
- 'select_ticket' => 'Select Ticket',
- 'new_internal_ticket' => 'New internal ticket',
- 'internal_ticket' => 'Internal ticket',
- 'create_ticket' => 'Create ticket',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':価値',
'custom_client2' => ':価値',
@@ -4437,7 +4404,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5306,20 +5273,36 @@ $lang = array(
'activity_140' => 'Statement sent to :client',
'invoice_net_amount' => 'Invoice Net Amount',
'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
'1_minute' => '1 Minute',
'5_minutes' => '5 Minutes',
'15_minutes' => '15 Minutes',
'30_minutes' => '30 Minutes',
'1_hour' => '1 Hour',
'1_day' => '1 Day',
- 'round_tasks' => 'Round Tasks',
- 'round_tasks_help' => 'Round time intervals when saving tasks',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
'direction' => 'Direction',
'round_up' => 'Round Up',
'round_down' => 'Round Down',
'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
'bulk_updated' => 'Successfully updated data',
'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/km_KH/texts.php b/lang/km_KH/texts.php
index a0f8f9b411dd..4aba9bb9ff15 100644
--- a/lang/km_KH/texts.php
+++ b/lang/km_KH/texts.php
@@ -2914,13 +2914,6 @@ $lang = array(
'mime_types' => 'ប្រភេទ Mime',
'mime_types_placeholder' => '.pdf , .docx , .jpg',
'mime_types_help' => 'បញ្ជីដោយបំបែកដោយសញ្ញាក្បៀសនៃប្រភេទ mime ដែលបានអនុញ្ញាត ទុកទទេសម្រាប់ទាំងអស់គ្នា',
- 'ticket_number_start_help' => 'លេខសំបុត្រត្រូវតែធំជាងលេខសំបុត្របច្ចុប្បន្ន',
- 'new_ticket_template_id' => 'សំបុត្រថ្មី។',
- 'new_ticket_autoresponder_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការឆ្លើយតបដោយស្វ័យប្រវត្តិទៅអតិថិជន/ទំនាក់ទំនង នៅពេលសំបុត្រថ្មីត្រូវបានបង្កើត',
- 'update_ticket_template_id' => 'សំបុត្រដែលបានធ្វើបច្ចុប្បន្នភាព',
- 'update_ticket_autoresponder_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការឆ្លើយតបដោយស្វ័យប្រវត្តិទៅអតិថិជន/ទំនាក់ទំនង នៅពេលសំបុត្រត្រូវបានធ្វើបច្ចុប្បន្នភាព',
- 'close_ticket_template_id' => 'សំបុត្របិទ',
- 'close_ticket_autoresponder_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការឆ្លើយតបដោយស្វ័យប្រវត្តិទៅអតិថិជន/ទំនាក់ទំនង នៅពេលសំបុត្រត្រូវបានបិទ',
'default_priority' => 'អាទិភាពលំនាំដើម',
'alert_new_comment_id' => 'មតិថ្មី។',
'alert_comment_ticket_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការជូនដំណឹង (ទៅភ្នាក់ងារ) នៅពេលមានមតិយោបល់។',
@@ -2937,8 +2930,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'ការជូនដំណឹងអំពីសំបុត្រហួសកាលកំណត់បន្ថែម',
'alert_ticket_overdue_email_help' => 'សញ្ញាក្បៀសបានបំបែកអ៊ីមែលទៅជា bcc នៅលើសំបុត្រហួសកំណត់។',
'alert_ticket_overdue_agent_id_help' => 'ការជ្រើសរើសគំរូនឹងផ្ញើការជូនដំណឹង (ទៅភ្នាក់ងារ) នៅពេលដែលសំបុត្រផុតកំណត់។',
- 'ticket_master' => 'ម្ចាស់សំបុត្រ',
- 'ticket_master_help' => 'មានសមត្ថភាពក្នុងការចាត់តាំង និងផ្ទេរសំបុត្រ។ ត្រូវបានចាត់តាំងជាភ្នាក់ងារលំនាំដើមសម្រាប់សំបុត្រទាំងអស់។',
'default_agent' => 'ភ្នាក់ងារលំនាំដើម',
'default_agent_help' => 'ប្រសិនបើបានជ្រើសនឹងត្រូវបានកំណត់ដោយស្វ័យប្រវត្តិចំពោះសំបុត្រចូលទាំងអស់',
'show_agent_details' => 'បង្ហាញព័ត៌មានលម្អិតភ្នាក់ងារលើការឆ្លើយតប',
@@ -2946,43 +2937,19 @@ $lang = array(
'remove_avatar' => 'លុបរូបតំណាង',
'ticket_not_found' => 'រកមិនឃើញសំបុត្រទេ។',
'add_template' => 'បន្ថែមគំរូ',
- 'ticket_template' => 'គំរូសំបុត្រ',
- 'ticket_templates' => 'គំរូសំបុត្រ',
'updated_ticket_template' => 'គំរូសំបុត្រដែលបានធ្វើបច្ចុប្បន្នភាព',
'created_ticket_template' => 'បានបង្កើតគំរូសំបុត្រ',
'archive_ticket_template' => 'បណ្ណសារគំរូ',
'restore_ticket_template' => 'ស្តារគំរូ',
'archived_ticket_template' => 'ពុម្ពដែលបានទុកក្នុងប័ណ្ណសារដោយជោគជ័យ',
'restored_ticket_template' => 'បានស្ដារគំរូដោយជោគជ័យ',
- 'close_reason' => 'ប្រាប់យើងពីមូលហេតុដែលអ្នកបិទសំបុត្រនេះ។',
- 'reopen_reason' => 'អនុញ្ញាតឱ្យពួកយើងដឹងពីមូលហេតុដែលអ្នកកំពុងបើកសំបុត្រនេះឡើងវិញ',
'enter_ticket_message' => 'សូមបញ្ចូលសារដើម្បីធ្វើបច្ចុប្បន្នភាពសំបុត្រ',
'show_hide_all' => 'បង្ហាញ / លាក់ទាំងអស់។',
'subject_required' => 'ប្រធានបទដែលត្រូវការ',
'mobile_refresh_warning' => 'ប្រសិនបើអ្នកកំពុងប្រើកម្មវិធីទូរស័ព្ទ អ្នកប្រហែលជាត្រូវធ្វើការអាប់ដេតពេញលេញ។',
- 'enable_proposals_for_background' => 'ដើម្បីបង្ហោះរូបភាពផ្ទៃខាងក្រោយ :link ដើម្បីបើកម៉ូឌុលសំណើ។',
- 'ticket_assignment' => 'សំបុត្រ :ticket_number ត្រូវបានចាត់ឱ្យទៅ :agent',
- 'ticket_contact_reply' => 'សំបុត្រ :ticket_number ត្រូវបានធ្វើបច្ចុប្បន្នភាពដោយអតិថិជន :contact',
- 'ticket_new_template_subject' => 'សំបុត្រ :ticket_number ត្រូវបានបង្កើត។',
- 'ticket_updated_template_subject' => 'សំបុត្រ :ticket_number ត្រូវបានធ្វើបច្ចុប្បន្នភាព។',
- 'ticket_closed_template_subject' => 'សំបុត្រ :ticket_number ត្រូវបានបិទ។',
- 'ticket_overdue_template_subject' => 'សំបុត្រ :ticket_number ឥឡូវនេះផុតកំណត់ហើយ។',
'merge' => 'បញ្ចូលគ្នា',
'merged' => 'បញ្ចូលគ្នា',
'agent' => 'ភ្នាក់ងារ',
- 'parent_ticket' => 'សំបុត្រឪពុកម្តាយ',
- 'linked_tickets' => 'សំបុត្រភ្ជាប់',
- 'merge_prompt' => 'បញ្ចូលលេខសំបុត្រដើម្បីបញ្ចូលចូលគ្នា។',
- 'merge_from_to' => 'សំបុត្រ #:old_ticket បានបញ្ចូលទៅក្នុង Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'សំបុត្រ #:old_ticket ត្រូវបានបិទ ហើយបញ្ចូលទៅក្នុង Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'សំបុត្រ #:old_ticket ត្រូវបានបិទ ហើយបញ្ចូលទៅក្នុងសំបុត្រនេះ។',
- 'merge_placeholder' => 'បញ្ចូលសំបុត្រ #: សំបុត្រចូលទៅក្នុងសំបុត្រខាងក្រោម',
- 'select_ticket' => 'ជ្រើសរើសសំបុត្រ',
- 'new_internal_ticket' => 'សំបុត្រខាងក្នុងថ្មី។',
- 'internal_ticket' => 'សំបុត្រខាងក្នុង',
- 'create_ticket' => 'បង្កើតសំបុត្រ',
- 'allow_inbound_email_tickets_external' => 'សំបុត្រថ្មីតាមអ៊ីមែល (អតិថិជន)',
- 'allow_inbound_email_tickets_external_help' => 'អនុញ្ញាតឱ្យអតិថិជនបង្កើតសំបុត្រថ្មីតាមអ៊ីមែល',
'include_in_filter' => 'រួមបញ្ចូលនៅក្នុងតម្រង',
'custom_client1' => '៖ VALUE',
'custom_client2' => '៖ VALUE',
@@ -5314,7 +5281,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/lo_LA/texts.php b/lang/lo_LA/texts.php
index 3fab708c8e0f..5a0e5e16168c 100644
--- a/lang/lo_LA/texts.php
+++ b/lang/lo_LA/texts.php
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'ປະເພດ Mime',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'ໝາຍຈຸດແຍກລາຍຊື່ປະເພດ mime ທີ່ອະນຸຍາດ, ປ່ອຍໃຫ້ຫວ່າງສຳລັບທັງໝົດ',
- 'ticket_number_start_help' => 'ໝາຍເລກປີ້ຕ້ອງໃຫຍ່ກວ່າໝາຍເລກປີ້ປະຈຸບັນ',
- 'new_ticket_template_id' => 'ປີ້ໃໝ່',
- 'new_ticket_autoresponder_help' => 'ການເລືອກແມ່ແບບຈະສົ່ງການຕອບໂຕ້ອັດຕະໂນມັດໃຫ້ກັບລູກຄ້າ / ຕິດຕໍ່ເມື່ອປີ້ໃຫມ່ຖືກສ້າງຂື້ນ',
- 'update_ticket_template_id' => 'ປີ້ອັບເດດ',
- 'update_ticket_autoresponder_help' => 'ການເລືອກແມ່ແບບຈະສົ່ງການຕອບໂຕ້ອັດຕະໂນມັດໃຫ້ກັບລູກຄ້າ / ຕິດຕໍ່ເມື່ອປີ້ໄດ້ຖືກປັບປຸງ',
- 'close_ticket_template_id' => 'ປີ້ປິດ',
- 'close_ticket_autoresponder_help' => 'ການເລືອກແມ່ແບບຈະສົ່ງການຕອບໂຕ້ອັດຕະໂນມັດໃຫ້ກັບລູກຄ້າ / ຕິດຕໍ່ເມື່ອປີ້ປິດ',
'default_priority' => 'ບູລິມະສິດເລີ່ມຕົ້ນ',
'alert_new_comment_id' => 'ຄຳເຫັນໃໝ່',
'alert_comment_ticket_help' => 'ການເລືອກແມ່ແບບຈະສົ່ງການແຈ້ງເຕືອນ (ໃຫ້ຕົວແທນ) ເມື່ອມີຄຳເຫັນ.',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'ການແຈ້ງປີ້ທີ່ເກີນກຳນົດເວລາເພີ່ມເຕີມ',
'alert_ticket_overdue_email_help' => 'ໝາຍຈຸດທີ່ແຍກອີເມວໄປຫາ bcc ໃນປີ້ທີ່ໝົດກຳນົດ.',
'alert_ticket_overdue_agent_id_help' => 'ການເລືອກແມ່ແບບຈະສົ່ງການແຈ້ງເຕືອນ (ໃຫ້ຕົວແທນ) ເມື່ອປີ້ໝົດກຳນົດ.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'ມີຄວາມສາມາດໃນການມອບຫມາຍແລະໂອນປີ້. ມອບໝາຍໃຫ້ເປັນຕົວແທນເລີ່ມຕົ້ນສຳລັບປີ້ທັງໝົດ.',
'default_agent' => 'ຕົວແທນເລີ່ມຕົ້ນ',
'default_agent_help' => 'ຖ້າເລືອກຈະຖືກມອບໃຫ້ປີ້ເຂົ້າທັງໝົດໂດຍອັດຕະໂນມັດ',
'show_agent_details' => 'ສະແດງລາຍລະອຽດຕົວແທນກ່ຽວກັບການຕອບ',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'ເອົາຮູບແທນຕົວອອກ',
'ticket_not_found' => 'ບໍ່ພົບປີ້',
'add_template' => 'ເພີ່ມແມ່ແບບ',
- 'ticket_template' => 'ແມ່ແບບປີ້',
- 'ticket_templates' => 'ແມ່ແບບປີ້',
'updated_ticket_template' => 'ແມ່ແບບປີ້ທີ່ອັບເດດແລ້ວ',
'created_ticket_template' => 'Ticket Template ທີ່ສ້າງແລ້ວ',
'archive_ticket_template' => 'ແມ່ແບບເກັບມ້ຽນ',
'restore_ticket_template' => 'ຟື້ນຟູແມ່ແບບ',
'archived_ticket_template' => 'ແມ່ແບບທີ່ເກັບໄວ້ສຳເລັດແລ້ວ',
'restored_ticket_template' => 'ແມ່ແບບຟື້ນຟູສຳເລັດແລ້ວ',
- 'close_reason' => 'ບອກໃຫ້ພວກເຮົາຮູ້ວ່າເປັນຫຍັງເຈົ້າຈຶ່ງປິດປີ້ນີ້',
- 'reopen_reason' => 'ບອກໃຫ້ພວກເຮົາຮູ້ວ່າເປັນຫຍັງທ່ານຈຶ່ງເປີດປີ້ນີ້ຄືນໃໝ່',
'enter_ticket_message' => 'ກະລຸນາໃສ່ຂໍ້ຄວາມເພື່ອອັບເດດປີ້',
'show_hide_all' => 'ສະແດງ / ເຊື່ອງທັງໝົດ',
'subject_required' => 'ວິຊາທີ່ຕ້ອງການ',
'mobile_refresh_warning' => 'ຫາກເຈົ້າກຳລັງໃຊ້ແອັບມືຖື ເຈົ້າອາດຕ້ອງໂຫຼດຂໍ້ມູນຄືນໃໝ່.',
- 'enable_proposals_for_background' => 'ເພື່ອອັບໂຫລດຮູບພື້ນຫຼັງ: ລິ້ງເພື່ອເປີດໃຊ້ໂມດູນຂໍ້ສະເໜີ.',
- 'ticket_assignment' => 'ປີ້ :ticket_number ໄດ້ຖືກມອບໝາຍໃຫ້: ຕົວແທນ',
- 'ticket_contact_reply' => 'ປີ້ :ticket_number ໄດ້ຖືກປັບປຸງໂດຍລູກຄ້າ: ຕິດຕໍ່',
- 'ticket_new_template_subject' => 'ປີ້ :ticket_number ໄດ້ຖືກສ້າງຂຶ້ນແລ້ວ.',
- 'ticket_updated_template_subject' => 'ປີ້:ticket_number ໄດ້ຖືກປັບປຸງແລ້ວ.',
- 'ticket_closed_template_subject' => 'ປີ້:ticket_number ໄດ້ຖືກປິດແລ້ວ.',
- 'ticket_overdue_template_subject' => 'ປີ້:ticket_number ດຽວນີ້ໝົດກຳນົດແລ້ວ',
'merge' => 'ລວມ',
'merged' => 'ລວມເຂົ້າກັນ',
'agent' => 'ຕົວແທນ',
- 'parent_ticket' => 'ປີ້ພໍ່ແມ່',
- 'linked_tickets' => 'ປີ້ທີ່ເຊື່ອມຕໍ່',
- 'merge_prompt' => 'ໃສ່ໝາຍເລກປີ້ເຂົ້າໃສ່',
- 'merge_from_to' => 'ປີ້ #:old_ticket ລວມເຂົ້າເປັນ Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'ປີ້ #:old_ticket ໄດ້ຖືກປິດ ແລະລວມເຂົ້າເປັນ Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'ປີ້ #:old_ticket ໄດ້ຖືກປິດ ແລະຮວມເຂົ້າກັນໃນປີ້ນີ້',
- 'merge_placeholder' => 'ລວມປີ້ #: ປີ້ເຂົ້າໄປໃນປີ້ຕໍ່ໄປນີ້',
- 'select_ticket' => 'ເລືອກປີ້',
- 'new_internal_ticket' => 'ປີ້ພາຍໃນໃໝ່',
- 'internal_ticket' => 'ປີ້ພາຍໃນ',
- 'create_ticket' => 'ສ້າງປີ້',
- 'allow_inbound_email_tickets_external' => 'ປີ້ໃໝ່ທາງອີເມວ (ລູກຄ້າ)',
- 'allow_inbound_email_tickets_external_help' => 'ອະນຸຍາດໃຫ້ລູກຄ້າສ້າງປີ້ໃຫມ່ທາງອີເມວ',
'include_in_filter' => 'ລວມຢູ່ໃນຕົວກອງ',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5334,7 +5301,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'ທ້າຍເດືອນ'
+ 'end_of_month' => 'ທ້າຍເດືອນ',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/lt/texts.php b/lang/lt/texts.php
index 50daaf7ce971..c03003a16a56 100644
--- a/lang/lt/texts.php
+++ b/lang/lt/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Logo ištrintas sėkmingai',
'sent_message' => 'Žinutė išsiųsta',
'invoice_error' => 'Pasitinkite klientą ir pataisykite klaidas',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'There was an error processing your payment. Please try again later.',
'registration_required' => 'Būtina registracija',
'confirmation_required' => 'Prašome patvirtinti jūsų el.pašto adresą, :link jei norite dar kartą atsiųsti patvirtinimo laišką.',
@@ -2197,7 +2197,7 @@ $lang = array(
'mailgun_private_key' => 'Mailgun Private Key',
'brevo_domain' => 'Brevo Domain',
'brevo_private_key' => 'Brevo Private Key',
- 'send_test_email' => 'Send test email',
+ 'send_test_email' => 'Send Test Email',
'select_label' => 'Select Label',
'label' => 'Label',
'service' => 'Service',
@@ -2695,7 +2695,7 @@ $lang = array(
'no_assets' => 'No images, drag to upload',
'add_image' => 'Add Image',
'select_image' => 'Select Image',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Delete Image',
'delete_image_help' => 'Perspėjimas: ištrynus nuotrauką ji bus pašalinta iš visų pasiūlymų',
'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number',
- 'new_ticket_template_id' => 'New ticket',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Updated ticket',
- 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated',
- 'close_ticket_template_id' => 'Closed ticket',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'New comment',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'Ticket not found',
'add_template' => 'Pridėti Šabloną',
- 'ticket_template' => 'Bilieto Šablonas',
- 'ticket_templates' => 'Bilieto Šablonai',
'updated_ticket_template' => 'Atnaujintas Bilieto Šablonas',
'created_ticket_template' => 'Sukurtas Bilieto Šablonas',
'archive_ticket_template' => 'Archyvuoti Šabloną',
'restore_ticket_template' => 'Atstatyti Šabloną',
'archived_ticket_template' => 'Sėkmingai archyvuotas šablonas',
'restored_ticket_template' => 'Sėkmingai atkurtas šablonas',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Please enter a message to update the ticket',
'show_hide_all' => 'Show / Hide all',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
- 'enable_proposals_for_background' => 'Norėdami užkelti fono nuotrauką :link kad įgalintumėte pasiūlymų modulį.',
- 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number has been updated by client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number has been created.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue',
'merge' => 'Merge',
'merged' => 'Merged',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket',
- 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket',
- 'select_ticket' => 'Select Ticket',
- 'new_internal_ticket' => 'New internal ticket',
- 'internal_ticket' => 'Internal ticket',
- 'create_ticket' => 'Create ticket',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4029,7 +3996,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4170,7 +4137,7 @@ $lang = array(
'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.',
+ 'quotes_with_status_sent_can_be_approved' => 'Only quotes with "Sent" status can be approved. Expired quotes cannot be approved.',
'no_quotes_available_for_download' => 'No quotes available for download.',
'copyright' => 'Copyright',
'user_created_user' => ':user created :created_user at :time',
@@ -4437,7 +4404,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5295,6 +5262,47 @@ $lang = array(
'flutter_web_warning' => 'We recommend using the new web app or the desktop app for the best performance',
'rappen_rounding' => 'Rappen Rounding',
'rappen_rounding_help' => 'Round amount to 5 cents',
+ 'assign_group' => 'Assign group',
+ 'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/lv_LV/texts.php b/lang/lv_LV/texts.php
index b0a80cbf4fea..8cabdf50d29f 100644
--- a/lang/lv_LV/texts.php
+++ b/lang/lv_LV/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Veiksmīgi noņemts logotips',
'sent_message' => 'Veiksmīgi nosūtīts ziņojums',
'invoice_error' => 'Please make sure to select a client and correct any errors',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'There was an error processing your payment. Please try again later.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
@@ -2695,7 +2695,7 @@ $lang = array(
'no_assets' => 'No images, drag to upload',
'add_image' => 'Pievienot attēlu',
'select_image' => 'Izvēlēties attēlu',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Dzēst attēlu',
'delete_image_help' => 'Warning: deleting the image will remove it from all proposals.',
'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number',
- 'new_ticket_template_id' => 'New ticket',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Updated ticket',
- 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated',
- 'close_ticket_template_id' => 'Closed ticket',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'Jauns komentārs',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'Ticket not found',
'add_template' => 'Add Template',
- 'ticket_template' => 'Ticket Template',
- 'ticket_templates' => 'Ticket Templates',
'updated_ticket_template' => 'Updated Ticket Template',
'created_ticket_template' => 'Created Ticket Template',
'archive_ticket_template' => 'Archive Template',
'restore_ticket_template' => 'Restore Template',
'archived_ticket_template' => 'Successfully archived template',
'restored_ticket_template' => 'Successfully restored template',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Please enter a message to update the ticket',
'show_hide_all' => 'Show / Hide all',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
- 'enable_proposals_for_background' => 'To upload a background image :link to enable the proposals module.',
- 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number has been updated by client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number has been created.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue',
'merge' => 'Merge',
'merged' => 'Merged',
'agent' => 'Aģents',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket',
- 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket',
- 'select_ticket' => 'Atzīmēt biļeti',
- 'new_internal_ticket' => 'Jaunā iekšējā biļete',
- 'internal_ticket' => 'Iekšējā biļete',
- 'create_ticket' => 'Izveidot biļeti',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Pievienot filtram',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4029,7 +3996,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4437,7 +4404,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5297,6 +5264,45 @@ $lang = array(
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/mk_MK/texts.php b/lang/mk_MK/texts.php
index 59e8fc47c975..b72e2dac8e11 100644
--- a/lang/mk_MK/texts.php
+++ b/lang/mk_MK/texts.php
@@ -200,7 +200,7 @@ $lang = array(
'removed_logo' => 'Успешно отстранување на лого',
'sent_message' => 'Успешно пратена порака',
'invoice_error' => 'Ве молиме одберете клиент и поправете можни грешки',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Има грешка при процесирањето на плаќањето. Ве молиме обидете се повторно подоцна.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Ве молиме потврдете ја Вашата адреса за е-пошта, :link за повторно испраќање на е-пошта за потврда.',
@@ -2696,7 +2696,7 @@ $lang = array(
'no_assets' => 'Нема слики, повлечи за прикачување',
'add_image' => 'Додај слика',
'select_image' => 'Избери слика',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Избриши слика',
'delete_image_help' => 'Предупредување: со бришење на сликата таа ќе биде отстранета од сите предлози.',
'amount_variable_help' => 'Забелешка: полето за $износ на фактурата ќе го користи полето за делумно/депозит а ако е поставено поинаку, ќе го користи сумата по фактурата.',
@@ -2935,13 +2935,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number',
- 'new_ticket_template_id' => 'New ticket',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Updated ticket',
- 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated',
- 'close_ticket_template_id' => 'Closed ticket',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'New comment',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2958,8 +2951,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2967,43 +2958,19 @@ $lang = array(
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'Ticket not found',
'add_template' => 'Add Template',
- 'ticket_template' => 'Ticket Template',
- 'ticket_templates' => 'Ticket Templates',
'updated_ticket_template' => 'Updated Ticket Template',
'created_ticket_template' => 'Created Ticket Template',
'archive_ticket_template' => 'Archive Template',
'restore_ticket_template' => 'Restore Template',
'archived_ticket_template' => 'Successfully archived template',
'restored_ticket_template' => 'Successfully restored template',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Please enter a message to update the ticket',
'show_hide_all' => 'Show / Hide all',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'Ако ја користите мобилната апликација можеби ќе треба да направите целосно освежување.',
- 'enable_proposals_for_background' => 'За да прикажите позадинска слика :link за овозможување на модулот за предлози.',
- 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number has been updated by client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number has been created.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue',
'merge' => 'Merge',
'merged' => 'Merged',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket',
- 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket',
- 'select_ticket' => 'Select Ticket',
- 'new_internal_ticket' => 'New internal ticket',
- 'internal_ticket' => 'Internal ticket',
- 'create_ticket' => 'Create ticket',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4030,7 +3997,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4438,7 +4405,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5148,7 +5115,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5298,6 +5265,45 @@ $lang = array(
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/nl/texts.php b/lang/nl/texts.php
index d2b930c8d050..1b6a8f040e6a 100644
--- a/lang/nl/texts.php
+++ b/lang/nl/texts.php
@@ -2931,13 +2931,6 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'mime_types' => 'MIME-types',
'mime_types_placeholder' => '.pdf, .docx, .jpg',
'mime_types_help' => 'Komma-gescheiden lijst met toegestane MIME-types, laat leeg voor alle',
- 'ticket_number_start_help' => 'Het ticketnummer moet groter zijn dan het huidige ticket nummer',
- 'new_ticket_template_id' => 'Nieuw ticket',
- 'new_ticket_autoresponder_help' => 'Het selecteren van een sjabloon zal ertoe leiden dat een automatische reactie wordt gestuurd naar de klant/contact wanneer een nieuw ticket wordt aangemaakt',
- 'update_ticket_template_id' => 'Bijgewerkt ticket',
- 'update_ticket_autoresponder_help' => 'Het selecteren van een sjabloon zal ertoe leiden dat een automatische reactie wordt verstuurd naar de klant/contact wanneer een ticket wordt bijgewerkt',
- 'close_ticket_template_id' => 'Gesloten ticket',
- 'close_ticket_autoresponder_help' => 'Het selecteren van een sjabloon zal ertoe leiden dat een automatische reactie wordt verstuurd naar de klant/contact wanneer een ticket wordt gesloten',
'default_priority' => 'Prioriteit',
'alert_new_comment_id' => 'Nieuwe opmerking',
'alert_comment_ticket_help' => 'Het selecteren van een sjabloon zal een notificatie versturen (naar de agent) zodra een opmerking is geplaatst.',
@@ -2954,8 +2947,6 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'alert_ticket_overdue_email' => 'Additionele notificaties bij achterstallige tickets',
'alert_ticket_overdue_email_help' => 'E-mailadressen gescheiden met een komma waar een notificatie in BCC naar gestuurd zal worden bij achterstallige tickets.',
'alert_ticket_overdue_agent_id_help' => 'Het selecteren van een sjabloon zal een notificatie versturen (naar de agent) zodra een ticket achterstallig wordt.',
- 'ticket_master' => 'Ticketmaster',
- 'ticket_master_help' => 'Heeft de mogelijkheid om tickets toe te wijzen en over te dragen. Toegewezen als de standaard agent voor alle tickets.',
'default_agent' => 'Agent',
'default_agent_help' => 'Zal bij selectie automatisch toegewezen worden aan alle binnenkomende tickets',
'show_agent_details' => 'Toon details van de agent bij reacties',
@@ -2963,43 +2954,19 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'remove_avatar' => 'Verwijder avatar',
'ticket_not_found' => 'Ticket niet gevonden',
'add_template' => 'Sjabloon toevoegen',
- 'ticket_template' => 'Ticketsjabloon',
- 'ticket_templates' => 'Ticketsjablonen',
'updated_ticket_template' => 'Ticketsjabloon gewijzigd',
'created_ticket_template' => 'Ticketsjabloon aangemaakt',
'archive_ticket_template' => 'Archiveer sjabloon',
'restore_ticket_template' => 'Herstel sjabloon',
'archived_ticket_template' => 'Het sjabloon is gearchiveerd',
'restored_ticket_template' => 'Het sjabloon is hersteld',
- 'close_reason' => 'Laat ons weten waarom u dit ticket sluit',
- 'reopen_reason' => 'Laat ons weten waarom u dit ticket heropent',
'enter_ticket_message' => 'Gelieve een bericht in te geven om het ticket aan te passen',
'show_hide_all' => 'Toon / verberg alles',
'subject_required' => 'Onderwerp vereist',
'mobile_refresh_warning' => 'Als u de mobiele app gebruikt, moet u mogelijk een volledige vernieuwing uitvoeren.',
- 'enable_proposals_for_background' => 'Een achtergrondafbeelding uploaden :link om de voorstellenmodule in te schakelen.',
- 'ticket_assignment' => 'Ticket :ticket_number is toegewezen aan :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number is bijgewerkt door klant :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number is aangemaakt.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number is bijgewerkt.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number is gesloten.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is nu achterstallig',
'merge' => 'Samenvoegen',
'merged' => 'Samengevoegd',
'agent' => 'Agent',
- 'parent_ticket' => 'Hoofdticket',
- 'linked_tickets' => 'Gelinkte tickets',
- 'merge_prompt' => 'Voer ticketnummer in om met samen te voegen',
- 'merge_from_to' => 'Ticket #:old_ticket is samengevoegd met ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket :#old_ticket is gesloten en samengevoegd met ticket #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket is gesloten en samengevoegd met dit ticket',
- 'merge_placeholder' => 'Ticket #:ticket samenvoegen met het volgende ticket',
- 'select_ticket' => 'Selecteer een ticket',
- 'new_internal_ticket' => 'Nieuw intern ticket',
- 'internal_ticket' => 'Intern ticket',
- 'create_ticket' => 'Creëer ticket',
- 'allow_inbound_email_tickets_external' => 'Nieuwe tickets per e-mail (klant)',
- 'allow_inbound_email_tickets_external_help' => 'Laat klanten per e-mail nieuwe tickets aanmaken',
'include_in_filter' => 'Opnemen in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5334,7 +5301,8 @@ Email: :email
',
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/pt_BR/texts.php b/lang/pt_BR/texts.php
index ecb0ffea95e5..0679b128c9da 100644
--- a/lang/pt_BR/texts.php
+++ b/lang/pt_BR/texts.php
@@ -2931,13 +2931,6 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
'mime_types' => 'Tipos MIME',
'mime_types_placeholder' => '.pdf , .docx , .jpg',
'mime_types_help' => 'Lista separada por vírgulas de tipos MIME permitidos, deixe em branco para TODOS',
- 'ticket_number_start_help' => 'O número do Ticket precisa ser maior que o número de ticket atual',
- 'new_ticket_template_id' => 'Novo Ticket',
- 'new_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Ticket for criado',
- 'update_ticket_template_id' => 'Ticket atualizado',
- 'update_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Ticket for atualizado',
- 'close_ticket_template_id' => 'Ticket fechado',
- 'close_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Ticket for fechado',
'default_priority' => 'Prioridade Padrão',
'alert_new_comment_id' => 'Novo comentário',
'alert_comment_ticket_help' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um novo comentário for feito.',
@@ -2954,8 +2947,6 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
'alert_ticket_overdue_email' => 'Notificações adicionais de ticket atrasado',
'alert_ticket_overdue_email_help' => 'Emails separados por vírgulas para cco após atraso de ticket. ',
'alert_ticket_overdue_agent_id_help' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um ticket atrasar. ',
- 'ticket_master' => 'Gestor de Tickets',
- 'ticket_master_help' => 'Possui a habilidade de atribuir e transferir Tickets. Atribuído como o agente padrão para todos os Tickets.',
'default_agent' => 'Agente Padrão',
'default_agent_help' => 'Se selecionado irá automaticamente ser selecionado para todos os tickets entrantes',
'show_agent_details' => 'Exibir detalhes do agente nas respostas',
@@ -2963,43 +2954,19 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
'remove_avatar' => 'Remover avatar',
'ticket_not_found' => 'Ticket não encontrado',
'add_template' => 'Adicionar Modelo',
- 'ticket_template' => 'Modelo de Ticket',
- 'ticket_templates' => 'Modelos de Tickets',
'updated_ticket_template' => 'Modelo de Ticket Atualizado',
'created_ticket_template' => 'Modelo de Ticket Criado',
'archive_ticket_template' => 'Arquivar Modelo',
'restore_ticket_template' => 'Restaurar Modelo',
'archived_ticket_template' => 'Modelo arquivado com sucesso',
'restored_ticket_template' => 'Modelo restaurado com sucesso',
- 'close_reason' => 'Conte-nos o motivo de você estar fechando este ticket',
- 'reopen_reason' => 'Conte-nos o motivo de você estar reabrindo este ticket',
'enter_ticket_message' => 'Por favor digite uma mensagem para atualizar o ticket',
'show_hide_all' => 'Exibir / Esconder tudo',
'subject_required' => 'Assunto obrigatório',
'mobile_refresh_warning' => 'Se você está utilizando o app móvel você pode precisar executar um refresh total.',
- 'enable_proposals_for_background' => 'Para enviar uma imagem de fundo :link para habilitar o módulo de propostas',
- 'ticket_assignment' => 'Ticket :ticket_number foi atribuído para :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number foi atualizado pelo cliente :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number foi criado.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number foi atualizado.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number foi fechado.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number agora está atrasado',
'merge' => 'Unir',
'merged' => 'Unidos',
'agent' => 'Agente',
- 'parent_ticket' => 'Ticket Pai',
- 'linked_tickets' => 'Tickets Vinculados',
- 'merge_prompt' => 'Digite o número do ticket para união',
- 'merge_from_to' => 'Ticket #:old_ticket unido ao Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket foi fechado e unido ao Ticket #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket foi fechado e unido a este ticket',
- 'merge_placeholder' => 'Unir ticket #:ticket no seguinte ticket',
- 'select_ticket' => 'Selecione um Ticket',
- 'new_internal_ticket' => 'Novo ticket interno',
- 'internal_ticket' => 'Ticket interno',
- 'create_ticket' => 'Criar ticket',
- 'allow_inbound_email_tickets_external' => 'Novos Tickets por email (Cliente)',
- 'allow_inbound_email_tickets_external_help' => 'Permitir que clientes criem novos Tickets por email',
'include_in_filter' => 'Incluir no filtro',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5331,7 +5298,8 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/pt_PT/texts.php b/lang/pt_PT/texts.php
index 656264d2df44..912be7d90d4d 100644
--- a/lang/pt_PT/texts.php
+++ b/lang/pt_PT/texts.php
@@ -2933,13 +2933,6 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'mime_types' => 'Tipos MIME',
'mime_types_placeholder' => '.pdf , .docx , .jpg',
'mime_types_help' => 'Lista separada por vírgulas de tipos MIME permitidos, deixe em branco para TODOS',
- 'ticket_number_start_help' => 'O número do Bilhete precisa ser maior que o número de Bilhete atual',
- 'new_ticket_template_id' => 'Novo Bilhete',
- 'new_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo bilhete for criado',
- 'update_ticket_template_id' => 'Bilhete atualizado',
- 'update_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Bilhete for atualizado',
- 'close_ticket_template_id' => 'Bilhete fechado',
- 'close_ticket_autoresponder_help' => 'Selecionar um modelo enviará uma resposta automática para um cliente/contato quando um novo Bilhete for fechado',
'default_priority' => 'Prioridade Padrão',
'alert_new_comment_id' => 'Novo comentário',
'alert_comment_ticket_help' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um novo comentário for feito.',
@@ -2956,8 +2949,6 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'alert_ticket_overdue_email' => 'Notificações adicionais de ticket atrasado',
'alert_ticket_overdue_email_help' => 'Emails separados por vírgulas para bcc após atraso de ticket. ',
'alert_ticket_overdue_agent_id_help' => 'Selecionar um modelo enviará uma notificação (para um agente) quando um ticket atrasar. ',
- 'ticket_master' => 'Gestor de Tickets',
- 'ticket_master_help' => 'Possui a habilidade de atribuir e transferir Tickets. Atribuído como o agente padrão para todos os Tickets.',
'default_agent' => 'Agente Padrão',
'default_agent_help' => 'Se selecionado irá automaticamente ser selecionado para todos os tickets entrantes',
'show_agent_details' => 'Exibir detalhes do agente nas respostas',
@@ -2965,43 +2956,19 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem
'remove_avatar' => 'Remover avatar',
'ticket_not_found' => 'Ticket não encontrado',
'add_template' => 'Adicionar Modelo',
- 'ticket_template' => 'Modelo de Ticket',
- 'ticket_templates' => 'Modelos de Tickets',
'updated_ticket_template' => 'Modelo de Ticket Atualizado',
'created_ticket_template' => 'Modelo de Ticket Criado',
'archive_ticket_template' => 'Arquivar Modelo',
'restore_ticket_template' => 'Restaurar Modelo',
'archived_ticket_template' => 'Modelo arquivado com sucesso',
'restored_ticket_template' => 'Modelo restaurado com sucesso',
- 'close_reason' => 'Conte-nos o motivo para o fecho deste ticket',
- 'reopen_reason' => 'Conte-nos o motivo para a reabertura deste ticket',
'enter_ticket_message' => 'Por favor introduza uma mensagem para atualizar o ticket',
'show_hide_all' => 'Exibir / Esconder tudo',
'subject_required' => 'Assunto obrigatório',
'mobile_refresh_warning' => 'Se estiver a utilizar a aplicação móvel pode ser necessário realizar um recarregamento total.',
- 'enable_proposals_for_background' => 'Para enviar uma imagem de fundo :link para habilitar o módulo de propostas',
- 'ticket_assignment' => 'Ticket :ticket_number foi atribuído para :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number foi atualizado pelo cliente :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number foi criado.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number foi atualizado.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number foi fechado.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number agora está atrasado',
'merge' => 'Unir',
'merged' => 'Unidos',
'agent' => 'Agente',
- 'parent_ticket' => 'Ticket Principal',
- 'linked_tickets' => 'Tickets Vinculados',
- 'merge_prompt' => 'Digite o número do ticket para união',
- 'merge_from_to' => 'Ticket #:old_ticket unido ao Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket foi fechado e unido ao Ticket #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket foi fechado e unido a este ticket',
- 'merge_placeholder' => 'Unir ticket #:ticket no seguinte ticket',
- 'select_ticket' => 'Selecione um Ticket',
- 'new_internal_ticket' => 'Novo ticket interno',
- 'internal_ticket' => 'Ticket interno',
- 'create_ticket' => 'Criar ticket',
- 'allow_inbound_email_tickets_external' => 'Novos Tickets por email (Cliente)',
- 'allow_inbound_email_tickets_external_help' => 'Permitir que clientes criem novos Tickets por email',
'include_in_filter' => 'Incluir no filtro',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5334,7 +5301,8 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/ro/texts.php b/lang/ro/texts.php
index 6e78c5006972..268f088212ca 100644
--- a/lang/ro/texts.php
+++ b/lang/ro/texts.php
@@ -2935,13 +2935,6 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
'mime_types' => 'Tipuri de Mime',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Listă separață prin virgule pentru tipuri de Mime permise. Nu scrieți nimic, pentru a selecta totul',
- 'ticket_number_start_help' => 'Numărul tichetului trebuie să fie mai mare decât numărul actual al tichetului',
- 'new_ticket_template_id' => 'Tichet nou',
- 'new_ticket_autoresponder_help' => 'Selectând un șablon, veți trimite un răspuns automat clientului/contactului, când este creat un tichet nou.',
- 'update_ticket_template_id' => 'Tichet actualizat',
- 'update_ticket_autoresponder_help' => 'Selectând un șablon, veți trimite un răspuns automat clientului/contactului, când este actualizat un tichet.',
- 'close_ticket_template_id' => 'Tichet inchis',
- 'close_ticket_autoresponder_help' => 'Selectând un șablon, veți trimite un răspuns automat clientului/contactului, când este închis un tichet.',
'default_priority' => 'Prioritate implicita',
'alert_new_comment_id' => 'Comentariu nou',
'alert_comment_ticket_help' => 'Selectarea unui sablon va trimite o notificare ( agentului ) cand apare un comentariu nou.',
@@ -2958,8 +2951,6 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
'alert_ticket_overdue_email' => 'Notificări adiționale pentru tichetele scadente',
'alert_ticket_overdue_email_help' => 'Email-uri separate prin virgule pentru BCC în tichete scadente.',
'alert_ticket_overdue_agent_id_help' => 'Selectând un șablon, veți trimite o notificare (agentului), când un tichet a trecut de data limită.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Poate să atribuie și să transfere tichete. Desemnat ca agent implicit pentru toate tichetele.',
'default_agent' => 'Agent implicit',
'default_agent_help' => 'Dacă este selectat, va atribui automat toate tichetele',
'show_agent_details' => 'Afișați detaliile agenților în răspunsuri',
@@ -2967,43 +2958,19 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
'remove_avatar' => 'Îndepărtați avatar',
'ticket_not_found' => 'Tichetul nu a fost găsit',
'add_template' => 'Adăugați un șablon',
- 'ticket_template' => 'Șablon pentru tichete',
- 'ticket_templates' => 'Șabloane pentru tichete',
'updated_ticket_template' => 'Actualizați șablonul pentru tichete',
'created_ticket_template' => 'Creați un șablon pentru tichete',
'archive_ticket_template' => 'Arhivați șablonul',
'restore_ticket_template' => 'Restabiliți șablonul',
'archived_ticket_template' => 'Șablonul a fost arhivat cu succes',
'restored_ticket_template' => 'Șablonul a fost restabilit cu succes',
- 'close_reason' => 'Am dori să aflăm care este motivul pentru care închideți acest tichet',
- 'reopen_reason' => 'Am dori să aflăm care este motivul pentru care redeschideți acest tichet',
'enter_ticket_message' => 'Introduceți un mesaj pentru a actualiza tichetul',
'show_hide_all' => 'Arată / Ascunde tot',
'subject_required' => 'Subiect Obligatoriu',
'mobile_refresh_warning' => 'În cazul în care utilizați aplicația pentru telefon, este posibil să fie nevoie să reîncărcați pagina complet.',
- 'enable_proposals_for_background' => 'Pentru a încărca o imagine de fundal, :link pentru a activa modulul pentru propuneri.',
- 'ticket_assignment' => 'Tichetul :ticket_number i-a fost atribuit (lui) :agent',
- 'ticket_contact_reply' => 'Tichetul :ticket_number a fost actualizat de clientul :contact',
- 'ticket_new_template_subject' => 'Tichetul :ticket_number a fost creat.',
- 'ticket_updated_template_subject' => 'Tichetul :ticket_number a fost actualizat.',
- 'ticket_closed_template_subject' => 'Tichetul :ticket_number a fost închis.',
- 'ticket_overdue_template_subject' => 'Tichetul :ticket_number a depășit data limită.',
'merge' => 'Îmbinați',
'merged' => 'Îmbinate',
'agent' => 'Agent',
- 'parent_ticket' => 'Tichet Părinte',
- 'linked_tickets' => 'Tichete conexe',
- 'merge_prompt' => 'Introduceți numărul tichetului pentru a-l îmbina cu',
- 'merge_from_to' => 'Tichetul #:old_ticket a fost contopit cu Tichetul #:new_ticket ',
- 'merge_closed_ticket_text' => 'Tichetul #:old_ticket a fost închis și comasat în Tichet #:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Tichetul #:old_ticket a fost închis și comasat în acest tichet',
- 'merge_placeholder' => 'Comasați tichetul #:ticket în următorul tichet',
- 'select_ticket' => 'Selectează Tichet',
- 'new_internal_ticket' => 'Adaugă Tichet Intern',
- 'internal_ticket' => 'Tichet Intern',
- 'create_ticket' => 'Crează Tichet',
- 'allow_inbound_email_tickets_external' => 'Tichete noi prin email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Permiteți clienților să creeze tichete noi prin email',
'include_in_filter' => 'Includeți în filtru',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5335,7 +5302,8 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/ru_RU/texts.php b/lang/ru_RU/texts.php
index 935fcf185522..880b898e5670 100644
--- a/lang/ru_RU/texts.php
+++ b/lang/ru_RU/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Логотип успешно удалён',
'sent_message' => 'Сообщение успешно отправлено',
'invoice_error' => 'Обязательно выберите клиента и исправьте ошибки.',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Произошла ошибка при обработке вашего платежа. Пожалуйста, повторите попытку позже.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Пожалуйста, подтвердите свой адрес электронной почты, :link, чтобы отправить письмо с подтверждением ещё раз.',
@@ -2696,7 +2696,7 @@ $lang = array(
'no_assets' => 'No images, drag to upload',
'add_image' => 'Add Image',
'select_image' => 'Select Image',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Delete Image',
'delete_image_help' => 'Warning: deleting the image will remove it from all proposals.',
'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
@@ -2935,13 +2935,6 @@ $lang = array(
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Ticket number must be greater than the current ticket number',
- 'new_ticket_template_id' => 'Новый тикет',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Updated ticket',
- 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated',
- 'close_ticket_template_id' => 'закрытый тикет',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'ПРиоритет по-умолчанию',
'alert_new_comment_id' => 'Новый комментарий',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2958,8 +2951,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2967,43 +2958,19 @@ $lang = array(
'remove_avatar' => 'Удалить аватар',
'ticket_not_found' => 'Тикет не найден',
'add_template' => 'Добавить Шаблон',
- 'ticket_template' => 'Шаблон Тикета',
- 'ticket_templates' => 'Шаблоны Тикетов',
'updated_ticket_template' => 'Updated Ticket Template',
'created_ticket_template' => 'Created Ticket Template',
'archive_ticket_template' => 'Архивировать шаблон',
'restore_ticket_template' => 'Восстановить шаблон',
'archived_ticket_template' => 'Successfully archived template',
'restored_ticket_template' => 'Successfully restored template',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Пожалуйста, введите сообщение для того чтобы обновить тикет',
'show_hide_all' => 'Показать / Скрыть всё',
'subject_required' => 'Требуется ввести Тему',
'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
- 'enable_proposals_for_background' => 'To upload a background image :link to enable the proposals module.',
- 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number has been updated by client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number has been created.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue',
'merge' => 'Объединить',
'merged' => 'Обединён',
'agent' => 'Агент',
- 'parent_ticket' => 'Родительский Тикет',
- 'linked_tickets' => 'Связзвнные тикеты',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket',
- 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket',
- 'select_ticket' => 'Выбирите тикет',
- 'new_internal_ticket' => 'Новый внутренний тикет',
- 'internal_ticket' => 'Внутренний тикет',
- 'create_ticket' => 'Создать Тикет',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4030,7 +3997,7 @@ $lang = array(
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4438,7 +4405,7 @@ $lang = array(
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5148,7 +5115,7 @@ $lang = array(
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5298,6 +5265,45 @@ $lang = array(
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/sk/texts.php b/lang/sk/texts.php
index bdc5336eb90d..5f001c7e7359 100644
--- a/lang/sk/texts.php
+++ b/lang/sk/texts.php
@@ -2921,13 +2921,6 @@ $lang = array(
'mime_types' => 'Mime typy',
'mime_types_placeholder' => '.pdf, .docx, .jpg',
'mime_types_help' => 'Čiarkami oddelený zoznam povolených typov MIME, ponechajte prázdne pre všetky',
- 'ticket_number_start_help' => 'Číslo tiketu musí byť väčšie ako aktuálne číslo tiketu',
- 'new_ticket_template_id' => 'Nový tiket',
- 'new_ticket_autoresponder_help' => 'Výberom šablóny sa pri vytvorení nového tiketu odošle automatická odpoveď klientovi/kontaktu',
- 'update_ticket_template_id' => 'Aktualizovaný tiket',
- 'update_ticket_autoresponder_help' => 'Výberom šablóny sa po aktualizácii lístka odošle automatická odpoveď klientovi/kontaktu',
- 'close_ticket_template_id' => 'Uzavretý tiket',
- 'close_ticket_autoresponder_help' => 'Výberom šablóny sa po zatvorení tiketu odošle automatická odpoveď klientovi/kontaktu',
'default_priority' => 'Predvolená priorita',
'alert_new_comment_id' => 'Nový komentár',
'alert_comment_ticket_help' => 'Výberom šablóny sa odošle upozornenie (agentovi) po vytvorení komentára.',
@@ -2944,8 +2937,6 @@ $lang = array(
'alert_ticket_overdue_email' => 'Ďalšie upozornenia na tikety po splatnosti',
'alert_ticket_overdue_email_help' => 'E-maily oddelené čiarkami na skrytú kópiu na lístku po splatnosti.',
'alert_ticket_overdue_agent_id_help' => 'Výberom šablóny sa odošle upozornenie (agentovi), keď sa tiket bude po splatnosti.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Má schopnosť prideľovať a prenášať tikety. Priradený ako predvolený agent pre všetky tikety.',
'default_agent' => 'Predvolený agent',
'default_agent_help' => 'Ak je vybraté, bude automaticky priradené ku všetkým prichádzajúcim tiketom',
'show_agent_details' => 'Zobraziť podrobnosti o agentovi v odpovediach',
@@ -2953,43 +2944,19 @@ $lang = array(
'remove_avatar' => 'Odstrániť avatara',
'ticket_not_found' => 'Tiket sa nenašiel',
'add_template' => 'Pridať šablónu',
- 'ticket_template' => 'Šablóna tiketu',
- 'ticket_templates' => 'Šablóny tiketu',
'updated_ticket_template' => 'Aktualizovaná šablóna tiketu',
'created_ticket_template' => 'Vytvorená šablóna tiketu',
'archive_ticket_template' => 'Archivovať šablónu',
'restore_ticket_template' => 'Obnoviť šablónu',
'archived_ticket_template' => 'Šablóna úspešne archivovaná',
'restored_ticket_template' => 'Šablóna úspešne obnovená',
- 'close_reason' => 'Dajte nám vedieť, prečo zatvárate tento tiket',
- 'reopen_reason' => 'Dajte nám vedieť, prečo znovu otvárate tento lístok',
'enter_ticket_message' => 'Ak chcete aktualizovať tiket, zadajte správu',
'show_hide_all' => 'Zobraziť / Skryť všetko',
'subject_required' => 'Vyžaduje sa predmet',
'mobile_refresh_warning' => 'Ak používate mobilnú aplikáciu, možno budete musieť vykonať úplné obnovenie.',
- 'enable_proposals_for_background' => 'Ak chcete nahrať obrázok na pozadí :link na aktiváciu modulu návrhov.',
- 'ticket_assignment' => 'Tiket :ticket_number bol priradený :agent',
- 'ticket_contact_reply' => 'Tiket :ticket_number bol aktualizovaný klientom :contact',
- 'ticket_new_template_subject' => 'Tiket :ticket_number bol vytvorený',
- 'ticket_updated_template_subject' => 'Tiket :ticket_number bol aktualizovaný.',
- 'ticket_closed_template_subject' => 'Tiket :ticket_number bol uzatvorený.',
- 'ticket_overdue_template_subject' => 'Tiket :ticket_number je teraz po splatnosti',
'merge' => 'Spojiť',
'merged' => 'Spojené',
'agent' => 'Agent',
- 'parent_ticket' => 'Nadradený tiket',
- 'linked_tickets' => 'Prepojené tikety',
- 'merge_prompt' => 'Zadajte číslo tiketu na zlúčenie',
- 'merge_from_to' => 'Tiket #:old_ticket sa zlúčil do tiketu #:new_ticket',
- 'merge_closed_ticket_text' => 'Tiket #:old_ticket bol uzavretý a zlúčený do Ticketu#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Tiket #:old_ticket bol uzavretý a zlúčený s týmto lístkom',
- 'merge_placeholder' => 'Zlúčte tiket #:ticket do nasledujúceho lístka',
- 'select_ticket' => 'Vyberte tiket',
- 'new_internal_ticket' => 'Nový interný tiket',
- 'internal_ticket' => 'Interný tiket',
- 'create_ticket' => 'Vytvoriť tiket',
- 'allow_inbound_email_tickets_external' => 'Nové tikety cez email (zákazník)',
- 'allow_inbound_email_tickets_external_help' => 'Povoliť zákazníkom vytvárať tikety cez email',
'include_in_filter' => 'Zahrnút do filtra',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5321,7 +5288,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/sl/texts.php b/lang/sl/texts.php
index b0a586907305..f818a5ca1d67 100644
--- a/lang/sl/texts.php
+++ b/lang/sl/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Uspešno odstranjen logotip',
'sent_message' => 'Sporočilo uspešno poslano',
'invoice_error' => 'Prosim izberite stranko in popravite napake',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Pri izvedbi plačila je prišlo do napake. Prosim poizkusite ponovno.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Prosim potrdite vaš elektronski naslov, :link za ponovno pošiljanje potrditvenega sporočila.',
@@ -2696,7 +2696,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'no_assets' => 'Ni slik, povleci za upload',
'add_image' => 'Dodaj Sliko',
'select_image' => 'Izberi Sliko',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Zbriši Sliko',
'delete_image_help' => 'Opozorilo: če odstranite sliko, bo odstranjena iz vseh ponudb.',
'amount_variable_help' => 'Opomba: na računu v polju $amount /znesek računa/ bo uporabjena vrednost iz polja "partial/deposit". V kolikor je nastavitev drugačna se bo uporabila skupna vrednost računa.',
@@ -2935,13 +2935,6 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'mime_types' => 'Mime types',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Comma separated list of allowed mime types, leave blank for all',
- 'ticket_number_start_help' => 'Št. podpornega zahtevka mora biti večja od trenutnega podpornega zahtevka',
- 'new_ticket_template_id' => 'Novi podproni zahtevek',
- 'new_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a new ticket is created',
- 'update_ticket_template_id' => 'Posodabi podporni zahtevek',
- 'update_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is updated',
- 'close_ticket_template_id' => 'Zaprt podporni zahtevek',
- 'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
'default_priority' => 'Default priority',
'alert_new_comment_id' => 'New comment',
'alert_comment_ticket_help' => 'Selecting a template will send a notification (to agent) when a comment is made.',
@@ -2958,8 +2951,6 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'alert_ticket_overdue_email' => 'Additional overdue ticket notifications',
'alert_ticket_overdue_email_help' => 'Comma separated emails to bcc on ticket overdue.',
'alert_ticket_overdue_agent_id_help' => 'Selecting a template will send a notification (to agent) when a ticket becomes overdue.',
- 'ticket_master' => 'Ticket Master',
- 'ticket_master_help' => 'Has the ability to assign and transfer tickets. Assigned as the default agent for all tickets.',
'default_agent' => 'Default Agent',
'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
'show_agent_details' => 'Show agent details on responses',
@@ -2967,43 +2958,19 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'remove_avatar' => 'Remove avatar',
'ticket_not_found' => 'Ticket not found',
'add_template' => 'Add Template',
- 'ticket_template' => 'Ticket Template',
- 'ticket_templates' => 'Ticket Templates',
'updated_ticket_template' => 'Updated Ticket Template',
'created_ticket_template' => 'Created Ticket Template',
'archive_ticket_template' => 'Archive Template',
'restore_ticket_template' => 'Restore Template',
'archived_ticket_template' => 'Successfully archived template',
'restored_ticket_template' => 'Successfully restored template',
- 'close_reason' => 'Let us know why you are closing this ticket',
- 'reopen_reason' => 'Let us know why you are reopening this ticket',
'enter_ticket_message' => 'Please enter a message to update the ticket',
'show_hide_all' => 'Show / Hide all',
'subject_required' => 'Subject required',
'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
- 'enable_proposals_for_background' => 'To upload a background image :link to enable the proposals module.',
- 'ticket_assignment' => 'Ticket :ticket_number has been assigned to :agent',
- 'ticket_contact_reply' => 'Ticket :ticket_number has been updated by client :contact',
- 'ticket_new_template_subject' => 'Ticket :ticket_number has been created.',
- 'ticket_updated_template_subject' => 'Ticket :ticket_number has been updated.',
- 'ticket_closed_template_subject' => 'Ticket :ticket_number has been closed.',
- 'ticket_overdue_template_subject' => 'Ticket :ticket_number is now overdue',
'merge' => 'Merge',
'merged' => 'Merged',
'agent' => 'Agent',
- 'parent_ticket' => 'Parent Ticket',
- 'linked_tickets' => 'Linked Tickets',
- 'merge_prompt' => 'Enter ticket number to merge into',
- 'merge_from_to' => 'Ticket #:old_ticket merged into Ticket #:new_ticket',
- 'merge_closed_ticket_text' => 'Ticket #:old_ticket was closed and merged into Ticket#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ticket #:old_ticket was closed and merged into this ticket',
- 'merge_placeholder' => 'Merge ticket #:ticket into the following ticket',
- 'select_ticket' => 'Select Ticket',
- 'new_internal_ticket' => 'New internal ticket',
- 'internal_ticket' => 'Internal ticket',
- 'create_ticket' => 'Create ticket',
- 'allow_inbound_email_tickets_external' => 'New Tickets by email (Client)',
- 'allow_inbound_email_tickets_external_help' => 'Allow clients to create new tickets by email',
'include_in_filter' => 'Include in filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4030,7 +3997,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'user_detached' => 'User detached from company',
'create_webhook_failure' => 'Failed to create Webhook',
'payment_message_extended' => 'Thank you for your payment of :amount for :invoice',
- 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is bigger than $1 or currency equivalent.',
+ 'online_payments_minimum_note' => 'Note: Online payments are supported only if amount is larger than $1 or currency equivalent.',
'payment_token_not_found' => 'Payment token not found, please try again. If an issue still persist, try with another payment method',
'vendor_address1' => 'Vendor Street',
'vendor_address2' => 'Vendor Apt/Suite',
@@ -4438,7 +4405,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5148,7 +5115,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5298,6 +5265,45 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'rappen_rounding_help' => 'Round amount to 5 cents',
'assign_group' => 'Assign group',
'paypal_advanced_cards' => 'Advanced Card Payments',
+ 'local_domain_help' => 'EHLO domain (optional)',
+ 'port_help' => 'ie. 25,587,465',
+ 'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/sr/texts.php b/lang/sr/texts.php
index 616b5db0f574..03d8ab5136f5 100644
--- a/lang/sr/texts.php
+++ b/lang/sr/texts.php
@@ -199,7 +199,7 @@ $lang = array(
'removed_logo' => 'Logo je uspešno uklonjen',
'sent_message' => 'Poruka je uspešno poslata',
'invoice_error' => 'Molimo proverite da li ste odaberali klijenta i korigujte greške',
- 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!.',
+ 'limit_clients' => 'You\'ve hit the :count client limit on Free accounts. Congrats on your success!',
'payment_error' => 'Došlo je do greške pri procesiranju vaše uplate. Molimo pokušajte kasnije.',
'registration_required' => 'Registration Required',
'confirmation_required' => 'Molimo Vas da potvrdite adresu vaše e-pošte, :link za ponovno slanje konfirmacione e-poruke.',
@@ -2695,7 +2695,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'no_assets' => 'Nema slika, prevucite da biste otpremili',
'add_image' => 'Dodaj fotografiju',
'select_image' => 'Izaberi fotografiju',
- 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload images',
+ 'upgrade_to_upload_images' => 'Upgrade to the Enterprise Plan to upload files & images',
'delete_image' => 'Izbriši fotografiju',
'delete_image_help' => 'Upozorenje: brisanje fotografije će je ukloniti sa svih ponuda.',
'amount_variable_help' => 'Napomena: polje računa $amount će koristiti polje za avans/depozit ako postoji, inače će koristiti stanje računa.',
@@ -2934,13 +2934,6 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'mime_types' => 'Dozvoljeni tipovi',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Lista dozvoljenih tipova fajlova odvojenih zarezom, ostavite prazno za sve',
- 'ticket_number_start_help' => 'Broj tiketa mora biti viši od broja aktuelnog tiketa',
- 'new_ticket_template_id' => 'Novi tiket',
- 'new_ticket_autoresponder_help' => 'Izborom šablona će se poslati automatski odgovor klijentu/kontaktu prilikom kreiranja novog tiketa',
- 'update_ticket_template_id' => 'Ažuriran tiket',
- 'update_ticket_autoresponder_help' => 'Izbor šablona će poslati automatski odgovor klijentu/kontaktu kada se tiket ažurira',
- 'close_ticket_template_id' => 'Zatvoren tiket',
- 'close_ticket_autoresponder_help' => 'Izbor šablona će poslati automatski odgovor klijentu/kontaktu kada se tiket zatvori',
'default_priority' => 'Podrazumevani prioritet',
'alert_new_comment_id' => 'Novi komentar',
'alert_comment_ticket_help' => 'Izborom šablona će se poslati obaveštenje (agentu) prilikom unosa komentara.',
@@ -2957,8 +2950,6 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'alert_ticket_overdue_email' => 'Dodatna obaveštenja o zakasnelim tiketima',
'alert_ticket_overdue_email_help' => 'Adrese e-pošte za slanje bcc kopija prilikom zakasnelog tiketa, odvojene zarezom',
'alert_ticket_overdue_agent_id_help' => 'Izborom šablona će se poslati obaveštenje (agentu) kada je tiket zakasneo.',
- 'ticket_master' => 'Rukovodilac Tiketa',
- 'ticket_master_help' => 'Ima mogućnost da dodeljuje i prenosi tikete. Dodeljen kao podrazumevani agent za sve tikete.',
'default_agent' => 'Podrazumevani agent',
'default_agent_help' => 'Ako se izabere, biće automatski dodeljen za sve dolazeće tikete',
'show_agent_details' => 'Prikaži detalje agenta u odgovorima',
@@ -2966,43 +2957,19 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'remove_avatar' => 'Ukloni avatar',
'ticket_not_found' => 'Tiket nije pronađen',
'add_template' => 'Dodaj šablon',
- 'ticket_template' => 'Šablon tiketa',
- 'ticket_templates' => 'Šabloni tiketa',
'updated_ticket_template' => 'Šablon tiketa ažuriran',
'created_ticket_template' => 'Šablon tiketa kreiran',
'archive_ticket_template' => 'Arhiviraj šablon',
'restore_ticket_template' => 'Vrati šablon',
'archived_ticket_template' => 'Uspešno arhiviran šablon',
'restored_ticket_template' => 'Uspešno vraćen šablon',
- 'close_reason' => 'Upišite razlog zatvaranja tiketa',
- 'reopen_reason' => 'Upišite razlog ponovnog otvaranja tiketa',
'enter_ticket_message' => 'Unesite poruku da ažurirate tiket',
'show_hide_all' => 'Pokaži / Sakrij sve',
'subject_required' => 'Naslov je obavezan',
'mobile_refresh_warning' => 'Ukoliko koristite mobilnu aplikaciju, potrebno je da osvežite stranicu.',
- 'enable_proposals_for_background' => 'Za slanje pozadinske slike :link omogući modul za ponude.',
- 'ticket_assignment' => 'Tiket :ticket_number je dodeljen :agent',
- 'ticket_contact_reply' => 'Tiket :ticket_number je ažuriran od strane kontakta :contact',
- 'ticket_new_template_subject' => 'Tiket :ticket_number je kreiran.',
- 'ticket_updated_template_subject' => 'Tiket :ticket_number je ažuriran.',
- 'ticket_closed_template_subject' => 'Tiket :ticket_number je zatvoren.',
- 'ticket_overdue_template_subject' => 'Tiket :ticket_number je zakasneo',
'merge' => 'Spoji',
'merged' => 'Spojeni',
'agent' => 'Agent',
- 'parent_ticket' => 'Nadređeni tiket',
- 'linked_tickets' => 'Povezani tiketi',
- 'merge_prompt' => 'Unesite broj tiketa za spajanje',
- 'merge_from_to' => 'Tiket #:old_ticket je spojen u Tiket #:new_ticket',
- 'merge_closed_ticket_text' => 'Tiket #:old_ticket je zatvoren i spojen u Tiket #:new_ticket',
- 'merge_updated_ticket_text' => 'Tiket #:old_ticket je zatvoren i spojen u ovaj tiket',
- 'merge_placeholder' => 'Spoji tiket #:ticket u sledeći tiket',
- 'select_ticket' => 'Izaberi tiket',
- 'new_internal_ticket' => 'Novi interni tiket',
- 'internal_ticket' => 'Interni tiket',
- 'create_ticket' => 'Kreiraj tiket',
- 'allow_inbound_email_tickets_external' => 'Novi tiketi preko e-pošte (klijent)',
- 'allow_inbound_email_tickets_external_help' => 'Dozvoli klijentima da naprave nove tikete preko e-pošte',
'include_in_filter' => 'Dodaj u filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -4437,7 +4404,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'client_shipping_country' => 'Client Shipping Country',
'load_pdf' => 'Load PDF',
'start_free_trial' => 'Start Free Trial',
- 'start_free_trial_message' => 'Start your FREE 14 day trial of the pro plan',
+ 'start_free_trial_message' => 'Start your FREE 14 day trial of the Pro Plan',
'due_on_receipt' => 'Due on Receipt',
'is_paid' => 'Is Paid',
'age_group_paid' => 'Paid',
@@ -5147,7 +5114,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
'payment_receipt' => 'Payment Receipt # :number',
'load_template_description' => 'The template will be applied to following:',
- 'run_template' => 'Run template',
+ 'run_template' => 'Run Template',
'statement_design' => 'Statement Design',
'delivery_note_design' => 'Delivery Note Design',
'payment_receipt_design' => 'Payment Receipt Design',
@@ -5300,6 +5267,42 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'local_domain_help' => 'EHLO domain (optional)',
'port_help' => 'ie. 25,587,465',
'host_help' => 'ie. smtp.gmail.com',
+ 'always_show_required_fields' => 'Allows show required fields form',
+ 'always_show_required_fields_help' => 'Displays the required fields form always at checkout',
+ 'advanced_cards' => 'Advanced Cards',
+ 'activity_140' => 'Statement sent to :client',
+ 'invoice_net_amount' => 'Invoice Net Amount',
+ 'round_to_minutes' => 'Round To Minutes',
+ '1_second' => '1 Second',
+ '1_minute' => '1 Minute',
+ '5_minutes' => '5 Minutes',
+ '15_minutes' => '15 Minutes',
+ '30_minutes' => '30 Minutes',
+ '1_hour' => '1 Hour',
+ '1_day' => '1 Day',
+ 'round_tasks' => 'Task Rounding Direction',
+ 'round_tasks_help' => 'Round task times up or down.',
+ 'direction' => 'Direction',
+ 'round_up' => 'Round Up',
+ 'round_down' => 'Round Down',
+ 'task_round_to_nearest' => 'Round To Nearest',
+ 'task_round_to_nearest_help' => 'The interval to round the task to.',
+ 'bulk_updated' => 'Successfully updated data',
+ 'bulk_update' => 'Bulk Update',
+ 'calculate' => 'Calculate',
+ 'sum' => 'Sum',
+ 'money' => 'Money',
+ 'web_app' => 'Web App',
+ 'desktop_app' => 'Desktop App',
+ 'disconnected' => 'Disconnected',
+ 'reconnect' => 'Reconnect',
+ 'e_invoice_settings' => 'E-Invoice Settings',
+ 'btcpay_refund_subject' => 'Refund of your invoice via BTCPay',
+ 'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
+ 'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
+ 'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
-return $lang;
+return $lang;
\ No newline at end of file
diff --git a/lang/sv/texts.php b/lang/sv/texts.php
index 93a53489e012..b0a95827aad1 100644
--- a/lang/sv/texts.php
+++ b/lang/sv/texts.php
@@ -2942,13 +2942,6 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
'mime_types' => 'Mimetyper',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => 'Kommaseparerad lista över tillåtna mimetyper, lämna tomt för alla',
- 'ticket_number_start_help' => 'Ärendenumret måste vara större än det aktuella ärendenumret',
- 'new_ticket_template_id' => 'Nytt ärende',
- 'new_ticket_autoresponder_help' => 'När du väljer en mall skickas ett automatiskt svar till en kund/kontakt när ett nytt ärende skapas',
- 'update_ticket_template_id' => 'Uppdaterat ärende',
- 'update_ticket_autoresponder_help' => 'När du väljer en mall skickas ett automatiskt svar till en kund/kontakt när ett ärende uppdateras',
- 'close_ticket_template_id' => 'Avslutade ärenden',
- 'close_ticket_autoresponder_help' => 'När du väljer en mall skickas ett automatiskt svar till en kund/kontakt när ett ärende avslutas',
'default_priority' => 'Standardprioritet',
'alert_new_comment_id' => 'Ny kommentar',
'alert_comment_ticket_help' => 'När du väljer en mall skickas ett meddelande (till agenten) när en kommentar görs.',
@@ -2965,8 +2958,6 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
'alert_ticket_overdue_email' => 'Ytterligare ärende försenat notifikationer',
'alert_ticket_overdue_email_help' => 'Kommaseparerade e-postadresser till bcc vid försening av ärende.',
'alert_ticket_overdue_agent_id_help' => 'När du väljer en mall skickas ett meddelande (till agenten) när ett ärende blir försenat.',
- 'ticket_master' => 'Ärendeadministratör',
- 'ticket_master_help' => 'Har möjlighet att tilldela och överföra ärenden. Tilldelad som standardagent för alla ärenden.',
'default_agent' => 'Standardagent',
'default_agent_help' => 'Om det väljs kommer alla inkommande ärenden automatiskt att tilldelas',
'show_agent_details' => 'Visa agentinformation vid svar',
@@ -2974,43 +2965,19 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
'remove_avatar' => 'Ta bort avatar',
'ticket_not_found' => 'Ärendet hittades inte',
'add_template' => 'Lägg till mall',
- 'ticket_template' => 'Ärendemall',
- 'ticket_templates' => 'Ärendemallar',
'updated_ticket_template' => 'Uppdaterad ärendemall',
'created_ticket_template' => 'Skapad ärendemall',
'archive_ticket_template' => 'Akrivera mall',
'restore_ticket_template' => 'Återställ ärendemall',
'archived_ticket_template' => 'Mallen har arkiverats',
'restored_ticket_template' => 'Mallen har återställts',
- 'close_reason' => 'Låt oss veta varför du stänger ärendet',
- 'reopen_reason' => 'Låt oss veta varför du öpnnar ärendet igen',
'enter_ticket_message' => 'Ange ett meddelande för att uppdatera ärendet',
'show_hide_all' => 'Visa / Dölj alla',
'subject_required' => 'Ämne är obligatoriskt',
'mobile_refresh_warning' => 'Om du använder mobilappen kan du behöva göra en fullständig uppdatering.',
- 'enable_proposals_for_background' => 'För att ladda upp en bakgrundsbild :link för att aktivera förslag modulen',
- 'ticket_assignment' => 'Ärende :ticket_number har tilldelats till :agent',
- 'ticket_contact_reply' => 'Ärende :ticket_number har uppdaterats av :contact',
- 'ticket_new_template_subject' => 'Ärende :ticket_number har skapats.',
- 'ticket_updated_template_subject' => 'Ärende :ticket_number har uppdaterats.',
- 'ticket_closed_template_subject' => 'Ärende :ticket_number har stängts.',
- 'ticket_overdue_template_subject' => 'Ärende :ticket_number är nu försenat',
'merge' => 'Slå samman',
'merged' => 'Sammanslagen',
'agent' => 'Agent',
- 'parent_ticket' => 'Ärendeförälder',
- 'linked_tickets' => 'Länkat ärende',
- 'merge_prompt' => 'Ange ett ärendenummer som du vill slå ihop',
- 'merge_from_to' => 'Ärende #:old_ticket slogs samman med #:new_ticket',
- 'merge_closed_ticket_text' => 'Ärende #:old_ticket stängdes och slogs samman med ärende#:new_ticket - :subject',
- 'merge_updated_ticket_text' => 'Ärende #:old_ticket stängdes och slogs samman med detta ärende',
- 'merge_placeholder' => 'Slå ihop ärende #:ticket med följande ärende',
- 'select_ticket' => 'Välj ärende',
- 'new_internal_ticket' => 'Nytt internt ärende',
- 'internal_ticket' => 'Internt ärende',
- 'create_ticket' => 'Skapa ärende',
- 'allow_inbound_email_tickets_external' => 'Nya ärende via e-post (kund)',
- 'allow_inbound_email_tickets_external_help' => 'Tillåt kunder skapa nya ärende via e-post',
'include_in_filter' => 'Inkludera i filter',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5342,7 +5309,8 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/lang/zh_TW/texts.php b/lang/zh_TW/texts.php
index cc7cc58c5fe5..e12ddf13d2d0 100644
--- a/lang/zh_TW/texts.php
+++ b/lang/zh_TW/texts.php
@@ -2934,13 +2934,6 @@ $lang = array(
'mime_types' => 'Mime 類型',
'mime_types_placeholder' => '.pdf , .docx, .jpg',
'mime_types_help' => '逗號分隔的允許的 mime 類型清單, 為所有',
- 'ticket_number_start_help' => '票證號必須大於目前票證號',
- 'new_ticket_template_id' => '新票證',
- 'new_ticket_autoresponder_help' => '選擇範本將在建立新票證時向用戶/連絡人傳送自動回應',
- 'update_ticket_template_id' => '更新後的票證',
- 'update_ticket_autoresponder_help' => '選擇範本將在更新票證時向用戶/連絡人傳送自動回應',
- 'close_ticket_template_id' => '已關閉票證',
- 'close_ticket_autoresponder_help' => '選擇範本將在票證關閉時向用戶/連絡人傳送自動回應',
'default_priority' => '預設優先順序',
'alert_new_comment_id' => '新評論',
'alert_comment_ticket_help' => '選取範本將在做出評論時 (向代理) 傳送通知。',
@@ -2957,8 +2950,6 @@ $lang = array(
'alert_ticket_overdue_email' => '其它逾期票證通知',
'alert_ticket_overdue_email_help' => '逗號分隔的電子郵件給 bcc 的票證期。',
'alert_ticket_overdue_agent_id_help' => '選取範本將在票證過期時 (向代理) 傳送通知。',
- 'ticket_master' => '票證主人',
- 'ticket_master_help' => '有分配和傳送票證的能力。 將所有票證分配為給預設代理。',
'default_agent' => '預設代理',
'default_agent_help' => '如果選取,將自動分配給所有入站票證',
'show_agent_details' => '顯示回應的代理詳細資訊',
@@ -2966,43 +2957,19 @@ $lang = array(
'remove_avatar' => '刪除頭像',
'ticket_not_found' => '找不到票證',
'add_template' => '加入範本',
- 'ticket_template' => '票證範本',
- 'ticket_templates' => '票證範本',
'updated_ticket_template' => '已更新票證範本',
'created_ticket_template' => '已建立票證範本',
'archive_ticket_template' => '歸檔範本',
'restore_ticket_template' => '復原範本',
'archived_ticket_template' => '歸檔範本成功',
'restored_ticket_template' => '復原範本成功',
- 'close_reason' => '讓我們知道您為何要關閉這張票證',
- 'reopen_reason' => '讓我們知道您為何要重新開啟這張票證',
'enter_ticket_message' => '請輸入訊息以更新票證',
'show_hide_all' => '顯示/全部隱藏',
'subject_required' => '需要主旨',
'mobile_refresh_warning' => '若您使用行動 APP,您可能需要做一次重新整理。',
- 'enable_proposals_for_background' => '上傳一個背景圖片 :link 以啟用提案模組。',
- 'ticket_assignment' => '票證 :ticket_number 已分配給 :agent',
- 'ticket_contact_reply' => '用戶 :contact 已更新票證 :ticket_number',
- 'ticket_new_template_subject' => '票證 :ticket_number 已建立。',
- 'ticket_updated_template_subject' => '票證 :ticket_number 已更新。',
- 'ticket_closed_template_subject' => '票證 :ticket_number 已關閉。',
- 'ticket_overdue_template_subject' => '票證 :ticket_number 現在過期',
'merge' => '合併',
'merged' => '合併',
'agent' => '代理',
- 'parent_ticket' => '上層票證',
- 'linked_tickets' => '連結的票證',
- 'merge_prompt' => '輸入要合併到的票證號',
- 'merge_from_to' => '票證 #:old_ticket 合併到票證 #:new_ticket',
- 'merge_closed_ticket_text' => '票證 #:old_ticket 已關閉和合併成票證 #:new_ticket - :subject',
- 'merge_updated_ticket_text' => '票證 #:old_ticket 已關閉和合併到這張票證中',
- 'merge_placeholder' => '合併票證 #:ticket 到以下票證',
- 'select_ticket' => '選取票證',
- 'new_internal_ticket' => '新的內部票證',
- 'internal_ticket' => '內部票證',
- 'create_ticket' => '建立票證',
- 'allow_inbound_email_tickets_external' => '透過電子郵件的新票證 (用戶)',
- 'allow_inbound_email_tickets_external_help' => '允許用戶以電子郵件建立票證',
'include_in_filter' => '包含在篩選器',
'custom_client1' => ':VALUE',
'custom_client2' => ':VALUE',
@@ -5334,7 +5301,8 @@ $lang = array(
'btcpay_refund_body' => 'A refund intended for you has been issued. To claim it via BTCPay, please click on this link:',
'currency_mauritanian_ouguiya' => 'Mauritanian Ouguiya',
'currency_bhutan_ngultrum' => 'Bhutan Ngultrum',
- 'end_of_month' => 'End Of Month'
+ 'end_of_month' => 'End Of Month',
+ 'merge_e_invoice_to_pdf' => 'Merge E-Invoice and PDF',
);
return $lang;
\ No newline at end of file
diff --git a/routes/api.php b/routes/api.php
index a7a128edd0c7..c37077047156 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -155,6 +155,7 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale']
Route::get('activities', [ActivityController::class, 'index']);
Route::post('activities/entity', [ActivityController::class, 'entityActivity']);
+ Route::post('activities/notes', [ActivityController::class, 'note']);
Route::get('activities/download_entity/{activity}', [ActivityController::class, 'downloadHistoricalEntity']);
Route::post('charts/totals', [ChartController::class, 'totals'])->name('chart.totals');
diff --git a/tests/Feature/ActivityApiTest.php b/tests/Feature/ActivityApiTest.php
index 9b81136bb2d2..8b381a0dd821 100644
--- a/tests/Feature/ActivityApiTest.php
+++ b/tests/Feature/ActivityApiTest.php
@@ -40,6 +40,250 @@ class ActivityApiTest extends TestCase
}
+ public function testActivityInvoiceNotes()
+ {
+ $data = [
+ 'entity' => 'invoices',
+ 'entity_id' => $this->invoice->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+ public function testActivityCreditNotes()
+ {
+ $data = [
+ 'entity' => 'credits',
+ 'entity_id' => $this->credit->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+ public function testActivityQuoteNotes()
+ {
+ $data = [
+ 'entity' => 'quotes',
+ 'entity_id' => $this->quote->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+
+ public function testActivityClientNotes()
+ {
+ $data = [
+ 'entity' => 'clients',
+ 'entity_id' => $this->client->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+
+ public function testActivityRecurringInvoiceNotes()
+ {
+ $data = [
+ 'entity' => 'recurring_invoices',
+ 'entity_id' => $this->recurring_invoice->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+
+ public function testActivityExpenseNotes()
+ {
+ $data = [
+ 'entity' => 'expenses',
+ 'entity_id' => $this->expense->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+ public function testActivityRecurringExpenseNotes()
+ {
+ $data = [
+ 'entity' => 'recurring_expenses',
+ 'entity_id' => $this->recurring_expense->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+
+ public function testActivityVendorNotes()
+ {
+ $data = [
+ 'entity' => 'vendors',
+ 'entity_id' => $this->vendor->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+ public function testActivityPurchaseOrderNotes()
+ {
+ $data = [
+ 'entity' => 'purchase_orders',
+ 'entity_id' => $this->purchase_order->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+ public function testActivityTaskNotes()
+ {
+ $data = [
+ 'entity' => 'tasks',
+ 'entity_id' => $this->task->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+ public function testActivityProjectNotes()
+ {
+ $data = [
+ 'entity' => 'projects',
+ 'entity_id' => $this->project->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
+ public function testActivityPaymentNotes()
+ {
+ $data = [
+ 'entity' => 'payments',
+ 'entity_id' => $this->payment->hashed_id,
+ 'notes' => 'These are notes'
+ ];
+
+ $response = $this->withHeaders([
+ 'X-API-SECRET' => config('ninja.api_secret'),
+ 'X-API-TOKEN' => $this->token,
+ ])->postJson('/api/v1/activities/notes', $data);
+
+ $response->assertStatus(200);
+
+ $arr = $response->json();
+
+ $this->assertEquals('These are notes', $arr['data']['notes']);
+ }
+
public function testActivityEntity()
{
diff --git a/tests/Feature/Bank/BankTransactionRuleTest.php b/tests/Feature/Bank/BankTransactionRuleTest.php
index 8d86dd769baf..2b77c321870f 100644
--- a/tests/Feature/Bank/BankTransactionRuleTest.php
+++ b/tests/Feature/Bank/BankTransactionRuleTest.php
@@ -12,13 +12,14 @@
namespace Tests\Feature\Bank;
+use Tests\TestCase;
+use Tests\MockAccountData;
use App\Models\BankIntegration;
use App\Models\BankTransaction;
use App\Models\BankTransactionRule;
-use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Validation\ValidationException;
-use Tests\MockAccountData;
-use Tests\TestCase;
+use Illuminate\Routing\Middleware\ThrottleRequests;
+use Illuminate\Foundation\Testing\DatabaseTransactions;
class BankTransactionRuleTest extends TestCase
{
@@ -38,6 +39,54 @@ class BankTransactionRuleTest extends TestCase
$this->withoutExceptionHandling();
}
+
+
+
+
+ public function testMatchCreditOnInvoiceNumber()
+ {
+
+ $bi = BankIntegration::factory()->create([
+ 'company_id' => $this->company->id,
+ 'user_id' => $this->user->id,
+ 'account_id' => $this->account->id,
+ ]);
+
+ $hash = md5(time());
+
+ $bt = BankTransaction::factory()->create([
+ 'bank_integration_id' => $bi->id,
+ 'company_id' => $this->company->id,
+ 'user_id' => $this->user->id,
+ 'description' => $hash,
+ 'base_type' => 'CREDIT',
+ 'amount' => 100
+ ]);
+
+ $br = BankTransactionRule::factory()->create([
+ 'company_id' => $this->company->id,
+ 'user_id' => $this->user->id,
+ 'matches_on_all' => false,
+ 'auto_convert' => true,
+ 'applies_to' => 'CREDIT',
+ 'rules' => [
+ [
+ 'search_key' => '$invoice.number',
+ 'operator' => 'is',
+ ]
+ ]
+ ]);
+
+ $bt = $bt->refresh();
+
+ $debit_rules = $bt->company->debit_rules();
+
+ $bt->service()->processRules();
+
+ $bt = $bt->fresh();
+
+ }
+
public function testMatchingWithStripos()
{
$bt_value = strtolower(str_replace(" ", "", 'hello soldier'));
diff --git a/tests/Feature/Client/ClientMergeTest.php b/tests/Feature/Client/ClientMergeTest.php
index d6ff8069412a..a11ca2d0fcd5 100644
--- a/tests/Feature/Client/ClientMergeTest.php
+++ b/tests/Feature/Client/ClientMergeTest.php
@@ -44,7 +44,6 @@ class ClientMergeTest extends TestCase
parent::setUp();
$this->faker = Factory::create();
- $this->buildCache(true);
}
public function testSearchingForContacts()
diff --git a/tests/Feature/ClientPortal/CreditsTest.php b/tests/Feature/ClientPortal/CreditsTest.php
index 139694be153f..9f3f0e88fb65 100644
--- a/tests/Feature/ClientPortal/CreditsTest.php
+++ b/tests/Feature/ClientPortal/CreditsTest.php
@@ -40,7 +40,6 @@ class CreditsTest extends TestCase
parent::setUp();
$this->faker = Factory::create();
- $this->buildCache(true);
}
diff --git a/tests/Feature/ClientPortal/InvoicesTest.php b/tests/Feature/ClientPortal/InvoicesTest.php
index 3aab7fcd7c01..581dbf1d2405 100644
--- a/tests/Feature/ClientPortal/InvoicesTest.php
+++ b/tests/Feature/ClientPortal/InvoicesTest.php
@@ -37,7 +37,6 @@ class InvoicesTest extends TestCase
parent::setUp();
$this->faker = Factory::create();
- $this->buildCache(true);
}
public function testInvoiceTableFilters()
diff --git a/tests/Feature/Export/ArDetailReportTest.php b/tests/Feature/Export/ArDetailReportTest.php
index cfd3ddc6d899..c623936fb3db 100644
--- a/tests/Feature/Export/ArDetailReportTest.php
+++ b/tests/Feature/Export/ArDetailReportTest.php
@@ -45,8 +45,6 @@ class ArDetailReportTest extends TestCase
);
$this->withoutExceptionHandling();
-
- $this->buildCache(true);
}
diff --git a/tests/Feature/Export/ProductSalesReportTest.php b/tests/Feature/Export/ProductSalesReportTest.php
index f530acb3f3ec..8e86dd4c8f72 100644
--- a/tests/Feature/Export/ProductSalesReportTest.php
+++ b/tests/Feature/Export/ProductSalesReportTest.php
@@ -47,8 +47,6 @@ class ProductSalesReportTest extends TestCase
);
$this->withoutExceptionHandling();
-
- $this->buildCache(true);
}
public $company;
diff --git a/tests/Feature/Export/UserSalesReportTest.php b/tests/Feature/Export/UserSalesReportTest.php
index 2be1a220237e..76253abac29a 100644
--- a/tests/Feature/Export/UserSalesReportTest.php
+++ b/tests/Feature/Export/UserSalesReportTest.php
@@ -46,31 +46,6 @@ class UserSalesReportTest extends TestCase
$this->withoutExceptionHandling();
- /* Warm up the cache !*/
- $cached_tables = config('ninja.cached_tables');
-
- $this->artisan('db:seed --force');
-
- foreach ($cached_tables as $name => $class) {
- // check that the table exists in case the migration is pending
- if (! Schema::hasTable((new $class())->getTable())) {
- continue;
- }
- if ($name == 'payment_terms') {
- $orderBy = 'num_days';
- } elseif ($name == 'fonts') {
- $orderBy = 'sort_order';
- } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
- $orderBy = 'name';
- } else {
- $orderBy = 'id';
- }
- $tableData = $class::orderBy($orderBy)->get();
- if ($tableData->count()) {
- Cache::forever($name, $tableData);
- }
- }
-
}
public $company;
diff --git a/tests/Feature/QuoteTest.php b/tests/Feature/QuoteTest.php
index 25c6639e4b37..bc646a21dfdc 100644
--- a/tests/Feature/QuoteTest.php
+++ b/tests/Feature/QuoteTest.php
@@ -52,6 +52,7 @@ class QuoteTest extends TestCase
$this->withoutMiddleware(
ThrottleRequests::class
);
+
}
public function testQuoteDueDateInjectionValidationLayer()
@@ -216,19 +217,19 @@ class QuoteTest extends TestCase
'date' => now(),
'line_items' =>[
[
- 'type_id' => 2,
+ 'type_id' => '2',
'cost' => 200,
'quantity' => 2,
'notes' => 'Test200',
],
[
- 'type_id' => 2,
+ 'type_id' => '2',
'cost' => 100,
'quantity' => 1,
'notes' => 'Test100',
],
[
- 'type_id' => 1,
+ 'type_id' => '1',
'cost' => 10,
'quantity' => 1,
'notes' => 'Test',
diff --git a/tests/Integration/CompanyLedgerTest.php b/tests/Integration/CompanyLedgerTest.php
index 6ee1bce7f5e9..4086f00ba55d 100644
--- a/tests/Integration/CompanyLedgerTest.php
+++ b/tests/Integration/CompanyLedgerTest.php
@@ -57,7 +57,6 @@ class CompanyLedgerTest extends TestCase
$this->withoutExceptionHandling();
$this->artisan('db:seed --force');
- $this->buildCache(true);
$this->faker = \Faker\Factory::create();
$fake_email = $this->faker->email();
diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php
index 32b5e057e3f7..c2d047d2fec0 100644
--- a/tests/MockAccountData.php
+++ b/tests/MockAccountData.php
@@ -203,33 +203,6 @@ trait MockAccountData
{
config(['database.default' => config('ninja.db.default')]);
- // /* Warm up the cache !*/
- // $cached_tables = config('ninja.cached_tables');
-
- // Artisan::call('db:seed', [
- // '--force' => true
- // ]);
-
- // foreach ($cached_tables as $name => $class) {
- // // check that the table exists in case the migration is pending
- // if (! Schema::hasTable((new $class())->getTable())) {
- // continue;
- // }
- // if ($name == 'payment_terms') {
- // $orderBy = 'num_days';
- // } elseif ($name == 'fonts') {
- // $orderBy = 'sort_order';
- // } elseif (in_array($name, ['currencies', 'industries', 'languages', 'countries', 'banks'])) {
- // $orderBy = 'name';
- // } else {
- // $orderBy = 'id';
- // }
- // $tableData = $class::orderBy($orderBy)->get();
- // if ($tableData->count()) {
- // Cache::forever($name, $tableData);
- // }
- // }
-
$this->faker = \Faker\Factory::create();
$fake_email = $this->faker->email();
diff --git a/tests/TestCase.php b/tests/TestCase.php
index ffa0f237e183..a56725512a72 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -14,7 +14,5 @@ abstract class TestCase extends BaseTestCase
{
parent::setUp();
- $this->buildCache(true);
-
}
}
diff --git a/tests/Unit/CreditBalanceTest.php b/tests/Unit/CreditBalanceTest.php
index 68122c2739d0..af9b3a393fe1 100644
--- a/tests/Unit/CreditBalanceTest.php
+++ b/tests/Unit/CreditBalanceTest.php
@@ -33,8 +33,6 @@ class CreditBalanceTest extends TestCase
});
$this->makeTestData();
-
- $this->buildCache(true);
}
public function testCreditBalance()
diff --git a/tests/Unit/RecurringExpenseCloneTest.php b/tests/Unit/RecurringExpenseCloneTest.php
index 3c6d589d4297..9048e28b4882 100644
--- a/tests/Unit/RecurringExpenseCloneTest.php
+++ b/tests/Unit/RecurringExpenseCloneTest.php
@@ -33,8 +33,6 @@ class RecurringExpenseCloneTest extends TestCase
{
parent::setUp();
$this->faker = \Faker\Factory::create();
- $this->buildCache(true);
-
}
public function testBadBase64String()
diff --git a/tests/Unit/RedisVsDatabaseTest.php b/tests/Unit/RedisVsDatabaseTest.php
index e2b0af1b7015..8016627913bf 100644
--- a/tests/Unit/RedisVsDatabaseTest.php
+++ b/tests/Unit/RedisVsDatabaseTest.php
@@ -29,13 +29,15 @@ class RedisVsDatabaseTest extends TestCase
public function testRedisSpeed()
{
+ app('currencies');
+
$start = microtime(true);
$currencies = Cache::get('currencies');
- $currencies->filter(function ($item) {
+ $currencies->first(function ($item) {
return $item->id == 17;
- })->first();
+ });
nlog(microtime(true) - $start);