mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 04:07:32 -05:00 
			
		
		
		
	
						commit
						6906588c39
					
				@ -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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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')) {
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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');
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
 | 
			
		||||
@ -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');
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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',
 | 
			
		||||
 | 
			
		||||
@ -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 = '<p>$client<br><br>'.self::transformText('quote_reminder_message').'</p><div class="center">$view_button</div>';
 | 
			
		||||
 | 
			
		||||
        return $invoice_message;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static function emailVendorNotificationSubject()
 | 
			
		||||
    {
 | 
			
		||||
        return self::transformText('vendor_notification_subject');
 | 
			
		||||
 | 
			
		||||
@ -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';
 | 
			
		||||
 | 
			
		||||
@ -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];
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										28
									
								
								app/Events/Quote/QuoteReminderWasEmailed.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								app/Events/Quote/QuoteReminderWasEmailed.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Quote Ninja (https://Quoteninja.com).
 | 
			
		||||
 *
 | 
			
		||||
 * @link https://github.com/Quoteninja/Quoteninja source repository
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) 2024. Quote Ninja LLC (https://Quoteninja.com)
 | 
			
		||||
 *
 | 
			
		||||
 * @license https://www.elastic.co/licensing/elastic-license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace App\Events\Quote;
 | 
			
		||||
 | 
			
		||||
use App\Models\Company;
 | 
			
		||||
use App\Models\QuoteInvitation;
 | 
			
		||||
use Illuminate\Queue\SerializesModels;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class QuoteReminderWasEmailed.
 | 
			
		||||
 */
 | 
			
		||||
class QuoteReminderWasEmailed
 | 
			
		||||
{
 | 
			
		||||
    use SerializesModels;
 | 
			
		||||
 | 
			
		||||
    public function __construct(public QuoteInvitation $invitation, public Company $company, public array $event_vars, public string $template)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -186,7 +186,7 @@ class TransactionTransformer implements BankRevenueInterface
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            return Carbon::createFromFormat("d-m-Y", $input)->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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -332,7 +332,7 @@ class InvoiceItemSum
 | 
			
		||||
 | 
			
		||||
    public function setLineTotal($total)
 | 
			
		||||
    {
 | 
			
		||||
        $this->item->line_total = $total;
 | 
			
		||||
        $this->item->line_total = (float) $total;
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -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");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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 {
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,109 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Invoice Ninja (https://invoiceninja.com).
 | 
			
		||||
 *
 | 
			
		||||
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
 | 
			
		||||
 *
 | 
			
		||||
 * @license https://www.elastic.co/licensing/elastic-license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use App\DataMapper\EmailTemplateDefaults;
 | 
			
		||||
use Closure;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class StartupCheck.
 | 
			
		||||
 */
 | 
			
		||||
class StartupCheck
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle an incoming request.
 | 
			
		||||
     * @deprecated
 | 
			
		||||
     * @param Request $request
 | 
			
		||||
     * @param Closure $next
 | 
			
		||||
     *
 | 
			
		||||
     * @return mixed
 | 
			
		||||
     */
 | 
			
		||||
    public function handle(Request $request, Closure $next)
 | 
			
		||||
    {
 | 
			
		||||
        // $start = microtime(true);
 | 
			
		||||
 | 
			
		||||
        /* Make sure our cache is built */
 | 
			
		||||
        $cached_tables = config('ninja.cached_tables');
 | 
			
		||||
 | 
			
		||||
        foreach ($cached_tables as $name => $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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										79
									
								
								app/Http/Requests/Activity/StoreNoteRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								app/Http/Requests/Activity/StoreNoteRequest.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,79 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Invoice Ninja (https://invoiceninja.com).
 | 
			
		||||
 *
 | 
			
		||||
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
 | 
			
		||||
 *
 | 
			
		||||
 * @license https://www.elastic.co/licensing/elastic-license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Requests\Activity;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
use App\Http\Requests\Request;
 | 
			
		||||
use Illuminate\Validation\Rule;
 | 
			
		||||
 | 
			
		||||
class StoreNoteRequest extends Request
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Determine if the user is authorized to make this request.
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool
 | 
			
		||||
     */
 | 
			
		||||
    public function authorize(): bool
 | 
			
		||||
    {
 | 
			
		||||
        return $this->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);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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.
 | 
			
		||||
 | 
			
		||||
@ -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),
 | 
			
		||||
 | 
			
		||||
@ -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']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										71
									
								
								app/Jobs/Task/TaskAssigned.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								app/Jobs/Task/TaskAssigned.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,71 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Invoice Ninja (https://invoiceninja.com).
 | 
			
		||||
 *
 | 
			
		||||
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
 | 
			
		||||
 *
 | 
			
		||||
 * @license https://www.elastic.co/licensing/elastic-license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace App\Jobs\Task;
 | 
			
		||||
 | 
			
		||||
use App\Models\Task;
 | 
			
		||||
use App\Libraries\MultiDB;
 | 
			
		||||
use App\Services\Email\Email;
 | 
			
		||||
use Illuminate\Bus\Queueable;
 | 
			
		||||
use App\Services\Email\EmailObject;
 | 
			
		||||
use Illuminate\Mail\Mailables\Address;
 | 
			
		||||
use Illuminate\Queue\SerializesModels;
 | 
			
		||||
use Illuminate\Queue\InteractsWithQueue;
 | 
			
		||||
use Illuminate\Contracts\Queue\ShouldQueue;
 | 
			
		||||
 | 
			
		||||
use Illuminate\Foundation\Bus\Dispatchable;
 | 
			
		||||
use App\Utils\Traits\Notifications\UserNotifies;
 | 
			
		||||
 | 
			
		||||
class TaskAssigned implements ShouldQueue
 | 
			
		||||
{
 | 
			
		||||
    use Dispatchable;
 | 
			
		||||
    use InteractsWithQueue;
 | 
			
		||||
    use Queueable;
 | 
			
		||||
    use SerializesModels;
 | 
			
		||||
    use UserNotifies;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create a new job instance.
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(private Task $task, private string $db)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function handle(): void
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        MultiDB::setDb($this->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)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										323
									
								
								app/Jobs/Util/QuoteReminderJob.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										323
									
								
								app/Jobs/Util/QuoteReminderJob.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,323 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Invoice Ninja (https://invoiceninja.com).
 | 
			
		||||
 *
 | 
			
		||||
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
 | 
			
		||||
 *
 | 
			
		||||
 * @license https://www.elastic.co/licensing/elastic-license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace App\Jobs\Util;
 | 
			
		||||
 | 
			
		||||
use App\Utils\Ninja;
 | 
			
		||||
use App\Models\Quote;
 | 
			
		||||
use App\Models\Invoice;
 | 
			
		||||
use App\Models\Webhook;
 | 
			
		||||
use App\Libraries\MultiDB;
 | 
			
		||||
use Illuminate\Bus\Queueable;
 | 
			
		||||
use Illuminate\Support\Carbon;
 | 
			
		||||
use App\DataMapper\InvoiceItem;
 | 
			
		||||
use App\Factory\InvoiceFactory;
 | 
			
		||||
use App\Jobs\Entity\EmailEntity;
 | 
			
		||||
use App\Utils\Traits\MakesDates;
 | 
			
		||||
use Illuminate\Support\Facades\App;
 | 
			
		||||
use App\Utils\Traits\MakesReminders;
 | 
			
		||||
use Illuminate\Support\Facades\Auth;
 | 
			
		||||
use Illuminate\Queue\SerializesModels;
 | 
			
		||||
use Illuminate\Queue\InteractsWithQueue;
 | 
			
		||||
use Illuminate\Contracts\Queue\ShouldQueue;
 | 
			
		||||
use Illuminate\Foundation\Bus\Dispatchable;
 | 
			
		||||
use App\Events\Quote\QuoteReminderWasEmailed;
 | 
			
		||||
 | 
			
		||||
class QuoteReminderJob implements ShouldQueue
 | 
			
		||||
{
 | 
			
		||||
    use Dispatchable;
 | 
			
		||||
    use InteractsWithQueue;
 | 
			
		||||
    use Queueable;
 | 
			
		||||
    use SerializesModels;
 | 
			
		||||
    use MakesReminders;
 | 
			
		||||
    use MakesDates;
 | 
			
		||||
 | 
			
		||||
    public $tries = 1;
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Execute the job.
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function handle(): void
 | 
			
		||||
    {
 | 
			
		||||
        set_time_limit(0);
 | 
			
		||||
 | 
			
		||||
        Auth::logout();
 | 
			
		||||
 | 
			
		||||
        if (! config('ninja.db.multi_db_enabled')) {
 | 
			
		||||
            nrlog("Sending quote reminders on ".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);
 | 
			
		||||
                 });
 | 
			
		||||
        } 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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										60
									
								
								app/Listeners/Quote/QuoteReminderEmailActivity.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								app/Listeners/Quote/QuoteReminderEmailActivity.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
<?php
 | 
			
		||||
/**
 | 
			
		||||
 * Invoice Ninja (https://invoiceninja.com).
 | 
			
		||||
 *
 | 
			
		||||
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
			
		||||
 *
 | 
			
		||||
 * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
 | 
			
		||||
 *
 | 
			
		||||
 * @license https://www.elastic.co/licensing/elastic-license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace App\Listeners\Quote;
 | 
			
		||||
 | 
			
		||||
use App\Libraries\MultiDB;
 | 
			
		||||
use App\Repositories\ActivityRepository;
 | 
			
		||||
use Illuminate\Contracts\Queue\ShouldQueue;
 | 
			
		||||
use stdClass;
 | 
			
		||||
 | 
			
		||||
class QuoteReminderEmailActivity implements ShouldQueue
 | 
			
		||||
{
 | 
			
		||||
    public $delay = 5;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create the event listener.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ActivityRepository $activity_repo
 | 
			
		||||
     */
 | 
			
		||||
    public function __construct(protected ActivityRepository $activity_repo)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Handle the event.
 | 
			
		||||
     *
 | 
			
		||||
     * @param  object  $event
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function handle($event)
 | 
			
		||||
    {
 | 
			
		||||
        MultiDB::setDb($event->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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -261,6 +261,9 @@ 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',
 | 
			
		||||
 | 
			
		||||
@ -842,7 +842,6 @@ class Company extends BaseModel
 | 
			
		||||
                          ->get();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public function resolveRouteBinding($value, $field = null)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->where('id', $this->decodePrimaryKey($value))
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
 | 
			
		||||
@ -59,26 +59,27 @@ class ClientContactObserver
 | 
			
		||||
        //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();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
@ -54,7 +54,6 @@ class TaskObserver
 | 
			
		||||
            $event = Webhook::EVENT_DELETE_TASK;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        $subscriptions = Webhook::where('company_id', $task->company_id)
 | 
			
		||||
                                    ->where('event_id', $event)
 | 
			
		||||
                                    ->exists();
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
        ],
 | 
			
		||||
 | 
			
		||||
@ -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<Currency> */
 | 
			
		||||
        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<Language> */
 | 
			
		||||
        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<Country> */
 | 
			
		||||
        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<PaymentType> */
 | 
			
		||||
        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<Industry> */
 | 
			
		||||
        app()->singleton('industries', function ($app) {
 | 
			
		||||
            return Industry::query()->orderBy('name')->get();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        /** @return \Illuminate\Support\Collection<Bank> */
 | 
			
		||||
        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<DateFormat> */
 | 
			
		||||
        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<Timezone> */
 | 
			
		||||
        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<Gateway> */
 | 
			
		||||
        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<Industry> */
 | 
			
		||||
        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<Size> */
 | 
			
		||||
        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<DatetimeFormat> */
 | 
			
		||||
        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(),
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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();
 | 
			
		||||
 | 
			
		||||
@ -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<Payment> $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<Invoice> $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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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' => '<div class="stamp is-paid"> ' . ctrans('texts.paid') .'</div>', '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) {
 | 
			
		||||
 | 
			
		||||
@ -30,8 +30,16 @@ 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
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,6 @@ return new class extends Migration {
 | 
			
		||||
            $currency->update(['symbol' => '$']);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        $this->buildCache(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -19,8 +19,6 @@ return new class extends Migration {
 | 
			
		||||
        if ($currency) {
 | 
			
		||||
            $currency->update(['symbol' => '$']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->buildCache(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,6 @@ return new class extends Migration {
 | 
			
		||||
            $checkout->save();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // $this->buildCache(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,6 @@ return new class extends Migration {
 | 
			
		||||
                $record->save();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $this->buildCache(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,6 @@ return new class extends Migration {
 | 
			
		||||
            $table->dropColumn('show_production_description_dropdown');
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        $this->buildCache(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -36,8 +36,6 @@ class AddPurchaseOrderToExpense extends Migration
 | 
			
		||||
        if (!$language) {
 | 
			
		||||
            Language::unguard();
 | 
			
		||||
            Language::create(['id' => 36, 'name' => 'Bulgarian', 'locale' => 'bg']);
 | 
			
		||||
 | 
			
		||||
            $this->buildCache(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -60,8 +60,6 @@ return new class extends Migration {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        \Illuminate\Support\Facades\Artisan::call('ninja:design-update');
 | 
			
		||||
 | 
			
		||||
        $this->buildCache(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,6 @@ return new class extends Migration {
 | 
			
		||||
 | 
			
		||||
        \Illuminate\Support\Facades\Artisan::call('ninja:design-update');
 | 
			
		||||
 | 
			
		||||
        $this->buildCache(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,28 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
return new class extends Migration
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * Run the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function up(): void
 | 
			
		||||
    {
 | 
			
		||||
                
 | 
			
		||||
        Schema::table('users', function (Blueprint $table) {
 | 
			
		||||
            $table->mediumText('referral_meta')->nullable();
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Reverse the migrations.
 | 
			
		||||
     */
 | 
			
		||||
    public function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        //
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
@ -59,8 +59,6 @@ class RandomDataSeeder extends Seeder
 | 
			
		||||
    public function run()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        $this->buildCache(true);
 | 
			
		||||
 | 
			
		||||
        $this->command->info('Running RandomDataSeeder');
 | 
			
		||||
 | 
			
		||||
        Model::unguard();
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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.<br/>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 <br><br> Description: :description <br><br> 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'
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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<b><br><b>',
 | 
			
		||||
    '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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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;
 | 
			
		||||
@ -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');
 | 
			
		||||
 | 
			
		||||
@ -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()
 | 
			
		||||
    {
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
@ -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'));
 | 
			
		||||
 | 
			
		||||
@ -44,7 +44,6 @@ class ClientMergeTest extends TestCase
 | 
			
		||||
        parent::setUp();
 | 
			
		||||
 | 
			
		||||
        $this->faker = Factory::create();
 | 
			
		||||
        $this->buildCache(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testSearchingForContacts()
 | 
			
		||||
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user