mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 02:37:34 -05:00 
			
		
		
		
	
						commit
						abfd99fe7f
					
				@ -63,3 +63,5 @@ APPLE_REDIRECT_URI=
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
NORDIGEN_SECRET_ID=
 | 
					NORDIGEN_SECRET_ID=
 | 
				
			||||||
NORDIGEN_SECRET_KEY=
 | 
					NORDIGEN_SECRET_KEY=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPENEXCHANGE_APP_ID=
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								.github/workflows/react_release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/react_release.yml
									
									
									
									
										vendored
									
									
								
							@ -44,6 +44,7 @@ jobs:
 | 
				
			|||||||
          git clone https://${{secrets.commit_secret}}@github.com/invoiceninja/ui.git
 | 
					          git clone https://${{secrets.commit_secret}}@github.com/invoiceninja/ui.git
 | 
				
			||||||
          cd ui
 | 
					          cd ui
 | 
				
			||||||
          git checkout develop
 | 
					          git checkout develop
 | 
				
			||||||
 | 
					          cp .env.example .env
 | 
				
			||||||
          cp ../vite.config.ts.react ./vite.config.js
 | 
					          cp ../vite.config.ts.react ./vite.config.js
 | 
				
			||||||
          npm i
 | 
					          npm i
 | 
				
			||||||
          npm run build
 | 
					          npm run build
 | 
				
			||||||
 | 
				
			|||||||
@ -54,7 +54,6 @@ We offer a $30 per year white-label license to remove the Invoice Ninja branding
 | 
				
			|||||||
git clone --single-branch --branch v5-stable https://github.com/invoiceninja/invoiceninja.git
 | 
					git clone --single-branch --branch v5-stable https://github.com/invoiceninja/invoiceninja.git
 | 
				
			||||||
cp .env.example .env
 | 
					cp .env.example .env
 | 
				
			||||||
composer i -o --no-dev
 | 
					composer i -o --no-dev
 | 
				
			||||||
php artisan key:generate
 | 
					 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Please Note: 
 | 
					Please Note: 
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1 @@
 | 
				
			|||||||
5.10.5
 | 
					5.10.8
 | 
				
			||||||
@ -18,6 +18,7 @@ use Illuminate\Auth\Access\AuthorizationException;
 | 
				
			|||||||
use Illuminate\Auth\AuthenticationException;
 | 
					use Illuminate\Auth\AuthenticationException;
 | 
				
			||||||
use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException;
 | 
					use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException;
 | 
				
			||||||
use Illuminate\Database\Eloquent\RelationNotFoundException;
 | 
					use Illuminate\Database\Eloquent\RelationNotFoundException;
 | 
				
			||||||
 | 
					use Illuminate\Encryption\MissingAppKeyException;
 | 
				
			||||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 | 
					use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
 | 
				
			||||||
use Illuminate\Http\Exceptions\ThrottleRequestsException;
 | 
					use Illuminate\Http\Exceptions\ThrottleRequestsException;
 | 
				
			||||||
use Illuminate\Http\Request;
 | 
					use Illuminate\Http\Request;
 | 
				
			||||||
@ -94,11 +95,6 @@ class Handler extends ExceptionHandler
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function report(Throwable $exception)
 | 
					    public function report(Throwable $exception)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (! Schema::hasTable('accounts')) {
 | 
					 | 
				
			||||||
            info('account table not found');
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (Ninja::isHosted()) {
 | 
					        if (Ninja::isHosted()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // if($exception instanceof ThrottleRequestsException && class_exists(\Modules\Admin\Events\ThrottledExceptionRaised::class)) {
 | 
					            // if($exception instanceof ThrottleRequestsException && class_exists(\Modules\Admin\Events\ThrottledExceptionRaised::class)) {
 | 
				
			||||||
@ -154,6 +150,10 @@ class Handler extends ExceptionHandler
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        parent::report($exception);
 | 
					        parent::report($exception);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (Ninja::isSelfHost() && $exception instanceof MissingAppKeyException) {
 | 
				
			||||||
 | 
					            info('To setup the app run: cp .env.example .env');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private function validException($exception)
 | 
					    private function validException($exception)
 | 
				
			||||||
 | 
				
			|||||||
@ -35,6 +35,7 @@ use League\Fractal\Resource\Item;
 | 
				
			|||||||
use App\Models\BankTransactionRule;
 | 
					use App\Models\BankTransactionRule;
 | 
				
			||||||
use Illuminate\Support\Facades\Auth;
 | 
					use Illuminate\Support\Facades\Auth;
 | 
				
			||||||
use App\Transformers\ArraySerializer;
 | 
					use App\Transformers\ArraySerializer;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Schema as DbSchema;
 | 
				
			||||||
use App\Transformers\EntityTransformer;
 | 
					use App\Transformers\EntityTransformer;
 | 
				
			||||||
use League\Fractal\Resource\Collection;
 | 
					use League\Fractal\Resource\Collection;
 | 
				
			||||||
use Illuminate\Database\Eloquent\Builder;
 | 
					use Illuminate\Database\Eloquent\Builder;
 | 
				
			||||||
@ -1106,7 +1107,7 @@ class BaseController extends Controller
 | 
				
			|||||||
    public function flutterRoute()
 | 
					    public function flutterRoute()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((bool) $this->checkAppSetup() !== false && $account = Account::first()) {
 | 
					        if ((bool) $this->checkAppSetup() !== false && DbSchema::hasTable('accounts') && $account = Account::first()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            /** @var \App\Models\Account $account */
 | 
					            /** @var \App\Models\Account $account */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -81,4 +81,34 @@ class PingController extends BaseController
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return response()->json(SystemHealth::check(), 200);
 | 
					        return response()->json(SystemHealth::check(), 200);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get the last error from storage/logs/laravel.log
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return Response| \Illuminate\Http\JsonResponse
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @OA\Get(
 | 
				
			||||||
 | 
					     *      path="/api/v1/last_error",
 | 
				
			||||||
 | 
					     *      operationId="getLastError",
 | 
				
			||||||
 | 
					     *      tags={"last_error"},
 | 
				
			||||||
 | 
					     *      summary="Get the last error from storage/logs/laravel.log",
 | 
				
			||||||
 | 
					     *      description="Get the last error from storage/logs/laravel.log",
 | 
				
			||||||
 | 
					     *      @OA\Parameter(ref="#/components/parameters/X-Requested-With"),
 | 
				
			||||||
 | 
					     *      @OA\Response(
 | 
				
			||||||
 | 
					     *          response=200,
 | 
				
			||||||
 | 
					     *          description="The last error from the logs",
 | 
				
			||||||
 | 
					     *          @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"),
 | 
				
			||||||
 | 
					     *          @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"),
 | 
				
			||||||
 | 
					     *          @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"),
 | 
				
			||||||
 | 
					     *       )
 | 
				
			||||||
 | 
					     *     )
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function lastError()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (Ninja::isNinja() || ! auth()->user()->isAdmin()) {
 | 
				
			||||||
 | 
					            return response()->json(['message' => ctrans('texts.route_not_available'), 'errors' => []], 403);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return response()->json(['last_error' => SystemHealth::lastError()], 200);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -181,6 +181,9 @@ class SelfUpdateController extends BaseController
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public function checkVersion()
 | 
					    public function checkVersion()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        if(Ninja::isHosted())
 | 
				
			||||||
 | 
					            return '5.10.SaaS';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return trim(file_get_contents(config('ninja.version_url')));
 | 
					        return trim(file_get_contents(config('ninja.version_url')));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -43,7 +43,7 @@ class SetupController extends Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public function index()
 | 
					    public function index()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $check = SystemHealth::check(false);
 | 
					        $check = SystemHealth::check(false, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($check['system_health'] == true && $check['simple_db_check'] && Schema::hasTable('accounts') && $account = Account::first()) {
 | 
					        if ($check['system_health'] == true && $check['simple_db_check'] && Schema::hasTable('accounts') && $account = Account::first()) {
 | 
				
			||||||
            return redirect('/');
 | 
					            return redirect('/');
 | 
				
			||||||
@ -59,7 +59,7 @@ class SetupController extends Controller
 | 
				
			|||||||
    public function doSetup(StoreSetupRequest $request)
 | 
					    public function doSetup(StoreSetupRequest $request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            $check = SystemHealth::check(false);
 | 
					            $check = SystemHealth::check(false, false);
 | 
				
			||||||
        } catch (Exception $e) {
 | 
					        } catch (Exception $e) {
 | 
				
			||||||
            nlog(['message' => $e->getMessage(), 'action' => 'SetupController::doSetup()']);
 | 
					            nlog(['message' => $e->getMessage(), 'action' => 'SetupController::doSetup()']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -146,6 +146,7 @@ class SetupController extends Controller
 | 
				
			|||||||
            Artisan::call('config:clear');
 | 
					            Artisan::call('config:clear');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Artisan::call('key:generate', ['--force' => true]);
 | 
				
			||||||
            Artisan::call('migrate', ['--force' => true]);
 | 
					            Artisan::call('migrate', ['--force' => true]);
 | 
				
			||||||
            Artisan::call('db:seed', ['--force' => true]);
 | 
					            Artisan::call('db:seed', ['--force' => true]);
 | 
				
			||||||
            Artisan::call('config:clear');
 | 
					            Artisan::call('config:clear');
 | 
				
			||||||
 | 
				
			|||||||
@ -15,10 +15,8 @@ use App\Utils\Ninja;
 | 
				
			|||||||
use App\Http\Requests\Request;
 | 
					use App\Http\Requests\Request;
 | 
				
			||||||
use App\Utils\Traits\MakesHash;
 | 
					use App\Utils\Traits\MakesHash;
 | 
				
			||||||
use App\DataMapper\CompanySettings;
 | 
					use App\DataMapper\CompanySettings;
 | 
				
			||||||
use InvoiceNinja\EInvoice\EInvoice;
 | 
					 | 
				
			||||||
use App\Http\ValidationRules\ValidSettingsRule;
 | 
					use App\Http\ValidationRules\ValidSettingsRule;
 | 
				
			||||||
use InvoiceNinja\EInvoice\Models\Peppol\Invoice;
 | 
					use App\Http\ValidationRules\EInvoice\ValidCompanyScheme;
 | 
				
			||||||
use App\Http\ValidationRules\EInvoice\ValidScheme;
 | 
					 | 
				
			||||||
use App\Http\ValidationRules\Company\ValidSubdomain;
 | 
					use App\Http\ValidationRules\Company\ValidSubdomain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class UpdateCompanyRequest extends Request
 | 
					class UpdateCompanyRequest extends Request
 | 
				
			||||||
@ -67,7 +65,7 @@ class UpdateCompanyRequest extends Request
 | 
				
			|||||||
        $rules['smtp_local_domain'] = 'sometimes|string|nullable';
 | 
					        $rules['smtp_local_domain'] = 'sometimes|string|nullable';
 | 
				
			||||||
        // $rules['smtp_verify_peer'] = 'sometimes|string';
 | 
					        // $rules['smtp_verify_peer'] = 'sometimes|string';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // $rules['e_invoice'] = ['sometimes','nullable', new ValidScheme()];
 | 
					        $rules['e_invoice'] = ['sometimes','nullable', new ValidCompanyScheme()];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (isset($input['portal_mode']) && ($input['portal_mode'] == 'domain' || $input['portal_mode'] == 'iframe')) {
 | 
					        if (isset($input['portal_mode']) && ($input['portal_mode'] == 'domain' || $input['portal_mode'] == 'iframe')) {
 | 
				
			||||||
            $rules['portal_domain'] = 'bail|nullable|sometimes|url';
 | 
					            $rules['portal_domain'] = 'bail|nullable|sometimes|url';
 | 
				
			||||||
 | 
				
			|||||||
@ -63,7 +63,7 @@ class SendEmailRequest extends Request
 | 
				
			|||||||
        $user = auth()->user();
 | 
					        $user = auth()->user();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return [
 | 
					        return [
 | 
				
			||||||
            'template' => 'bail|required|in:'.implode(',', $this->templates),
 | 
					            'template' => 'bail|required|string|in:'.implode(',', $this->templates),
 | 
				
			||||||
            'entity' => 'bail|required|in:App\Models\Invoice,App\Models\Quote,App\Models\Credit,App\Models\RecurringInvoice,App\Models\PurchaseOrder,App\Models\Payment',
 | 
					            'entity' => 'bail|required|in:App\Models\Invoice,App\Models\Quote,App\Models\Credit,App\Models\RecurringInvoice,App\Models\PurchaseOrder,App\Models\Payment',
 | 
				
			||||||
            'entity_id' => ['bail', 'required', Rule::exists($this->entity_plural, 'id')->where('company_id', $user->company()->id)],
 | 
					            'entity_id' => ['bail', 'required', Rule::exists($this->entity_plural, 'id')->where('company_id', $user->company()->id)],
 | 
				
			||||||
            'cc_email.*' => 'bail|sometimes|email',
 | 
					            'cc_email.*' => 'bail|sometimes|email',
 | 
				
			||||||
 | 
				
			|||||||
@ -56,7 +56,7 @@ class UpdateExpenseRequest extends Request
 | 
				
			|||||||
        $rules['invoice_id'] = 'bail|sometimes|nullable|exists:invoices,id,company_id,'.$user->company()->id;
 | 
					        $rules['invoice_id'] = 'bail|sometimes|nullable|exists:invoices,id,company_id,'.$user->company()->id;
 | 
				
			||||||
        $rules['documents'] = 'bail|sometimes|array';
 | 
					        $rules['documents'] = 'bail|sometimes|array';
 | 
				
			||||||
        $rules['amount'] = ['sometimes', 'bail', 'nullable', 'numeric', 'max:99999999999999'];
 | 
					        $rules['amount'] = ['sometimes', 'bail', 'nullable', 'numeric', 'max:99999999999999'];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace App\Http\ValidationRules\EInvoice;
 | 
					namespace App\Http\ValidationRules\EInvoice;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Services\EDocument\Standards\Validation\Peppol\CompanyLevel;
 | 
				
			||||||
use Closure;
 | 
					use Closure;
 | 
				
			||||||
use InvoiceNinja\EInvoice\EInvoice;
 | 
					use InvoiceNinja\EInvoice\EInvoice;
 | 
				
			||||||
use Illuminate\Validation\Validator;
 | 
					use Illuminate\Validation\Validator;
 | 
				
			||||||
@ -19,9 +20,9 @@ use Illuminate\Contracts\Validation\ValidationRule;
 | 
				
			|||||||
use Illuminate\Contracts\Validation\ValidatorAwareRule;
 | 
					use Illuminate\Contracts\Validation\ValidatorAwareRule;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Class BlackListRule.
 | 
					 * Class ValidScheme.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
class ValidScheme implements ValidationRule, ValidatorAwareRule
 | 
					class ValidCompanyScheme implements ValidationRule, ValidatorAwareRule
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -35,7 +36,7 @@ class ValidScheme implements ValidationRule, ValidatorAwareRule
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $r = new EInvoice();
 | 
					        $r = new EInvoice();
 | 
				
			||||||
        $errors = $r->validateRequest($value['Invoice'], Invoice::class);
 | 
					        $errors = $r->validateRequest($value['Invoice'], CompanyLevel::class);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        foreach ($errors as $key => $msg) {
 | 
					        foreach ($errors as $key => $msg) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Http\ViewComposers\Components\Rotessa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\DataProviders\CAProvinces;
 | 
				
			||||||
 | 
					use App\DataProviders\USStates;
 | 
				
			||||||
 | 
					use Illuminate\View\Component;
 | 
				
			||||||
 | 
					use App\Models\ClientContact;
 | 
				
			||||||
 | 
					use Illuminate\Support\Arr;
 | 
				
			||||||
 | 
					use Illuminate\View\View;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// AmericanBankInfo Component
 | 
				
			||||||
 | 
					class AccountComponent extends Component
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    private $fields = [
 | 
				
			||||||
 | 
					        'bank_account_type',
 | 
				
			||||||
 | 
					        'routing_number',
 | 
				
			||||||
 | 
					        'institution_number',
 | 
				
			||||||
 | 
					        'transit_number',
 | 
				
			||||||
 | 
					        'bank_name',
 | 
				
			||||||
 | 
					        'country',
 | 
				
			||||||
 | 
					        'account_number'
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private $defaults =  [
 | 
				
			||||||
 | 
					        'bank_account_type' => null,
 | 
				
			||||||
 | 
					        'routing_number' => null,
 | 
				
			||||||
 | 
					        'institution_number' => null,
 | 
				
			||||||
 | 
					        'transit_number' => null,
 | 
				
			||||||
 | 
					        'bank_name' => ' ',
 | 
				
			||||||
 | 
					        'account_number' => null,
 | 
				
			||||||
 | 
					        'country' => 'US',
 | 
				
			||||||
 | 
					        "authorization_type" => 'Online'
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public array $account;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(array $account) {
 | 
				
			||||||
 | 
					        $this->account = $account;
 | 
				
			||||||
 | 
					        $this->attributes = $this->newAttributeBag(Arr::only($this->account, $this->fields) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public function render()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return render('gateways.rotessa.components.account', array_merge($this->attributes->getAttributes(), $this->defaults) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Http\ViewComposers\Components\Rotessa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\DataProviders\CAProvinces;
 | 
				
			||||||
 | 
					use App\DataProviders\USStates;
 | 
				
			||||||
 | 
					use Illuminate\View\Component;
 | 
				
			||||||
 | 
					use App\Models\ClientContact;
 | 
				
			||||||
 | 
					use Illuminate\Support\Arr;
 | 
				
			||||||
 | 
					use Illuminate\View\View;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Address Component
 | 
				
			||||||
 | 
					class AddressComponent extends Component
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    private $fields = [
 | 
				
			||||||
 | 
					        'address_1',
 | 
				
			||||||
 | 
					        'address_2',
 | 
				
			||||||
 | 
					        'city',
 | 
				
			||||||
 | 
					        'postal_code',
 | 
				
			||||||
 | 
					        'province_code',
 | 
				
			||||||
 | 
					        'country'
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private $defaults = [
 | 
				
			||||||
 | 
					        'country' => 'US'
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public array $address;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(array $address) {
 | 
				
			||||||
 | 
					        $this->address = $address;
 | 
				
			||||||
 | 
					        if(strlen($this->address['state']) > 2 ) {
 | 
				
			||||||
 | 
					            $this->address['state'] = $this->address['country'] == 'US' ? array_search($this->address['state'], USStates::$states) : CAProvinces::getAbbreviation($this->address['state']); 
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->attributes = $this->newAttributeBag(
 | 
				
			||||||
 | 
					            Arr::only(Arr::mapWithKeys($this->address, function ($item, $key) {
 | 
				
			||||||
 | 
					                return in_array($key, ['address1','address2','state'])?[ (['address1'=>'address_1','address2'=>'address_2','state'=>'province_code'])[$key] => $item ] :[ $key => $item ];
 | 
				
			||||||
 | 
					             }),
 | 
				
			||||||
 | 
					        $this->fields) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public function render()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return render('gateways.rotessa.components.address',array_merge(  $this->defaults, $this->attributes->getAttributes() ) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Http\ViewComposers\Components\Rotessa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\DataProviders\CAProvinces;
 | 
				
			||||||
 | 
					use App\DataProviders\USStates;
 | 
				
			||||||
 | 
					use Illuminate\View\Component;
 | 
				
			||||||
 | 
					use App\Models\ClientContact;
 | 
				
			||||||
 | 
					use Illuminate\Support\Arr;
 | 
				
			||||||
 | 
					use Illuminate\View\View;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Contact Component
 | 
				
			||||||
 | 
					class ContactComponent extends Component
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(ClientContact $contact) {
 | 
				
			||||||
 | 
					        $contact = collect($contact->client->contacts->firstWhere('is_primary', 1)->toArray())->merge([
 | 
				
			||||||
 | 
					            'home_phone' =>$contact->client->phone, 
 | 
				
			||||||
 | 
					            'custom_identifier' => $contact->client->number,
 | 
				
			||||||
 | 
					            'name' =>$contact->client->name,
 | 
				
			||||||
 | 
					            'id' => null
 | 
				
			||||||
 | 
					        ] )->all();
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        $this->attributes = $this->newAttributeBag(Arr::only($contact, $this->fields) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private $fields = [
 | 
				
			||||||
 | 
					        'name',
 | 
				
			||||||
 | 
					        'email',
 | 
				
			||||||
 | 
					        'home_phone',
 | 
				
			||||||
 | 
					        'phone',
 | 
				
			||||||
 | 
					        'custom_identifier',
 | 
				
			||||||
 | 
					        'customer_type' ,
 | 
				
			||||||
 | 
					        'id'
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private $defaults = [
 | 
				
			||||||
 | 
					        'customer_type' => "Business",
 | 
				
			||||||
 | 
					        'customer_identifier' => null,
 | 
				
			||||||
 | 
					        'id' => null
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function render()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return render('gateways.rotessa.components.contact', array_merge($this->defaults, $this->attributes->getAttributes() ) );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -13,14 +13,15 @@ namespace App\Jobs\Task;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use App\Models\Task;
 | 
					use App\Models\Task;
 | 
				
			||||||
use App\Libraries\MultiDB;
 | 
					use App\Libraries\MultiDB;
 | 
				
			||||||
 | 
					use App\Models\CompanyUser;
 | 
				
			||||||
use App\Services\Email\Email;
 | 
					use App\Services\Email\Email;
 | 
				
			||||||
use Illuminate\Bus\Queueable;
 | 
					use Illuminate\Bus\Queueable;
 | 
				
			||||||
use App\Services\Email\EmailObject;
 | 
					use App\Services\Email\EmailObject;
 | 
				
			||||||
use Illuminate\Mail\Mailables\Address;
 | 
					use Illuminate\Mail\Mailables\Address;
 | 
				
			||||||
use Illuminate\Queue\SerializesModels;
 | 
					use Illuminate\Queue\SerializesModels;
 | 
				
			||||||
use Illuminate\Queue\InteractsWithQueue;
 | 
					use Illuminate\Queue\InteractsWithQueue;
 | 
				
			||||||
use Illuminate\Contracts\Queue\ShouldQueue;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Illuminate\Contracts\Queue\ShouldQueue;
 | 
				
			||||||
use Illuminate\Foundation\Bus\Dispatchable;
 | 
					use Illuminate\Foundation\Bus\Dispatchable;
 | 
				
			||||||
use App\Utils\Traits\Notifications\UserNotifies;
 | 
					use App\Utils\Traits\Notifications\UserNotifies;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -47,7 +48,7 @@ class TaskAssigned implements ShouldQueue
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $company_user = $this->task->assignedCompanyUser();
 | 
					        $company_user = $this->task->assignedCompanyUser();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if($company_user && $this->findEntityAssignedNotification($company_user, 'task'))
 | 
					        if(($company_user instanceof CompanyUser) && $this->findEntityAssignedNotification($company_user, 'task'))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            $mo = new EmailObject();
 | 
					            $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->subject = ctrans('texts.task_assigned_subject', ['task' => $this->task->number, 'date' => now()->setTimeZone($this->task->company->timezone()->name)->format($this->task->company->date_format()) ]);
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,8 @@ namespace App\Providers;
 | 
				
			|||||||
use App\Http\ViewComposers\PortalComposer;
 | 
					use App\Http\ViewComposers\PortalComposer;
 | 
				
			||||||
use Illuminate\Support\ServiceProvider;
 | 
					use Illuminate\Support\ServiceProvider;
 | 
				
			||||||
use Illuminate\Support\Facades\Blade;
 | 
					use Illuminate\Support\Facades\Blade;
 | 
				
			||||||
 | 
					use App\DataProviders\CAProvinces;
 | 
				
			||||||
 | 
					use App\DataProviders\USStates;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ComposerServiceProvider extends ServiceProvider
 | 
					class ComposerServiceProvider extends ServiceProvider
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -25,9 +27,19 @@ class ComposerServiceProvider extends ServiceProvider
 | 
				
			|||||||
    public function boot()
 | 
					    public function boot()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        view()->composer('portal.*', PortalComposer::class);
 | 
					        view()->composer('portal.*', PortalComposer::class);
 | 
				
			||||||
        include_once app_path('Http/ViewComposers/RotessaComposer.php');
 | 
					
 | 
				
			||||||
        include_once app_path("Http/ViewComposers/Components/RotessaComponents.php");
 | 
					        view()->composer(['*.rotessa.components.address','*.rotessa.components.banks.US.bank','*.rotessa.components.dropdowns.country.US'], function ($view) {
 | 
				
			||||||
        Blade::componentNamespace('App\\Http\\ViewComposers\\Components', 'rotessa');
 | 
					            $states = USStates::get();
 | 
				
			||||||
 | 
					            $view->with('states', $states);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // CAProvinces View Composer
 | 
				
			||||||
 | 
					        view()->composer(['*.rotessa.components.address','*.rotessa.components.banks.CA.bank','*.rotessa.components.dropdowns.country.CA'], function ($view) {
 | 
				
			||||||
 | 
					            $provinces = CAProvinces::get();
 | 
				
			||||||
 | 
					            $view->with('provinces', $provinces);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Blade::componentNamespace('App\\Http\\ViewComposers\\Components\\Rotessa', 'rotessa');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -26,6 +26,6 @@ class RotessaServiceProvider extends BaseProvider
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function registerComponent(): void
 | 
					    public function registerComponent(): void
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Blade::componentNamespace('App\\Http\\ViewComposers\\Components', $this->moduleNameLower);
 | 
					        Blade::componentNamespace('App\\Http\\ViewComposers\\Components\\Rotessa', $this->moduleNameLower);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -46,7 +46,7 @@ class ExpenseRepository extends BaseRepository
 | 
				
			|||||||
        /** @var \App\Models\User $user */
 | 
					        /** @var \App\Models\User $user */
 | 
				
			||||||
        $user = auth()->user();
 | 
					        $user = auth()->user();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $payment_date = &$data['payment_date'];
 | 
					        $payment_date = isset($data['payment_date']) ? $data['payment_date'] : false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if($payment_date && $payment_date == $expense->payment_date) {
 | 
					        if($payment_date && $payment_date == $expense->payment_date) {
 | 
				
			||||||
            //do nothing
 | 
					            //do nothing
 | 
				
			||||||
 | 
				
			|||||||
@ -53,12 +53,8 @@ class VendorRepository extends BaseRepository
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $vendor->saveQuietly();
 | 
					        $vendor->saveQuietly();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($vendor->number == '' || ! $vendor->number) {
 | 
					        $vendor->service()->applyNumber();
 | 
				
			||||||
            $vendor->number = $this->getNextVendorNumber($vendor);
 | 
					        
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $vendor->saveQuietly();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (isset($data['contacts']) || $vendor->contacts()->count() == 0) {
 | 
					        if (isset($data['contacts']) || $vendor->contacts()->count() == 0) {
 | 
				
			||||||
            $this->contact_repo->save($data, $vendor);
 | 
					            $this->contact_repo->save($data, $vendor);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -169,7 +169,7 @@ class ClientService
 | 
				
			|||||||
            } catch (QueryException $e) {
 | 
					            } catch (QueryException $e) {
 | 
				
			||||||
                $x++;
 | 
					                $x++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if ($x > 10) {
 | 
					                if ($x > 50) {
 | 
				
			||||||
                    $this->completed = false;
 | 
					                    $this->completed = false;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,303 @@
 | 
				
			|||||||
 | 
					<?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\Services\EDocument\Standards\Validation\Peppol;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use DateTime;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\AllowanceChargeType\AllowanceCharge;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\BillingReferenceType\BillingReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CodeType\AccountingCostCode;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CodeType\DocumentCurrencyCode;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CodeType\InvoiceTypeCode;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CodeType\PaymentAlternativeCurrencyCode;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CodeType\PaymentCurrencyCode;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CodeType\PricingCurrencyCode;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CodeType\TaxCurrencyCode;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CustomerPartyType\AccountingCustomerParty;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\CustomerPartyType\BuyerCustomerParty;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DeliveryTermsType\DeliveryTerms;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DeliveryType\Delivery;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DocumentReferenceType\AdditionalDocumentReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DocumentReferenceType\ContractDocumentReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DocumentReferenceType\DespatchDocumentReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DocumentReferenceType\OriginatorDocumentReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DocumentReferenceType\ReceiptDocumentReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\DocumentReferenceType\StatementDocumentReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\ExchangeRateType\PaymentAlternativeExchangeRate;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\ExchangeRateType\PaymentExchangeRate;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\ExchangeRateType\PricingExchangeRate;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\ExchangeRateType\TaxExchangeRate;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\CustomizationID;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\ID;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\ProfileExecutionID;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\ProfileID;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\UBLVersionID;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\UUID;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\InvoiceLineType\InvoiceLine;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\MonetaryTotalType\LegalMonetaryTotal;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\NumericType\LineCountNumeric;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\OrderReferenceType\OrderReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\PartyType\PayeeParty;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\PartyType\TaxRepresentativeParty;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\PaymentMeansType\PaymentMeans;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\PaymentTermsType\PaymentTerms;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\PaymentType\PrepaidPayment;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\PeriodType\InvoicePeriod;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\ProjectReferenceType\ProjectReference;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\SignatureType\Signature;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\SupplierPartyType\AccountingSupplierParty;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\SupplierPartyType\SellerSupplierParty;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\TaxTotalType\TaxTotal;
 | 
				
			||||||
 | 
					use InvoiceNinja\EInvoice\Models\Peppol\TaxTotalType\WithholdingTaxTotal;
 | 
				
			||||||
 | 
					use Symfony\Component\Serializer\Attribute\Context;
 | 
				
			||||||
 | 
					use Symfony\Component\Serializer\Attribute\SerializedName;
 | 
				
			||||||
 | 
					use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
 | 
				
			||||||
 | 
					use Symfony\Component\Validator\Constraints\Date;
 | 
				
			||||||
 | 
					use Symfony\Component\Validator\Constraints\NotBlank;
 | 
				
			||||||
 | 
					use Symfony\Component\Validator\Constraints\NotNull;
 | 
				
			||||||
 | 
					use Symfony\Component\Validator\Constraints\Valid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CompanyLevel
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // /** @var UBLVersionID */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:UBLVersionID')]
 | 
				
			||||||
 | 
					    // public $UBLVersionID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var CustomizationID */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:CustomizationID')]
 | 
				
			||||||
 | 
					    // public $CustomizationID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var ProfileID */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:ProfileID')]
 | 
				
			||||||
 | 
					    // public $ProfileID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var ProfileExecutionID */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:ProfileExecutionID')]
 | 
				
			||||||
 | 
					    // public $ProfileExecutionID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var ID */
 | 
				
			||||||
 | 
					    // #[NotNull]
 | 
				
			||||||
 | 
					    // #[NotBlank]
 | 
				
			||||||
 | 
					    // #[Valid]
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:ID')]
 | 
				
			||||||
 | 
					    // public $ID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var bool */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:CopyIndicator')]
 | 
				
			||||||
 | 
					    public bool $CopyIndicator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var UUID */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:UUID')]
 | 
				
			||||||
 | 
					    public $UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var ?\DateTime */
 | 
				
			||||||
 | 
					    // #[NotNull]
 | 
				
			||||||
 | 
					    // #[NotBlank]
 | 
				
			||||||
 | 
					    // #[Valid]
 | 
				
			||||||
 | 
					    // #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:IssueDate')]
 | 
				
			||||||
 | 
					    // public ?DateTime $IssueDate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var ?\DateTime */
 | 
				
			||||||
 | 
					    // #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d\TH:i:s.uP'])]
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:IssueTime')]
 | 
				
			||||||
 | 
					    // public ?DateTime $IssueTime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var ?\DateTime */
 | 
				
			||||||
 | 
					    // #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:DueDate')]
 | 
				
			||||||
 | 
					    // public ?DateTime $DueDate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var InvoiceTypeCode */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:InvoiceTypeCode')]
 | 
				
			||||||
 | 
					    public $InvoiceTypeCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var string */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:Note')]
 | 
				
			||||||
 | 
					    public string $Note;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var ?\DateTime */
 | 
				
			||||||
 | 
					    #[Context([DateTimeNormalizer::FORMAT_KEY => 'Y-m-d'])]
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:TaxPointDate')]
 | 
				
			||||||
 | 
					    public ?DateTime $TaxPointDate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var DocumentCurrencyCode */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:DocumentCurrencyCode')]
 | 
				
			||||||
 | 
					    public $DocumentCurrencyCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var TaxCurrencyCode */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:TaxCurrencyCode')]
 | 
				
			||||||
 | 
					    public $TaxCurrencyCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var PricingCurrencyCode */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:PricingCurrencyCode')]
 | 
				
			||||||
 | 
					    public $PricingCurrencyCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var PaymentCurrencyCode */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:PaymentCurrencyCode')]
 | 
				
			||||||
 | 
					    public $PaymentCurrencyCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var PaymentAlternativeCurrencyCode */
 | 
				
			||||||
 | 
					    #[SerializedName('cbc:PaymentAlternativeCurrencyCode')]
 | 
				
			||||||
 | 
					    public $PaymentAlternativeCurrencyCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var AccountingCostCode */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:AccountingCostCode')]
 | 
				
			||||||
 | 
					    // public $AccountingCostCode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var string */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:AccountingCost')]
 | 
				
			||||||
 | 
					    // public string $AccountingCost;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var LineCountNumeric */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:LineCountNumeric')]
 | 
				
			||||||
 | 
					    // public $LineCountNumeric;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var string */
 | 
				
			||||||
 | 
					    // #[SerializedName('cbc:BuyerReference')]
 | 
				
			||||||
 | 
					    // public string $BuyerReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var InvoicePeriod[] */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:InvoicePeriod')]
 | 
				
			||||||
 | 
					    // public array $InvoicePeriod;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var OrderReference */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:OrderReference')]
 | 
				
			||||||
 | 
					    // public $OrderReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var BillingReference[] */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:BillingReference')]
 | 
				
			||||||
 | 
					    // public array $BillingReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var DespatchDocumentReference[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:DespatchDocumentReference')]
 | 
				
			||||||
 | 
					    public array $DespatchDocumentReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var ReceiptDocumentReference[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:ReceiptDocumentReference')]
 | 
				
			||||||
 | 
					    public array $ReceiptDocumentReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var StatementDocumentReference[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:StatementDocumentReference')]
 | 
				
			||||||
 | 
					    public array $StatementDocumentReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var OriginatorDocumentReference[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:OriginatorDocumentReference')]
 | 
				
			||||||
 | 
					    public array $OriginatorDocumentReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var ContractDocumentReference[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:ContractDocumentReference')]
 | 
				
			||||||
 | 
					    public array $ContractDocumentReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var AdditionalDocumentReference[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:AdditionalDocumentReference')]
 | 
				
			||||||
 | 
					    public array $AdditionalDocumentReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var ProjectReference[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:ProjectReference')]
 | 
				
			||||||
 | 
					    public array $ProjectReference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var Signature[] */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:Signature')]
 | 
				
			||||||
 | 
					    // public array $Signature;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var AccountingSupplierParty */
 | 
				
			||||||
 | 
					    // #[NotNull]
 | 
				
			||||||
 | 
					    // #[NotBlank]
 | 
				
			||||||
 | 
					    // #[Valid]
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:AccountingSupplierParty')]
 | 
				
			||||||
 | 
					    // public $AccountingSupplierParty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var AccountingCustomerParty */
 | 
				
			||||||
 | 
					    // #[NotNull]
 | 
				
			||||||
 | 
					    // #[NotBlank]
 | 
				
			||||||
 | 
					    // #[Valid]
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:AccountingCustomerParty')]
 | 
				
			||||||
 | 
					    // public $AccountingCustomerParty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var PayeeParty */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:PayeeParty')]
 | 
				
			||||||
 | 
					    public $PayeeParty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var BuyerCustomerParty */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:BuyerCustomerParty')]
 | 
				
			||||||
 | 
					    // public $BuyerCustomerParty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var SellerSupplierParty */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:SellerSupplierParty')]
 | 
				
			||||||
 | 
					    // public $SellerSupplierParty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var TaxRepresentativeParty */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:TaxRepresentativeParty')]
 | 
				
			||||||
 | 
					    public $TaxRepresentativeParty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var Delivery[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:Delivery')]
 | 
				
			||||||
 | 
					    public array $Delivery;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var DeliveryTerms */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:DeliveryTerms')]
 | 
				
			||||||
 | 
					    public $DeliveryTerms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var PaymentMeans[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:PaymentMeans')]
 | 
				
			||||||
 | 
					    public array $PaymentMeans;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** @var PaymentTerms[] */
 | 
				
			||||||
 | 
					    #[SerializedName('cac:PaymentTerms')]
 | 
				
			||||||
 | 
					    public array $PaymentTerms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var PrepaidPayment[] */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:PrepaidPayment')]
 | 
				
			||||||
 | 
					    // public array $PrepaidPayment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var AllowanceCharge[] */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:AllowanceCharge')]
 | 
				
			||||||
 | 
					    // public array $AllowanceCharge;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var TaxExchangeRate */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:TaxExchangeRate')]
 | 
				
			||||||
 | 
					    // public $TaxExchangeRate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var PricingExchangeRate */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:PricingExchangeRate')]
 | 
				
			||||||
 | 
					    // public $PricingExchangeRate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var PaymentExchangeRate */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:PaymentExchangeRate')]
 | 
				
			||||||
 | 
					    // public $PaymentExchangeRate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var PaymentAlternativeExchangeRate */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:PaymentAlternativeExchangeRate')]
 | 
				
			||||||
 | 
					    // public $PaymentAlternativeExchangeRate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var TaxTotal[] */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:TaxTotal')]
 | 
				
			||||||
 | 
					    // public array $TaxTotal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var WithholdingTaxTotal[] */
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:WithholdingTaxTotal')]
 | 
				
			||||||
 | 
					    // public array $WithholdingTaxTotal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var LegalMonetaryTotal */
 | 
				
			||||||
 | 
					    // #[NotNull]
 | 
				
			||||||
 | 
					    // #[NotBlank]
 | 
				
			||||||
 | 
					    // #[Valid]
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:LegalMonetaryTotal')]
 | 
				
			||||||
 | 
					    // public $LegalMonetaryTotal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // /** @var InvoiceLine[] */
 | 
				
			||||||
 | 
					    // #[NotNull]
 | 
				
			||||||
 | 
					    // #[NotBlank]
 | 
				
			||||||
 | 
					    // #[Valid]
 | 
				
			||||||
 | 
					    // #[SerializedName('cac:InvoiceLine')]
 | 
				
			||||||
 | 
					    // public array $InvoiceLine;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										45
									
								
								app/Services/Vendor/VendorService.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								app/Services/Vendor/VendorService.php
									
									
									
									
										vendored
									
									
								
							@ -12,10 +12,55 @@
 | 
				
			|||||||
namespace App\Services\Vendor;
 | 
					namespace App\Services\Vendor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use App\Models\Vendor;
 | 
					use App\Models\Vendor;
 | 
				
			||||||
 | 
					use App\Utils\Traits\GeneratesCounter;
 | 
				
			||||||
 | 
					use Illuminate\Database\QueryException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VendorService
 | 
					class VendorService
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    use GeneratesCounter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private bool $completed = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function __construct(public Vendor $vendor)
 | 
					    public function __construct(public Vendor $vendor)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function applyNumber(): self
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $x = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(isset($this->vendor->number)) {
 | 
				
			||||||
 | 
					            return $this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        do {
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
 | 
					                $this->vendor->number = $this->getNextVendorNumber($this->vendor);
 | 
				
			||||||
 | 
					                $this->vendor->saveQuietly();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $this->completed = false;
 | 
				
			||||||
 | 
					            } catch (QueryException $e) {
 | 
				
			||||||
 | 
					                $x++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if ($x > 50) {
 | 
				
			||||||
 | 
					                    $this->completed = false;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } while ($this->completed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $this;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Saves the vendor instance
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return Vendor The Vendor Model
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function save(): Vendor
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->vendor->saveQuietly();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $this->vendor->fresh();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -211,7 +211,7 @@ class CompanyTransformer extends EntityTransformer
 | 
				
			|||||||
            'smtp_password' => $company->smtp_password ? '********' : '',
 | 
					            'smtp_password' => $company->smtp_password ? '********' : '',
 | 
				
			||||||
            'smtp_local_domain' => (string)$company->smtp_local_domain ?? '',
 | 
					            'smtp_local_domain' => (string)$company->smtp_local_domain ?? '',
 | 
				
			||||||
            'smtp_verify_peer' => (bool)$company->smtp_verify_peer,
 | 
					            'smtp_verify_peer' => (bool)$company->smtp_verify_peer,
 | 
				
			||||||
            'e_invoice' => $company->e_invoice ?: new \stdClass(),
 | 
					            // 'e_invoice' => $company->e_invoice ?: new \stdClass(),
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace App\Utils;
 | 
					namespace App\Utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use LimitIterator;
 | 
				
			||||||
 | 
					use SplFileObject;
 | 
				
			||||||
use App\Libraries\MultiDB;
 | 
					use App\Libraries\MultiDB;
 | 
				
			||||||
use App\Mail\TestMailServer;
 | 
					use App\Mail\TestMailServer;
 | 
				
			||||||
use Exception;
 | 
					use Exception;
 | 
				
			||||||
@ -43,7 +45,7 @@ class SystemHealth
 | 
				
			|||||||
     * @param bool $check_database
 | 
					     * @param bool $check_database
 | 
				
			||||||
     * @return     array  Result set of checks
 | 
					     * @return     array  Result set of checks
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public static function check($check_database = true): array
 | 
					    public static function check($check_database = true, $check_file_system = true): array
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $system_health = true;
 | 
					        $system_health = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -78,14 +80,16 @@ class SystemHealth
 | 
				
			|||||||
            'open_basedir' => (bool) self::checkOpenBaseDir(),
 | 
					            'open_basedir' => (bool) self::checkOpenBaseDir(),
 | 
				
			||||||
            'mail_mailer' => (string) self::checkMailMailer(),
 | 
					            'mail_mailer' => (string) self::checkMailMailer(),
 | 
				
			||||||
            'flutter_renderer' => (string) config('ninja.flutter_canvas_kit'),
 | 
					            'flutter_renderer' => (string) config('ninja.flutter_canvas_kit'),
 | 
				
			||||||
            'jobs_pending' => (int) self::checkQueueSize(),
 | 
					 | 
				
			||||||
            'pdf_engine' => (string) self::getPdfEngine(),
 | 
					            'pdf_engine' => (string) self::getPdfEngine(),
 | 
				
			||||||
            'queue' => (string) config('queue.default'),
 | 
					            'queue' => (string) config('queue.default'),
 | 
				
			||||||
 | 
					            'queue_data' => self::checkQueueData(),
 | 
				
			||||||
 | 
					            'jobs_pending' => 0, // TODO for backwards compatibility, remove once Flutter AP is updated
 | 
				
			||||||
            'trailing_slash' => (bool) self::checkUrlState(),
 | 
					            'trailing_slash' => (bool) self::checkUrlState(),
 | 
				
			||||||
            'file_permissions' => (string) self::checkFileSystem(),
 | 
					            'file_permissions' => (string) ($check_file_system ? self::checkFileSystem() : ''),
 | 
				
			||||||
            'exchange_rate_api_not_configured' => (bool)self::checkCurrencySanity(),
 | 
					            'exchange_rate_api_not_configured' => (bool)self::checkCurrencySanity(),
 | 
				
			||||||
            'api_version' => (string) config('ninja.app_version'),
 | 
					            'api_version' => (string) config('ninja.app_version'),
 | 
				
			||||||
            'is_docker' => (bool) config('ninja.is_docker'),
 | 
					            'is_docker' => (bool) config('ninja.is_docker'),
 | 
				
			||||||
 | 
					            'pending_migrations' => self::checkPendingMigrations(),
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -117,16 +121,28 @@ class SystemHealth
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static function checkQueueSize()
 | 
					    private static function checkQueueData()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $count = 0;
 | 
					        $pending = 0;
 | 
				
			||||||
 | 
					        $failed = 0;
 | 
				
			||||||
 | 
					        $last_error = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            $count = Queue::size();
 | 
					            $pending = DB::table('jobs')->count();
 | 
				
			||||||
 | 
					            $failed = DB::table('failed_jobs')->count();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ($failed > 0) {
 | 
				
			||||||
 | 
					                $failed_job = DB::table('failed_jobs')->latest('failed_at')->first();
 | 
				
			||||||
 | 
					                $last_error = $failed_job->exception;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } catch (\Exception $e) {
 | 
					        } catch (\Exception $e) {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $count;
 | 
					        return [
 | 
				
			||||||
 | 
					            'failed' => $failed,
 | 
				
			||||||
 | 
					            'pending' => $pending,
 | 
				
			||||||
 | 
					            'last_error' => $last_error,
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static function checkFileSystem()
 | 
					    public static function checkFileSystem()
 | 
				
			||||||
@ -157,6 +173,17 @@ class SystemHealth
 | 
				
			|||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static function checkPendingMigrations()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $run_count = DB::table('migrations')->count();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $directory = base_path('database/migrations');
 | 
				
			||||||
 | 
					        $iterator = new \FilesystemIterator($directory);
 | 
				
			||||||
 | 
					        $total_count = iterator_count($iterator) - 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $run_count != $total_count;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static function getPdfEngine()
 | 
					    public static function getPdfEngine()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (config('ninja.invoiceninja_hosted_pdf_generation') || config('ninja.pdf_generator') == 'hosted_ninja') {
 | 
					        if (config('ninja.invoiceninja_hosted_pdf_generation') || config('ninja.pdf_generator') == 'hosted_ninja') {
 | 
				
			||||||
@ -322,4 +349,24 @@ class SystemHealth
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        return is_writable(base_path().'/.env');
 | 
					        return is_writable(base_path().'/.env');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static function lastError()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $log_file = new SplFileObject(sprintf('%s/laravel.log', base_path('storage/logs')));
 | 
				
			||||||
 | 
					        $log_file->seek(PHP_INT_MAX);
 | 
				
			||||||
 | 
					        $last_line = $log_file->key();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $lines = new LimitIterator($log_file, max(0, $last_line - 500), $last_line);
 | 
				
			||||||
 | 
					        $log_lines = iterator_to_array($lines);
 | 
				
			||||||
 | 
					        $last_error = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($lines as $line) {
 | 
				
			||||||
 | 
					            // Match the main error, ie. [2024-07-10 12:23:07] production.ERROR: ...
 | 
				
			||||||
 | 
					            if (substr($line, 0, 2) === '[2') {
 | 
				
			||||||
 | 
					                $last_error = $line;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $last_error;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ trait AppSetup
 | 
				
			|||||||
            return Ninja::isNinja();
 | 
					            return Ninja::isNinja();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $check = SystemHealth::check();
 | 
					        $check = SystemHealth::check(true, false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $check['system_health'] == 'true';
 | 
					        return $check['system_health'] == 'true';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -82,7 +82,7 @@ trait MakesReminders
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private function checkEndlessReminder($last_sent_date, $endless_reminder_frequency_id): bool
 | 
					    private function checkEndlessReminder($last_sent_date, $endless_reminder_frequency_id): bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if(!$last_sent_date)
 | 
					        if(is_null($last_sent_date) || !$last_sent_date)
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        if (Carbon::now()->startOfDay()->eq($this->addTimeInterval($last_sent_date, $endless_reminder_frequency_id))) {
 | 
					        if (Carbon::now()->startOfDay()->eq($this->addTimeInterval($last_sent_date, $endless_reminder_frequency_id))) {
 | 
				
			||||||
 | 
				
			|||||||
@ -17,8 +17,8 @@ return [
 | 
				
			|||||||
    'require_https' => env('REQUIRE_HTTPS', true),
 | 
					    'require_https' => env('REQUIRE_HTTPS', true),
 | 
				
			||||||
    'app_url' => rtrim(env('APP_URL', ''), '/'),
 | 
					    'app_url' => rtrim(env('APP_URL', ''), '/'),
 | 
				
			||||||
    'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
 | 
					    'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
 | 
				
			||||||
    'app_version' => env('APP_VERSION', '5.10.5'),
 | 
					    'app_version' => env('APP_VERSION', '5.10.8'),
 | 
				
			||||||
    'app_tag' => env('APP_TAG', '5.10.5'),
 | 
					    'app_tag' => env('APP_TAG', '5.10.8'),
 | 
				
			||||||
    'minimum_client_version' => '5.0.16',
 | 
					    'minimum_client_version' => '5.0.16',
 | 
				
			||||||
    'terms_version' => '1.0.1',
 | 
					    'terms_version' => '1.0.1',
 | 
				
			||||||
    'api_secret' => env('API_SECRET', false),
 | 
					    'api_secret' => env('API_SECRET', false),
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					<?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('invoices', function (Blueprint $table){
 | 
				
			||||||
 | 
					            $table->index(['project_id','deleted_at']);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Schema::table('quotes', function (Blueprint $table) {
 | 
				
			||||||
 | 
					            $table->index(['project_id','deleted_at']);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Reverse the migrations.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function down(): void
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
@ -5285,7 +5285,7 @@ $lang = array(
 | 
				
			|||||||
    'remind_quote' => 'Remind Quote',
 | 
					    'remind_quote' => 'Remind Quote',
 | 
				
			||||||
    'end_of_month' => 'End Of Month',
 | 
					    'end_of_month' => 'End Of Month',
 | 
				
			||||||
    'tax_currency_mismatch' => 'Tax currency is different from invoice currency',
 | 
					    'tax_currency_mismatch' => 'Tax currency is different from invoice currency',
 | 
				
			||||||
    'edocument_import_already_exists' => '\nThe invoice has already been imported on :date'
 | 
					    'edocument_import_already_exists' => 'The invoice has already been imported on :date'
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return $lang;
 | 
					return $lang;
 | 
				
			||||||
 | 
				
			|||||||
@ -3786,7 +3786,7 @@ $lang = array(
 | 
				
			|||||||
    'entity_number_placeholder' => ':entity # :entity_number',
 | 
					    'entity_number_placeholder' => ':entity # :entity_number',
 | 
				
			||||||
    'email_link_not_working' => 'If the button above isn\'t working for you, please click on the link',
 | 
					    'email_link_not_working' => 'If the button above isn\'t working for you, please click on the link',
 | 
				
			||||||
    'display_log' => 'Display Log',
 | 
					    'display_log' => 'Display Log',
 | 
				
			||||||
    'send_fail_logs_to_our_server' => 'Report errors in realtime',
 | 
					    'send_fail_logs_to_our_server' => 'Report errors to help improve the app',
 | 
				
			||||||
    'setup' => 'Setup',
 | 
					    'setup' => 'Setup',
 | 
				
			||||||
    'quick_overview_statistics' => 'Quick overview & statistics',
 | 
					    'quick_overview_statistics' => 'Quick overview & statistics',
 | 
				
			||||||
    'update_your_personal_info' => 'Update your personal information',
 | 
					    'update_your_personal_info' => 'Update your personal information',
 | 
				
			||||||
@ -5286,7 +5286,7 @@ $lang = array(
 | 
				
			|||||||
    'remind_quote' => 'Remind Quote',
 | 
					    'remind_quote' => 'Remind Quote',
 | 
				
			||||||
    'end_of_month' => 'End Of Month',
 | 
					    'end_of_month' => 'End Of Month',
 | 
				
			||||||
    'tax_currency_mismatch' => 'Tax currency is different from invoice currency',
 | 
					    'tax_currency_mismatch' => 'Tax currency is different from invoice currency',
 | 
				
			||||||
    'edocument_import_already_exists' => '\nThe invoice has already been imported on :date',
 | 
					    'edocument_import_already_exists' => 'The invoice has already been imported on :date',
 | 
				
			||||||
    'before_valid_until' => 'Before the valid until',
 | 
					    'before_valid_until' => 'Before the valid until',
 | 
				
			||||||
    'after_valid_until' => 'After the valid until',
 | 
					    'after_valid_until' => 'After the valid until',
 | 
				
			||||||
    'task_assigned_notification' => 'Task Assigned Notification',
 | 
					    'task_assigned_notification' => 'Task Assigned Notification',
 | 
				
			||||||
@ -5296,6 +5296,9 @@ $lang = array(
 | 
				
			|||||||
    'add_comment' => 'Add Comment',
 | 
					    'add_comment' => 'Add Comment',
 | 
				
			||||||
    'added_comment' => 'Successfully saved comment',
 | 
					    'added_comment' => 'Successfully saved comment',
 | 
				
			||||||
    'tickets' => 'Tickets',
 | 
					    'tickets' => 'Tickets',
 | 
				
			||||||
 | 
					    'assigned_group' => 'Successfully assigned group',
 | 
				
			||||||
 | 
					    'merge_to_pdf' => 'Merge to PDF',
 | 
				
			||||||
 | 
					    'latest_requires_php_version' => 'Note: the latest version requires PHP :version',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return $lang;
 | 
					return $lang;
 | 
				
			||||||
 | 
				
			|||||||
@ -199,7 +199,7 @@ $lang = array(
 | 
				
			|||||||
    'removed_logo' => 'Successfully removed logo',
 | 
					    'removed_logo' => 'Successfully removed logo',
 | 
				
			||||||
    'sent_message' => 'Successfully sent message',
 | 
					    'sent_message' => 'Successfully sent message',
 | 
				
			||||||
    'invoice_error' => 'Please make sure to select a client and correct any errors',
 | 
					    '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.',
 | 
					    'payment_error' => 'There was an error processing your payment. Please try again later.',
 | 
				
			||||||
    'registration_required' => 'Registration Required',
 | 
					    'registration_required' => 'Registration Required',
 | 
				
			||||||
    'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
 | 
					    'confirmation_required' => 'Please confirm your email address, :link to resend the confirmation email.',
 | 
				
			||||||
@ -2364,7 +2364,7 @@ $lang = array(
 | 
				
			|||||||
    'currency_gold_troy_ounce' => 'Gold Troy Ounce',
 | 
					    'currency_gold_troy_ounce' => 'Gold Troy Ounce',
 | 
				
			||||||
    'currency_nicaraguan_córdoba' => 'Nicaraguan Córdoba',
 | 
					    'currency_nicaraguan_córdoba' => 'Nicaraguan Córdoba',
 | 
				
			||||||
    'currency_malagasy_ariary' => 'Malagasy ariary',
 | 
					    '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!',
 | 
					    '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',
 | 
					    'writing_a_review' => 'writing a review',
 | 
				
			||||||
@ -2695,7 +2695,7 @@ $lang = array(
 | 
				
			|||||||
    'no_assets' => 'No images, drag to upload',
 | 
					    'no_assets' => 'No images, drag to upload',
 | 
				
			||||||
    'add_image' => 'Add Image',
 | 
					    'add_image' => 'Add Image',
 | 
				
			||||||
    'select_image' => 'Select 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' => 'Delete Image',
 | 
				
			||||||
    'delete_image_help' => 'Warning: deleting the image will remove it from all proposals.',
 | 
					    '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.',
 | 
					    'amount_variable_help' => 'Note: the invoice $amount field will use the partial/deposit field if set otherwise it will use the invoice balance.',
 | 
				
			||||||
@ -2783,7 +2783,7 @@ $lang = array(
 | 
				
			|||||||
    'paid_invoice' => 'Paid Invoice',
 | 
					    'paid_invoice' => 'Paid Invoice',
 | 
				
			||||||
    'unapproved_quote' => 'Unapproved Quote',
 | 
					    'unapproved_quote' => 'Unapproved Quote',
 | 
				
			||||||
    'unapproved_proposal' => 'Unapproved Proposal',
 | 
					    'unapproved_proposal' => 'Unapproved Proposal',
 | 
				
			||||||
    'autofills_city_state' => 'Auto-fills city/state',
 | 
					    'autofills_city_state' => 'Auto-fills city/county',
 | 
				
			||||||
    'no_match_found' => 'No match found',
 | 
					    'no_match_found' => 'No match found',
 | 
				
			||||||
    'password_strength' => 'Password Strength',
 | 
					    'password_strength' => 'Password Strength',
 | 
				
			||||||
    'strength_weak' => 'Weak',
 | 
					    'strength_weak' => 'Weak',
 | 
				
			||||||
@ -2880,19 +2880,6 @@ $lang = array(
 | 
				
			|||||||
    'refunded' => 'Refunded',
 | 
					    'refunded' => 'Refunded',
 | 
				
			||||||
    'marked_quote_as_sent' => 'Successfully marked quote as sent',
 | 
					    'marked_quote_as_sent' => 'Successfully marked quote as sent',
 | 
				
			||||||
    'custom_module_settings' => 'Custom Module Settings',
 | 
					    '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',
 | 
					    'open' => 'Open',
 | 
				
			||||||
    'new' => 'New',
 | 
					    'new' => 'New',
 | 
				
			||||||
    'closed' => 'Closed',
 | 
					    'closed' => 'Closed',
 | 
				
			||||||
@ -2909,14 +2896,6 @@ $lang = array(
 | 
				
			|||||||
    'assigned_to' => 'Assigned to',
 | 
					    'assigned_to' => 'Assigned to',
 | 
				
			||||||
    'reply' => 'Reply',
 | 
					    'reply' => 'Reply',
 | 
				
			||||||
    'awaiting_reply' => 'Awaiting 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',
 | 
					    'mark_spam' => 'Mark as Spam',
 | 
				
			||||||
    'local_part' => 'Local Part',
 | 
					    'local_part' => 'Local Part',
 | 
				
			||||||
    'local_part_unavailable' => 'Name taken',
 | 
					    'local_part_unavailable' => 'Name taken',
 | 
				
			||||||
@ -2943,66 +2922,25 @@ $lang = array(
 | 
				
			|||||||
    'close_ticket_autoresponder_help' => 'Selecting a template will send an auto response to a client/contact when a ticket is closed',
 | 
					    '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',
 | 
					    'default_priority' => 'Default priority',
 | 
				
			||||||
    'alert_new_comment_id' => 'New comment',
 | 
					    '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',
 | 
					    'update_ticket_notification_list' => 'Additional new comment notifications',
 | 
				
			||||||
    'comma_separated_values' => 'admin@example.com, supervisor@example.com',
 | 
					    '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.',
 | 
					 | 
				
			||||||
    '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' => 'Default Agent',
 | 
				
			||||||
    'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
 | 
					    'default_agent_help' => 'If selected will automatically be assigned to all inbound tickets',
 | 
				
			||||||
    'show_agent_details' => 'Show agent details on responses',
 | 
					    'show_agent_details' => 'Show agent details on responses',
 | 
				
			||||||
    'avatar' => 'Avatar',
 | 
					    'avatar' => 'Avatar',
 | 
				
			||||||
    'remove_avatar' => 'Remove avatar',
 | 
					    'remove_avatar' => 'Remove avatar',
 | 
				
			||||||
    'ticket_not_found' => 'Ticket not found',
 | 
					 | 
				
			||||||
    'add_template' => 'Add Template',
 | 
					    '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',
 | 
					    'archive_ticket_template' => 'Archive Template',
 | 
				
			||||||
    'restore_ticket_template' => 'Restore Template',
 | 
					    'restore_ticket_template' => 'Restore Template',
 | 
				
			||||||
    'archived_ticket_template' => 'Successfully archived template',
 | 
					    'archived_ticket_template' => 'Successfully archived template',
 | 
				
			||||||
    'restored_ticket_template' => 'Successfully restored 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',
 | 
					    'enter_ticket_message' => 'Please enter a message to update the ticket',
 | 
				
			||||||
    'show_hide_all' => 'Show / Hide all',
 | 
					    'show_hide_all' => 'Show / Hide all',
 | 
				
			||||||
    'subject_required' => 'Subject required',
 | 
					    'subject_required' => 'Subject required',
 | 
				
			||||||
    'mobile_refresh_warning' => 'If you\'re using the mobile app you may need to do a full refresh.',
 | 
					    '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',
 | 
					    'merge' => 'Merge',
 | 
				
			||||||
    'merged' => 'Merged',
 | 
					    'merged' => 'Merged',
 | 
				
			||||||
    'agent' => 'Agent',
 | 
					    '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',
 | 
					    'include_in_filter' => 'Include in filter',
 | 
				
			||||||
    'custom_client1' => ':VALUE',
 | 
					    'custom_client1' => ':VALUE',
 | 
				
			||||||
    'custom_client2' => ':VALUE',
 | 
					    'custom_client2' => ':VALUE',
 | 
				
			||||||
@ -3340,7 +3278,7 @@ $lang = array(
 | 
				
			|||||||
    'email_subject_payment' => 'Email Payment Subject',
 | 
					    'email_subject_payment' => 'Email Payment Subject',
 | 
				
			||||||
    'switch_list_table' => 'Switch List Table',
 | 
					    'switch_list_table' => 'Switch List Table',
 | 
				
			||||||
    'client_city' => 'Client City',
 | 
					    'client_city' => 'Client City',
 | 
				
			||||||
    'client_state' => 'Client State',
 | 
					    'client_state' => 'Client County',
 | 
				
			||||||
    'client_country' => 'Client Country',
 | 
					    'client_country' => 'Client Country',
 | 
				
			||||||
    'client_is_active' => 'Client is Active',
 | 
					    'client_is_active' => 'Client is Active',
 | 
				
			||||||
    'client_balance' => 'Client Balance',
 | 
					    'client_balance' => 'Client Balance',
 | 
				
			||||||
@ -3363,7 +3301,7 @@ $lang = array(
 | 
				
			|||||||
    'custom_surcharge4' => 'Custom Surcharge 4',
 | 
					    'custom_surcharge4' => 'Custom Surcharge 4',
 | 
				
			||||||
    'is_deleted' => 'Is Deleted',
 | 
					    'is_deleted' => 'Is Deleted',
 | 
				
			||||||
    'vendor_city' => 'Vendor City',
 | 
					    'vendor_city' => 'Vendor City',
 | 
				
			||||||
    'vendor_state' => 'Vendor State',
 | 
					    'vendor_state' => 'Vendor County',
 | 
				
			||||||
    'vendor_country' => 'Vendor Country',
 | 
					    'vendor_country' => 'Vendor Country',
 | 
				
			||||||
    'credit_footer' => 'Credit Footer',
 | 
					    'credit_footer' => 'Credit Footer',
 | 
				
			||||||
    'credit_terms' => 'Credit Terms',
 | 
					    'credit_terms' => 'Credit Terms',
 | 
				
			||||||
@ -4437,7 +4375,7 @@ $lang = array(
 | 
				
			|||||||
    'client_shipping_country' => 'Client Shipping Country',
 | 
					    'client_shipping_country' => 'Client Shipping Country',
 | 
				
			||||||
    'load_pdf' => 'Load PDF',
 | 
					    'load_pdf' => 'Load PDF',
 | 
				
			||||||
    'start_free_trial' => 'Start Free Trial',
 | 
					    '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',
 | 
					    'due_on_receipt' => 'Due on Receipt',
 | 
				
			||||||
    'is_paid' => 'Is Paid',
 | 
					    'is_paid' => 'Is Paid',
 | 
				
			||||||
    'age_group_paid' => 'Paid',
 | 
					    'age_group_paid' => 'Paid',
 | 
				
			||||||
@ -5147,7 +5085,7 @@ $lang = array(
 | 
				
			|||||||
    'payment_refund_receipt' => 'Payment Refund Receipt # :number',
 | 
					    'payment_refund_receipt' => 'Payment Refund Receipt # :number',
 | 
				
			||||||
    'payment_receipt' => 'Payment Receipt # :number',
 | 
					    'payment_receipt' => 'Payment Receipt # :number',
 | 
				
			||||||
    'load_template_description' => 'The template will be applied to following:',
 | 
					    'load_template_description' => 'The template will be applied to following:',
 | 
				
			||||||
    'run_template' => 'Run template',
 | 
					    'run_template' => 'Run Template',
 | 
				
			||||||
    'statement_design' => 'Statement Design',
 | 
					    'statement_design' => 'Statement Design',
 | 
				
			||||||
    'delivery_note_design' => 'Delivery Note Design',
 | 
					    'delivery_note_design' => 'Delivery Note Design',
 | 
				
			||||||
    'payment_receipt_design' => 'Payment Receipt Design',
 | 
					    'payment_receipt_design' => 'Payment Receipt Design',
 | 
				
			||||||
@ -5306,18 +5244,20 @@ $lang = array(
 | 
				
			|||||||
    'activity_140' => 'Statement sent to :client',
 | 
					    'activity_140' => 'Statement sent to :client',
 | 
				
			||||||
    'invoice_net_amount' => 'Invoice Net Amount',
 | 
					    'invoice_net_amount' => 'Invoice Net Amount',
 | 
				
			||||||
    'round_to_minutes' => 'Round To Minutes',
 | 
					    'round_to_minutes' => 'Round To Minutes',
 | 
				
			||||||
 | 
					    '1_second' => '1 Second',
 | 
				
			||||||
    '1_minute' => '1 Minute',
 | 
					    '1_minute' => '1 Minute',
 | 
				
			||||||
    '5_minutes' => '5 Minutes',
 | 
					    '5_minutes' => '5 Minutes',
 | 
				
			||||||
    '15_minutes' => '15 Minutes',
 | 
					    '15_minutes' => '15 Minutes',
 | 
				
			||||||
    '30_minutes' => '30 Minutes',
 | 
					    '30_minutes' => '30 Minutes',
 | 
				
			||||||
    '1_hour' => '1 Hour',
 | 
					    '1_hour' => '1 Hour',
 | 
				
			||||||
    '1_day' => '1 Day',
 | 
					    '1_day' => '1 Day',
 | 
				
			||||||
    'round_tasks' => 'Round Tasks',
 | 
					    'round_tasks' => 'Task Rounding Direction',
 | 
				
			||||||
    'round_tasks_help' => 'Round time intervals when saving tasks',
 | 
					    'round_tasks_help' => 'Round task times up or down.',
 | 
				
			||||||
    'direction' => 'Direction',
 | 
					    'direction' => 'Direction',
 | 
				
			||||||
    'round_up' => 'Round Up',
 | 
					    'round_up' => 'Round Up',
 | 
				
			||||||
    'round_down' => 'Round Down',
 | 
					    'round_down' => 'Round Down',
 | 
				
			||||||
    'task_round_to_nearest' => 'Round To Nearest',
 | 
					    '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_updated' => 'Successfully updated data',
 | 
				
			||||||
    'bulk_update' => 'Bulk Update',
 | 
					    'bulk_update' => 'Bulk Update',
 | 
				
			||||||
    'calculate' => 'Calculate',
 | 
					    'calculate' => 'Calculate',
 | 
				
			||||||
@ -5325,6 +5265,37 @@ $lang = array(
 | 
				
			|||||||
    'money' => 'Money',
 | 
					    'money' => 'Money',
 | 
				
			||||||
    'web_app' => 'Web App',
 | 
					    'web_app' => 'Web App',
 | 
				
			||||||
    'desktop_app' => 'Desktop 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',
 | 
				
			||||||
 | 
					    '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',
 | 
				
			||||||
 | 
					    'before_valid_until' => 'Before the valid until',
 | 
				
			||||||
 | 
					    'after_valid_until' => 'After the valid until',
 | 
				
			||||||
 | 
					    'task_assigned_notification' => 'Task Assigned Notification',
 | 
				
			||||||
 | 
					    'task_assigned_notification_help' => 'Send an email when a task is assigned',
 | 
				
			||||||
 | 
					    'invoices_locked_end_of_month' => 'Invoices are locked at the end of the month',
 | 
				
			||||||
 | 
					    'referral_url' => 'Referral URL',
 | 
				
			||||||
 | 
					    'add_comment' => 'Add Comment',
 | 
				
			||||||
 | 
					    'added_comment' => 'Successfully saved comment',
 | 
				
			||||||
 | 
					    'tickets' => 'Tickets',
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return $lang;
 | 
					return $lang;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										578
									
								
								public/flutter_service_worker.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										578
									
								
								public/flutter_service_worker.js
									
									
									
									
										vendored
									
									
								
							@ -5,311 +5,311 @@ const CACHE_NAME = 'flutter-app-cache';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const RESOURCES = {"icons/Icon-512.png": "0f9aff01367f0a0c69773d25ca16ef35",
 | 
					const RESOURCES = {"icons/Icon-512.png": "0f9aff01367f0a0c69773d25ca16ef35",
 | 
				
			||||||
"icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed",
 | 
					"icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed",
 | 
				
			||||||
"flutter.js": "c71a09214cb6f5f8996a531350400a9a",
 | 
					"manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40",
 | 
				
			||||||
"canvaskit/skwasm.worker.js": "bfb704a6c714a75da9ef320991e88b03",
 | 
					 | 
				
			||||||
"canvaskit/skwasm.js": "445e9e400085faead4493be2224d95aa",
 | 
					 | 
				
			||||||
"canvaskit/canvaskit.js.symbols": "38cba9233b92472a36ff011dc21c2c9f",
 | 
					 | 
				
			||||||
"canvaskit/skwasm.js.symbols": "741d50ffba71f89345996b0aa8426af8",
 | 
					 | 
				
			||||||
"canvaskit/chromium/canvaskit.js.symbols": "4525682ef039faeb11f24f37436dca06",
 | 
					 | 
				
			||||||
"canvaskit/chromium/canvaskit.js": "43787ac5098c648979c27c13c6f804c3",
 | 
					 | 
				
			||||||
"canvaskit/chromium/canvaskit.wasm": "f5934e694f12929ed56a671617acd254",
 | 
					 | 
				
			||||||
"canvaskit/canvaskit.js": "c86fbd9e7b17accae76e5ad116583dc4",
 | 
					"canvaskit/canvaskit.js": "c86fbd9e7b17accae76e5ad116583dc4",
 | 
				
			||||||
 | 
					"canvaskit/canvaskit.js.symbols": "38cba9233b92472a36ff011dc21c2c9f",
 | 
				
			||||||
 | 
					"canvaskit/chromium/canvaskit.js": "43787ac5098c648979c27c13c6f804c3",
 | 
				
			||||||
 | 
					"canvaskit/chromium/canvaskit.js.symbols": "4525682ef039faeb11f24f37436dca06",
 | 
				
			||||||
 | 
					"canvaskit/chromium/canvaskit.wasm": "f5934e694f12929ed56a671617acd254",
 | 
				
			||||||
"canvaskit/canvaskit.wasm": "3d2a2d663e8c5111ac61a46367f751ac",
 | 
					"canvaskit/canvaskit.wasm": "3d2a2d663e8c5111ac61a46367f751ac",
 | 
				
			||||||
"canvaskit/skwasm.wasm": "e42815763c5d05bba43f9d0337fa7d84",
 | 
					"canvaskit/skwasm.wasm": "e42815763c5d05bba43f9d0337fa7d84",
 | 
				
			||||||
 | 
					"canvaskit/skwasm.js.symbols": "741d50ffba71f89345996b0aa8426af8",
 | 
				
			||||||
 | 
					"canvaskit/skwasm.js": "445e9e400085faead4493be2224d95aa",
 | 
				
			||||||
 | 
					"canvaskit/skwasm.worker.js": "bfb704a6c714a75da9ef320991e88b03",
 | 
				
			||||||
 | 
					"flutter.js": "c71a09214cb6f5f8996a531350400a9a",
 | 
				
			||||||
"version.json": "f789e711f61e122f41a7eda7522a1fba",
 | 
					"version.json": "f789e711f61e122f41a7eda7522a1fba",
 | 
				
			||||||
"favicon.png": "dca91c54388f52eded692718d5a98b8b",
 | 
					"favicon.png": "dca91c54388f52eded692718d5a98b8b",
 | 
				
			||||||
"main.dart.js": "6acd51f637b30ad5fc3bc0ad9ebb3cf0",
 | 
					 | 
				
			||||||
"assets/NOTICES": "412b336cf9e33e70058d612857effae1",
 | 
					 | 
				
			||||||
"assets/AssetManifest.bin": "bf3be26e7055ad9a32f66b3a56138224",
 | 
					 | 
				
			||||||
"assets/assets/images/logo_light.png": "e5f46d5a78e226e7a9553d4ca6f69219",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/other.png": "d936e11fa3884b8c9f1bd5c914be8629",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/paypal.png": "8e06c094c1871376dfea1da8088c29d1",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/maestro.png": "e533b92bfb50339fdbfa79e3dfe81f08",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/carteblanche.png": "d936e11fa3884b8c9f1bd5c914be8629",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/visa.png": "3ddc4a4d25c946e8ad7e6998f30fd4e3",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/amex.png": "c49a4247984b3732a4af50a3390aa978",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/discover.png": "6c0a386a00307f87db7bea366cca35f5",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/jcb.png": "07e0942d16c5592118b72e74f2f7198c",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/laser.png": "b4e6e93dd35517ac429301119ff05868",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/ach.png": "7433f0aff779dc98a649b7a2daf777cf",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/switch.png": "4fa11c45327f5fdc20205821b2cfd9cc",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/unionpay.png": "7002f52004e0ab8cc0b7450b0208ccb2",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/dinerscard.png": "06d85186ba858c18ab7c9caa42c92024",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/solo.png": "2030c3ccaccf5d5e87916a62f5b084d6",
 | 
					 | 
				
			||||||
"assets/assets/images/payment_types/mastercard.png": "6f6cdc29ee2e22e06b1ac029cb52ef71",
 | 
					 | 
				
			||||||
"assets/assets/images/icon.png": "090f69e23311a4b6d851b3880ae52541",
 | 
					 | 
				
			||||||
"assets/assets/images/logo_dark.png": "a233ed1d4d0f7414bf97a9a10f11fb0a",
 | 
					 | 
				
			||||||
"assets/assets/images/google_logo.png": "0f118259ce403274f407f5e982e681c3",
 | 
					 | 
				
			||||||
"assets/assets/google_fonts/Roboto-Regular.ttf": "8a36205bd9b83e03af0591a004bc97f4",
 | 
					 | 
				
			||||||
"assets/shaders/ink_sparkle.frag": "ecc85a2e95f5e9f53123dcaf8cb9b6ce",
 | 
					 | 
				
			||||||
"assets/packages/material_design_icons_flutter/lib/fonts/materialdesignicons-webfont.ttf": "3759b2f7a51e83c64a58cfe07b96a8ee",
 | 
					"assets/packages/material_design_icons_flutter/lib/fonts/materialdesignicons-webfont.ttf": "3759b2f7a51e83c64a58cfe07b96a8ee",
 | 
				
			||||||
"assets/packages/window_manager/images/ic_chrome_close.png": "75f4b8ab3608a05461a31fc18d6b47c2",
 | 
					 | 
				
			||||||
"assets/packages/window_manager/images/ic_chrome_unmaximize.png": "4a90c1909cb74e8f0d35794e2f61d8bf",
 | 
					 | 
				
			||||||
"assets/packages/window_manager/images/ic_chrome_minimize.png": "4282cd84cb36edf2efb950ad9269ca62",
 | 
					 | 
				
			||||||
"assets/packages/window_manager/images/ic_chrome_maximize.png": "af7499d7657c8b69d23b85156b60298c",
 | 
					"assets/packages/window_manager/images/ic_chrome_maximize.png": "af7499d7657c8b69d23b85156b60298c",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/kn.png": "f318e2fd87e5fd2cabefe9ff252bba46",
 | 
					"assets/packages/window_manager/images/ic_chrome_minimize.png": "4282cd84cb36edf2efb950ad9269ca62",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tg.png": "7f91f02b26b74899ff882868bd611714",
 | 
					"assets/packages/window_manager/images/ic_chrome_unmaximize.png": "4a90c1909cb74e8f0d35794e2f61d8bf",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gb-nir.png": "98773db151c150cabe845183241bfe6b",
 | 
					"assets/packages/window_manager/images/ic_chrome_close.png": "75f4b8ab3608a05461a31fc18d6b47c2",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cr.png": "bfd8b41e63fc3cc829c72c4b2e170532",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/me.png": "590284bc85810635ace30a173e615ca4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mx.png": "84b12a569b209e213daccfcbdd1fc799",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ve.png": "893391d65cbd10ca787a73578c77d3a7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/io.png": "83d45bbbff087d47b2b39f1c20598f52",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gq.png": "4286e56f388a37f64b21eb56550c06d9",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/si.png": "24237e53b34752554915e71e346bb405",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mm.png": "32e5293d6029d8294c7dfc3c3835c222",
 | 
					"assets/packages/intl_phone_field/assets/flags/mm.png": "32e5293d6029d8294c7dfc3c3835c222",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/fi.png": "3ccd69a842e55183415b7ea2c04b15c8",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tr.png": "27feab1a5ca390610d07e0c6bd4720d5",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/my.png": "f7f962e8a074387fd568c9d4024e0959",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/hk.png": "4b5ec424348c98ec71a46ad3dce3931d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mh.png": "18dda388ef5c1cf37cae5e7d5fef39bc",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/br.png": "5093e0cd8fd3c094664cd17ea8a36fd1",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/nz.png": "65c811e96eb6c9da65538f899c110895",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mz.png": "1ab1ac750fbbb453d33e9f25850ac2a0",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/td.png": "009303b6188ca0e30bd50074b16f0b16",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/dz.png": "132ceca353a95c8214676b2e94ecd40f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cn.png": "040539c2cdb60ebd9dc8957cdc6a8ad0",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pe.png": "4d9249aab70a26fadabb14380b3b55d2",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tj.png": "c73b793f2acd262e71b9236e64c77636",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/id.png": "80bb82d11d5bc144a21042e77972bca9",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cz.png": "73ecd64c6144786c4d03729b1dd9b1f3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cc.png": "31a475216e12fef447382c97b42876ce",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/hr.png": "69711b2ea009a3e7c40045b538768d4e",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mf.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mk.png": "835f2263974de523fa779d29c90595bf",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/lv.png": "53105fea0cc9cc554e0ceaabc53a2d5d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/zm.png": "81cec35b715f227328cad8f314acd797",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ch.png": "a251702f7760b0aac141428ed60b7b66",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cy.png": "7b36f4af86257a3f15f5a5a16f4a2fcd",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/by.png": "beabf61e94fb3a4f7c7a7890488b213d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bb.png": "a8473747387e4e7a8450c499529f1c93",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ai.png": "ce5e91ed1725f0499b9231b69a7fd448",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sn.png": "68eaa89bbc83b3f356e1ba2096b09b3c",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/at.png": "570c070177a5ea0fe03e20107ebf5283",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ru.png": "6974dcb42ad7eb3add1009ea0c6003e3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pn.png": "0b0641b356af4c3e3489192ff4b0be77",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sc.png": "e969fd5afb1eb5902675b6bcf49a8c2e",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/na.png": "cdc00e9267a873609b0abea944939ff7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ag.png": "41c11d5668c93ba6e452f811defdbb24",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pm.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ro.png": "85af99741fe20664d9a7112cfd8d9722",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mo.png": "849848a26bbfc87024017418ad7a6233",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/um.png": "8fe7c4fed0a065fdfb9bd3125c6ecaa1",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/th.png": "11ce0c9f8c738fd217ea52b9bc29014b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pl.png": "f20e9ef473a9ed24176f5ad74dd0d50a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sm.png": "a8d6801cb7c5360e18f0a2ed146b396d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/fk.png": "da8b0fe48829aae2c8feb4839895de63",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tv.png": "c57025ed7ae482210f29b9da86b0d211",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gb-sct.png": "75106a5e49e3e16da76cb33bdac102ab",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ci.png": "7f5ca3779d5ff6ce0c803a6efa0d2da7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/eh.png": "515a9cf2620c802e305b5412ac81aed2",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/vi.png": "3f317c56f31971b3179abd4e03847036",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/kp.png": "e1c8bb52f31fca22d3368d8f492d8f27",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ws.png": "f206322f3e22f175869869dbfadb6ce8",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tm.png": "0980fb40ec450f70896f2c588510f933",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/lb.png": "f80cde345f0d9bd0086531808ce5166a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gg.png": "eed435d25bd755aa7f9cd7004b9ed49d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/lu.png": "6274fd1cae3c7a425d25e4ccb0941bb8",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ph.png": "e4025d1395a8455f1ba038597a95228c",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/za.png": "b28280c6c3eb4624c18b5455d4a1b1ff",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sk.png": "2a1ee716d4b41c017ff1dbf3fd3ffc64",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/lc.png": "8c1a03a592aa0a99fcaf2b81508a87eb",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bh.png": "a1acd86ef0e19ea5f0297bbe1de6cfd4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/md.png": "8911d3d821b95b00abbba8771e997eb3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pa.png": "78e3e4fd56f0064837098fe3f22fb41b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ao.png": "5f0a372aa3aa7150a3dafea97acfc10d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gb.png": "98773db151c150cabe845183241bfe6b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/hm.png": "72be14316f0af3903cdca7a726c0c589",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mp.png": "87351c30a529071ee9a4bb67765fea4f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/nu.png": "f4169998548e312584c67873e0d9352d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ly.png": "8d65057351859065d64b4c118ff9e30e",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/se.png": "25dd5434891ac1ca2ad1af59cda70f80",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gn.png": "b2287c03c88a72d968aa796a076ba056",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gl.png": "b79e24ee1889b7446ba3d65564b86810",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tn.png": "6612e9fec4bef022cbd45cbb7c02b2b6",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/jo.png": "c01cb41f74f9db0cf07ba20f0af83011",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/lk.png": "5a3a063cfff4a92fb0ba6158e610e025",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/es.png": "654965f9722f6706586476fb2f5d30dd",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/wf.png": "6f1644b8f907d197c0ff7ed2f366ad64",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cw.png": "6c598eb0d331d6b238da57055ec00d33",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ye.png": "4cf73209d90e9f02ead1565c8fdf59e5",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mq.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/al.png": "722cf9e5c7a1d9c9e4608fb44dbb427d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gd.png": "7a4864ccfa2a0564041c2d1f8a13a8c9",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bt.png": "3cfe1440e952bc7266d71f7f1454fa23",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/is.png": "907840430252c431518005b562707831",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/vc.png": "da3ca14a978717467abbcdece05d3544",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cv.png": "9b1f31f9fc0795d728328dedd33eb1c0",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pt.png": "eba93d33545c78cc67915d9be8323661",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pg.png": "0f7e03465a93e0b4e3e1c9d3dd5814a4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/kz.png": "cb3b0095281c9d7e7fb5ce1716ef8ee5",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/re.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/jp.png": "25ac778acd990bedcfdc02a9b4570045",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sr.png": "9f912879f2829a625436ccd15e643e39",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ne.png": "a20724c177e86d6a27143aa9c9664a6f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ga.png": "b0e5b2fa1b7106c7652a955db24c11c4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/it.png": "5c8e910e6a33ec63dfcda6e8960dd19c",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/kh.png": "d48d51e8769a26930da6edfc15de97fe",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/km.png": "5554c8746c16d4f482986fb78ffd9b36",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gf.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/aw.png": "a93ddf8e32d246dc47f6631f38e0ed92",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sv.png": "217b691efbef7a0f48cdd53e91997f0e",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pk.png": "7a6a621f7062589677b3296ca16c6718",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gu.png": "2acb614b442e55864411b6e418df6eab",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gi.png": "446aa44aaa063d240adab88243b460d3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/eu.png": "c58ece3931acb87faadc5b940d4f7755",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/nl.png": "3649c177693bfee9c2fcc63c191a51f1",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bw.png": "fac8b90d7404728c08686dc39bab4fb3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/st.png": "fef62c31713ff1063da2564df3f43eea",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/vu.png": "3f201fdfb6d669a64c35c20a801016d1",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ki.png": "14db0fc29398730064503907bd696176",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tt.png": "a8e1fc5c65dc8bc362a9453fadf9c4b3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/be.png": "7e5e1831cdd91935b38415479a7110eb",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ht.png": "630f7f8567d87409a32955107ad11a86",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gy.png": "159a260bf0217128ea7475ba5b272b6a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pw.png": "2e697cc6907a7b94c7f94f5d9b3bdccc",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/li.png": "ecdf7b3fe932378b110851674335d9ab",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bn.png": "ed650de06fff61ff27ec92a872197948",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ec.png": "c1ae60d080be91f3be31e92e0a2d9555",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/af.png": "ba710b50a060b5351381b55366396c30",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/kg.png": "c4aa6d221d9a9d332155518d6b82dbc7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/aq.png": "0c586e7b91aa192758fdd0f03adb84d8",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/us.png": "83b065848d14d33c0d10a13e01862f34",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ss.png": "b0120cb000b31bb1a5c801c3592139bc",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gr.png": "ec11281d7decbf07b81a23a72a609b59",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ug.png": "9a0f358b1eb19863e21ae2063fab51c0",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ua.png": "b4b10d893611470661b079cb30473871",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/fj.png": "1c6a86752578eb132390febf12789cd6",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mt.png": "f3119401ae0c3a9d6e2dc23803928c06",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tw.png": "b1101fd5f871a9ffe7c9ad191a7d3304",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ml.png": "0c50dfd539e87bb4313da0d4556e2d13",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gs.png": "419dd57836797a3f1bf6258ea6589f9a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tf.png": "b2c044b86509e7960b5ba66b094ea285",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cd.png": "5b5f832ed6cd9f9240cb31229d8763dc",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/dk.png": "abcd01bdbcc02b4a29cbac237f29cd1d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/np.png": "6e099fb1e063930bdd00e8df5cef73d4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bs.png": "2b9540c4fa514f71911a48de0bd77e71",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mn.png": "16086e8d89c9067d29fd0f2ea7021a45",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ke.png": "cf5aae3699d3cacb39db9803edae172b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ls.png": "2bca756f9313957347404557acb532b0",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ie.png": "1d91912afc591dd120b47b56ea78cdbf",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/rw.png": "d1aae0647a5b1ab977ae43ab894ce2c3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/dj.png": "078bd37d41f746c3cb2d84c1e9611c55",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mu.png": "c5228d1e94501d846b5bf203f038ae49",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/fo.png": "2c7d9233582e83a86927e634897a2a90",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bi.png": "adda8121501f0543f1075244a1acc275",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/py.png": "154d4add03b4878caf00bd3249e14f40",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/uy.png": "da4247b21fcbd9e30dc2b3f7c5dccb64",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bg.png": "1d24bc616e3389684ed2c9f18bcb0209",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ni.png": "e398dc23e79d9ccd702546cc25f126bf",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/hu.png": "281582a753e643b46bdd894047db08bb",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sj.png": "33bc70259c4908b7b9adeef9436f7a9f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gb-wls.png": "d7d7c77c72cd425d993bdc50720f4d04",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/co.png": "e3b1be16dcdae6cb72e9c238fdddce3c",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/qa.png": "eb9b3388e554cf85aea1e739247548df",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ge.png": "6fbd41f07921fa415347ebf6dff5b0f7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pr.png": "b97b2f4432c430bc340d893f36527e31",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/am.png": "aaa39141fbc80205bebaa0200b55a13a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gm.png": "7148d3715527544c2e7d8d6f4a445bb6",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ar.png": "3bd245f8c28f70c9ef9626dae27adc65",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bj.png": "6fdc6449f73d23ad3f07060f92db4423",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/au.png": "72be14316f0af3903cdca7a726c0c589",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gp.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sy.png": "24186a0f4ce804a16c91592db5a16a3a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/fr.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/vn.png": "32ff65ccbf31a707a195be2a5141a89b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/no.png": "33bc70259c4908b7b9adeef9436f7a9f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cf.png": "263583ffdf7a888ce4fba8487d1da0b2",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tz.png": "56ec99c7e0f68b88a2210620d873683a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/xk.png": "079259fbcb1f3c78dafa944464295c16",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cl.png": "6735e0e2d88c119e9ed1533be5249ef1",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/jm.png": "074400103847c56c37425a73f9d23665",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/in.png": "1dec13ba525529cffd4c7f8a35d51121",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sl.png": "61b9d992c8a6a83abc4d432069617811",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mr.png": "f2a62602d43a1ee14625af165b96ce2f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bq.png": "3649c177693bfee9c2fcc63c191a51f1",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bf.png": "63f1c67fca7ce8b52b3418a90af6ad37",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/et.png": "57edff61c7fddf2761a19948acef1498",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sx.png": "9c19254973d8acf81581ad95b408c7e6",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gb-eng.png": "0d9f2a6775fd52b79e1d78eb1dda10cf",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/lr.png": "b92c75e18dd97349c75d6a43bd17ee94",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/eg.png": "311d780e8e3dd43f87e6070f6feb74c7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sz.png": "d1829842e45c2b2b29222c1b7e201591",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/yt.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/to.png": "1cdd716b5b5502f85d6161dac6ee6c5b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/la.png": "e8cd9c3ee6e134adcbe3e986e1974e4a",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ir.png": "37f67c3141e9843196cb94815be7bd37",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tl.png": "c80876dc80cda5ab6bb8ef078bc6b05d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/kw.png": "3ca448e219d0df506fb2efd5b91be092",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cm.png": "42d52fa71e8b4dbb182ff431749e8d0d",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bz.png": "fd2d7d27a5ddabe4eb9a10b1d3a433e4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sa.png": "7c95c1a877148e2aa21a213d720ff4fd",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/nf.png": "1c2069b299ce3660a2a95ec574dfde25",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/nr.png": "1316f3a8a419d8be1975912c712535ea",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/nc.png": "cb36e0c945b79d56def11b23c6a9c7e9",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ms.png": "9c955a926cf7d57fccb450a97192afa7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gw.png": "05606b9a6393971bd87718b809e054f9",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sh.png": "98773db151c150cabe845183241bfe6b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ba.png": "d415bad33b35de3f095177e8e86cbc82",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mc.png": "90c2ad7f144d73d4650cbea9dd621275",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sb.png": "296ecedbd8d1c2a6422c3ba8e5cd54bd",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/hn.png": "9ecf68aed83c4a9b3f1e6275d96bfb04",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/rs.png": "9dff535d2d08c504be63062f39eff0b7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/je.png": "288f8dca26098e83ff0455b08cceca1b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/kr.png": "a3b7da3b76b20a70e9cd63cc2315b51b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/pf.png": "1ae72c24380d087cbe2d0cd6c3b58821",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/zw.png": "078a3267ea8eabf88b2d43fe4aed5ce5",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ps.png": "52a25a48658ca9274830ffa124a8c1db",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bl.png": "dae94f5465d3390fdc5929e4f74d3f5f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ck.png": "39f343868a8dc8ca95d27b27a5caf480",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/do.png": "ed35983a9263bb5713be37d9a52caddc",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sg.png": "bc772e50b8c79f08f3c2189f5d8ce491",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/az.png": "6ffa766f6883d2d3d350cdc22a062ca3",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ee.png": "e242645cae28bd5291116ea211f9a566",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/iq.png": "bc3e6f68c5188dbf99b473e2bea066f2",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cu.png": "f41715bd51f63a9aebf543788543b4c4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ae.png": "792efc5eb6c31d780bd34bf4bad69f3f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/il.png": "1e06ad7783f24332405d36561024cc4c",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/fm.png": "d571b8bc4b80980a81a5edbde788b6d2",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mw.png": "ffc1f18eeedc1dfbb1080aa985ce7d05",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/lt.png": "7df2cd6566725685f7feb2051f916a3e",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/an.png": "4e4b90fbca1275d1839ca5b44fc51071",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cx.png": "8efa3231c8a3900a78f2b51d829f8c52",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tc.png": "d728d6763c17c520ad6bcf3c24282a29",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mg.png": "0ef6271ad284ebc0069ff0aeb5a3ad1e",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/so.png": "1ce20d052f9d057250be96f42647513b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ky.png": "38e39eba673e82c48a1f25bd103a7e97",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/dm.png": "8886b222ed9ccd00f67e8bcf86dadcc2",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/va.png": "c010bf145f695d5c8fb551bafc081f77",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ad.png": "384e9845debe9aca8f8586d9bedcb7e6",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/om.png": "cebd9ab4b9ab071b2142e21ae2129efc",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gh.png": "b35464dca793fa33e51bf890b5f3d92b",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/as.png": "d9c1da515c6f945c2e2554592a9dfaae",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bd.png": "86a0e4bd8787dc8542137a407e0f987f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/im.png": "7c9ccb825f0fca557d795c4330cf4f50",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bo.png": "3ccf6fa7f9cbc27949b8418925e4e89c",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/cg.png": "eca97338cc1cb5b5e91bec72af57b3d4",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ng.png": "aedbe364bd1543832e88e64b5817e877",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/mv.png": "d9245f74e34d5c054413ace4b86b4f16",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/de.png": "5d9561246523cf6183928756fd605e25",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/uz.png": "3adad3bac322220cac8abc1c7cbaacac",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bm.png": "b366ba84cbc8286c830f392bb9086be5",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ma.png": "057ea2e08587f1361b3547556adae0c2",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/bv.png": "33bc70259c4908b7b9adeef9436f7a9f",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/er.png": "8ca78e10878a2e97c1371b38c5d258a7",
 | 
					 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/tk.png": "60428ff1cdbae680e5a0b8cde4677dd5",
 | 
					"assets/packages/intl_phone_field/assets/flags/tk.png": "60428ff1cdbae680e5a0b8cde4677dd5",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ca.png": "76f2fac1d3b2cc52ba6695c2e2941632",
 | 
					"assets/packages/intl_phone_field/assets/flags/ws.png": "f206322f3e22f175869869dbfadb6ce8",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ss.png": "b0120cb000b31bb1a5c801c3592139bc",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/me.png": "590284bc85810635ace30a173e615ca4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pf.png": "1ae72c24380d087cbe2d0cd6c3b58821",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/vi.png": "3f317c56f31971b3179abd4e03847036",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/dm.png": "8886b222ed9ccd00f67e8bcf86dadcc2",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/kg.png": "c4aa6d221d9a9d332155518d6b82dbc7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/lb.png": "f80cde345f0d9bd0086531808ce5166a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sb.png": "296ecedbd8d1c2a6422c3ba8e5cd54bd",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gu.png": "2acb614b442e55864411b6e418df6eab",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bz.png": "fd2d7d27a5ddabe4eb9a10b1d3a433e4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/by.png": "beabf61e94fb3a4f7c7a7890488b213d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/km.png": "5554c8746c16d4f482986fb78ffd9b36",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/jp.png": "25ac778acd990bedcfdc02a9b4570045",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pw.png": "2e697cc6907a7b94c7f94f5d9b3bdccc",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/dk.png": "abcd01bdbcc02b4a29cbac237f29cd1d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ph.png": "e4025d1395a8455f1ba038597a95228c",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/lk.png": "5a3a063cfff4a92fb0ba6158e610e025",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/fo.png": "2c7d9233582e83a86927e634897a2a90",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tf.png": "b2c044b86509e7960b5ba66b094ea285",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/so.png": "1ce20d052f9d057250be96f42647513b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ru.png": "6974dcb42ad7eb3add1009ea0c6003e3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mh.png": "18dda388ef5c1cf37cae5e7d5fef39bc",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/de.png": "5d9561246523cf6183928756fd605e25",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/lr.png": "b92c75e18dd97349c75d6a43bd17ee94",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/br.png": "5093e0cd8fd3c094664cd17ea8a36fd1",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ao.png": "5f0a372aa3aa7150a3dafea97acfc10d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sg.png": "bc772e50b8c79f08f3c2189f5d8ce491",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tl.png": "c80876dc80cda5ab6bb8ef078bc6b05d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bm.png": "b366ba84cbc8286c830f392bb9086be5",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/hn.png": "9ecf68aed83c4a9b3f1e6275d96bfb04",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ma.png": "057ea2e08587f1361b3547556adae0c2",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pr.png": "b97b2f4432c430bc340d893f36527e31",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ly.png": "8d65057351859065d64b4c118ff9e30e",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ga.png": "b0e5b2fa1b7106c7652a955db24c11c4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/af.png": "ba710b50a060b5351381b55366396c30",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/hr.png": "69711b2ea009a3e7c40045b538768d4e",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ye.png": "4cf73209d90e9f02ead1565c8fdf59e5",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ag.png": "41c11d5668c93ba6e452f811defdbb24",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/us.png": "83b065848d14d33c0d10a13e01862f34",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mz.png": "1ab1ac750fbbb453d33e9f25850ac2a0",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ge.png": "6fbd41f07921fa415347ebf6dff5b0f7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bh.png": "a1acd86ef0e19ea5f0297bbe1de6cfd4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sv.png": "217b691efbef7a0f48cdd53e91997f0e",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/co.png": "e3b1be16dcdae6cb72e9c238fdddce3c",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/se.png": "25dd5434891ac1ca2ad1af59cda70f80",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sc.png": "e969fd5afb1eb5902675b6bcf49a8c2e",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/vu.png": "3f201fdfb6d669a64c35c20a801016d1",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cu.png": "f41715bd51f63a9aebf543788543b4c4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gb-eng.png": "0d9f2a6775fd52b79e1d78eb1dda10cf",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sh.png": "98773db151c150cabe845183241bfe6b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/eg.png": "311d780e8e3dd43f87e6070f6feb74c7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cf.png": "263583ffdf7a888ce4fba8487d1da0b2",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/lc.png": "8c1a03a592aa0a99fcaf2b81508a87eb",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/py.png": "154d4add03b4878caf00bd3249e14f40",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tj.png": "c73b793f2acd262e71b9236e64c77636",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/nz.png": "65c811e96eb6c9da65538f899c110895",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mp.png": "87351c30a529071ee9a4bb67765fea4f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mo.png": "849848a26bbfc87024017418ad7a6233",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pa.png": "78e3e4fd56f0064837098fe3f22fb41b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/nl.png": "3649c177693bfee9c2fcc63c191a51f1",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cm.png": "42d52fa71e8b4dbb182ff431749e8d0d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gb-nir.png": "98773db151c150cabe845183241bfe6b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/id.png": "80bb82d11d5bc144a21042e77972bca9",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gb.png": "98773db151c150cabe845183241bfe6b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/an.png": "4e4b90fbca1275d1839ca5b44fc51071",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sm.png": "a8d6801cb7c5360e18f0a2ed146b396d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/to.png": "1cdd716b5b5502f85d6161dac6ee6c5b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cx.png": "8efa3231c8a3900a78f2b51d829f8c52",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/vn.png": "32ff65ccbf31a707a195be2a5141a89b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mc.png": "90c2ad7f144d73d4650cbea9dd621275",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tt.png": "a8e1fc5c65dc8bc362a9453fadf9c4b3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ae.png": "792efc5eb6c31d780bd34bf4bad69f3f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/am.png": "aaa39141fbc80205bebaa0200b55a13a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gs.png": "419dd57836797a3f1bf6258ea6589f9a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cn.png": "040539c2cdb60ebd9dc8957cdc6a8ad0",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cc.png": "31a475216e12fef447382c97b42876ce",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mx.png": "84b12a569b209e213daccfcbdd1fc799",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/nr.png": "1316f3a8a419d8be1975912c712535ea",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/is.png": "907840430252c431518005b562707831",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/vg.png": "fc095e11f5b58604d6f4d3c2b43d167f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gw.png": "05606b9a6393971bd87718b809e054f9",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/ax.png": "ec2062c36f09ed8fb90ac8992d010024",
 | 
					"assets/packages/intl_phone_field/assets/flags/ax.png": "ec2062c36f09ed8fb90ac8992d010024",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/gt.png": "706a0c3b5e0b589c843e2539e813839e",
 | 
					"assets/packages/intl_phone_field/assets/flags/gt.png": "706a0c3b5e0b589c843e2539e813839e",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/vg.png": "fc095e11f5b58604d6f4d3c2b43d167f",
 | 
					"assets/packages/intl_phone_field/assets/flags/tm.png": "0980fb40ec450f70896f2c588510f933",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ir.png": "37f67c3141e9843196cb94815be7bd37",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sa.png": "7c95c1a877148e2aa21a213d720ff4fd",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ee.png": "e242645cae28bd5291116ea211f9a566",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/lt.png": "7df2cd6566725685f7feb2051f916a3e",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ec.png": "c1ae60d080be91f3be31e92e0a2d9555",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/kh.png": "d48d51e8769a26930da6edfc15de97fe",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bf.png": "63f1c67fca7ce8b52b3418a90af6ad37",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/im.png": "7c9ccb825f0fca557d795c4330cf4f50",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/yt.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/fj.png": "1c6a86752578eb132390febf12789cd6",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pl.png": "f20e9ef473a9ed24176f5ad74dd0d50a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ro.png": "85af99741fe20664d9a7112cfd8d9722",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ki.png": "14db0fc29398730064503907bd696176",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/zw.png": "078a3267ea8eabf88b2d43fe4aed5ce5",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bs.png": "2b9540c4fa514f71911a48de0bd77e71",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/eu.png": "c58ece3931acb87faadc5b940d4f7755",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/kz.png": "cb3b0095281c9d7e7fb5ce1716ef8ee5",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pg.png": "0f7e03465a93e0b4e3e1c9d3dd5814a4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ad.png": "384e9845debe9aca8f8586d9bedcb7e6",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mv.png": "d9245f74e34d5c054413ace4b86b4f16",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/at.png": "570c070177a5ea0fe03e20107ebf5283",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/kn.png": "f318e2fd87e5fd2cabefe9ff252bba46",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/fr.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/wf.png": "6f1644b8f907d197c0ff7ed2f366ad64",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ps.png": "52a25a48658ca9274830ffa124a8c1db",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/fm.png": "d571b8bc4b80980a81a5edbde788b6d2",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/np.png": "6e099fb1e063930bdd00e8df5cef73d4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gi.png": "446aa44aaa063d240adab88243b460d3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gl.png": "b79e24ee1889b7446ba3d65564b86810",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/be.png": "7e5e1831cdd91935b38415479a7110eb",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cl.png": "6735e0e2d88c119e9ed1533be5249ef1",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gb-sct.png": "75106a5e49e3e16da76cb33bdac102ab",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gp.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gg.png": "eed435d25bd755aa7f9cd7004b9ed49d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bb.png": "a8473747387e4e7a8450c499529f1c93",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gr.png": "ec11281d7decbf07b81a23a72a609b59",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ug.png": "9a0f358b1eb19863e21ae2063fab51c0",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bv.png": "33bc70259c4908b7b9adeef9436f7a9f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/dj.png": "078bd37d41f746c3cb2d84c1e9611c55",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/xk.png": "079259fbcb1f3c78dafa944464295c16",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/iq.png": "bc3e6f68c5188dbf99b473e2bea066f2",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pm.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ne.png": "a20724c177e86d6a27143aa9c9664a6f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/nc.png": "cb36e0c945b79d56def11b23c6a9c7e9",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/no.png": "33bc70259c4908b7b9adeef9436f7a9f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ml.png": "0c50dfd539e87bb4313da0d4556e2d13",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tc.png": "d728d6763c17c520ad6bcf3c24282a29",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tn.png": "6612e9fec4bef022cbd45cbb7c02b2b6",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/si.png": "24237e53b34752554915e71e346bb405",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mg.png": "0ef6271ad284ebc0069ff0aeb5a3ad1e",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/nu.png": "f4169998548e312584c67873e0d9352d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/md.png": "8911d3d821b95b00abbba8771e997eb3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mt.png": "f3119401ae0c3a9d6e2dc23803928c06",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ch.png": "a251702f7760b0aac141428ed60b7b66",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ls.png": "2bca756f9313957347404557acb532b0",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/eh.png": "515a9cf2620c802e305b5412ac81aed2",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/vc.png": "da3ca14a978717467abbcdece05d3544",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/kp.png": "e1c8bb52f31fca22d3368d8f492d8f27",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/uz.png": "3adad3bac322220cac8abc1c7cbaacac",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gm.png": "7148d3715527544c2e7d8d6f4a445bb6",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/td.png": "009303b6188ca0e30bd50074b16f0b16",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pt.png": "eba93d33545c78cc67915d9be8323661",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cw.png": "6c598eb0d331d6b238da57055ec00d33",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bt.png": "3cfe1440e952bc7266d71f7f1454fa23",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mw.png": "ffc1f18eeedc1dfbb1080aa985ce7d05",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mn.png": "16086e8d89c9067d29fd0f2ea7021a45",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pk.png": "7a6a621f7062589677b3296ca16c6718",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tw.png": "b1101fd5f871a9ffe7c9ad191a7d3304",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sn.png": "68eaa89bbc83b3f356e1ba2096b09b3c",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/la.png": "e8cd9c3ee6e134adcbe3e986e1974e4a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/je.png": "288f8dca26098e83ff0455b08cceca1b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bi.png": "adda8121501f0543f1075244a1acc275",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bl.png": "dae94f5465d3390fdc5929e4f74d3f5f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sz.png": "d1829842e45c2b2b29222c1b7e201591",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/hu.png": "281582a753e643b46bdd894047db08bb",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/jm.png": "074400103847c56c37425a73f9d23665",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ve.png": "893391d65cbd10ca787a73578c77d3a7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/al.png": "722cf9e5c7a1d9c9e4608fb44dbb427d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/um.png": "8fe7c4fed0a065fdfb9bd3125c6ecaa1",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ai.png": "ce5e91ed1725f0499b9231b69a7fd448",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sl.png": "61b9d992c8a6a83abc4d432069617811",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bo.png": "3ccf6fa7f9cbc27949b8418925e4e89c",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gd.png": "7a4864ccfa2a0564041c2d1f8a13a8c9",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cg.png": "eca97338cc1cb5b5e91bec72af57b3d4",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cd.png": "5b5f832ed6cd9f9240cb31229d8763dc",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/zm.png": "81cec35b715f227328cad8f314acd797",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gf.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ke.png": "cf5aae3699d3cacb39db9803edae172b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/er.png": "8ca78e10878a2e97c1371b38c5d258a7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gn.png": "b2287c03c88a72d968aa796a076ba056",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bj.png": "6fdc6449f73d23ad3f07060f92db4423",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/il.png": "1e06ad7783f24332405d36561024cc4c",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tg.png": "7f91f02b26b74899ff882868bd611714",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/hk.png": "4b5ec424348c98ec71a46ad3dce3931d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bq.png": "3649c177693bfee9c2fcc63c191a51f1",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mr.png": "f2a62602d43a1ee14625af165b96ce2f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sr.png": "9f912879f2829a625436ccd15e643e39",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/aq.png": "0c586e7b91aa192758fdd0f03adb84d8",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/az.png": "6ffa766f6883d2d3d350cdc22a062ca3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/io.png": "83d45bbbff087d47b2b39f1c20598f52",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/li.png": "ecdf7b3fe932378b110851674335d9ab",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gb-wls.png": "d7d7c77c72cd425d993bdc50720f4d04",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/hm.png": "72be14316f0af3903cdca7a726c0c589",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/it.png": "5c8e910e6a33ec63dfcda6e8960dd19c",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gh.png": "b35464dca793fa33e51bf890b5f3d92b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pe.png": "4d9249aab70a26fadabb14380b3b55d2",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cv.png": "9b1f31f9fc0795d728328dedd33eb1c0",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ie.png": "1d91912afc591dd120b47b56ea78cdbf",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mk.png": "835f2263974de523fa779d29c90595bf",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/om.png": "cebd9ab4b9ab071b2142e21ae2129efc",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/my.png": "f7f962e8a074387fd568c9d4024e0959",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mf.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/fk.png": "da8b0fe48829aae2c8feb4839895de63",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/qa.png": "eb9b3388e554cf85aea1e739247548df",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/in.png": "1dec13ba525529cffd4c7f8a35d51121",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cr.png": "bfd8b41e63fc3cc829c72c4b2e170532",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sx.png": "9c19254973d8acf81581ad95b408c7e6",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ng.png": "aedbe364bd1543832e88e64b5817e877",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/kr.png": "a3b7da3b76b20a70e9cd63cc2315b51b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/jo.png": "c01cb41f74f9db0cf07ba20f0af83011",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/nf.png": "1c2069b299ce3660a2a95ec574dfde25",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gy.png": "159a260bf0217128ea7475ba5b272b6a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bw.png": "fac8b90d7404728c08686dc39bab4fb3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/aw.png": "a93ddf8e32d246dc47f6631f38e0ed92",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tr.png": "27feab1a5ca390610d07e0c6bd4720d5",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/na.png": "cdc00e9267a873609b0abea944939ff7",
 | 
				
			||||||
"assets/packages/intl_phone_field/assets/flags/sd.png": "65ce270762dfc87475ea99bd18f79025",
 | 
					"assets/packages/intl_phone_field/assets/flags/sd.png": "65ce270762dfc87475ea99bd18f79025",
 | 
				
			||||||
"assets/AssetManifest.bin.json": "611449d46e56c96b3baef404bfc56246",
 | 
					"assets/packages/intl_phone_field/assets/flags/kw.png": "3ca448e219d0df506fb2efd5b91be092",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sj.png": "33bc70259c4908b7b9adeef9436f7a9f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ar.png": "3bd245f8c28f70c9ef9626dae27adc65",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/rw.png": "d1aae0647a5b1ab977ae43ab894ce2c3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bg.png": "1d24bc616e3389684ed2c9f18bcb0209",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/gq.png": "4286e56f388a37f64b21eb56550c06d9",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/do.png": "ed35983a9263bb5713be37d9a52caddc",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cz.png": "73ecd64c6144786c4d03729b1dd9b1f3",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mu.png": "c5228d1e94501d846b5bf203f038ae49",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/va.png": "c010bf145f695d5c8fb551bafc081f77",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/za.png": "b28280c6c3eb4624c18b5455d4a1b1ff",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sy.png": "24186a0f4ce804a16c91592db5a16a3a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tv.png": "c57025ed7ae482210f29b9da86b0d211",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/tz.png": "56ec99c7e0f68b88a2210620d873683a",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/fi.png": "3ccd69a842e55183415b7ea2c04b15c8",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/dz.png": "132ceca353a95c8214676b2e94ecd40f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/as.png": "d9c1da515c6f945c2e2554592a9dfaae",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ck.png": "39f343868a8dc8ca95d27b27a5caf480",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/st.png": "fef62c31713ff1063da2564df3f43eea",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/lu.png": "6274fd1cae3c7a425d25e4ccb0941bb8",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ca.png": "76f2fac1d3b2cc52ba6695c2e2941632",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bd.png": "86a0e4bd8787dc8542137a407e0f987f",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ms.png": "9c955a926cf7d57fccb450a97192afa7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ba.png": "d415bad33b35de3f095177e8e86cbc82",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ci.png": "7f5ca3779d5ff6ce0c803a6efa0d2da7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/re.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ht.png": "630f7f8567d87409a32955107ad11a86",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/lv.png": "53105fea0cc9cc554e0ceaabc53a2d5d",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ua.png": "b4b10d893611470661b079cb30473871",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ky.png": "38e39eba673e82c48a1f25bd103a7e97",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/bn.png": "ed650de06fff61ff27ec92a872197948",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/mq.png": "134bee9f9d794dc5c0922d1b9bdbb710",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/ni.png": "e398dc23e79d9ccd702546cc25f126bf",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/rs.png": "9dff535d2d08c504be63062f39eff0b7",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/pn.png": "0b0641b356af4c3e3489192ff4b0be77",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/cy.png": "7b36f4af86257a3f15f5a5a16f4a2fcd",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/es.png": "654965f9722f6706586476fb2f5d30dd",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/et.png": "57edff61c7fddf2761a19948acef1498",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/au.png": "72be14316f0af3903cdca7a726c0c589",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/uy.png": "da4247b21fcbd9e30dc2b3f7c5dccb64",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/th.png": "11ce0c9f8c738fd217ea52b9bc29014b",
 | 
				
			||||||
 | 
					"assets/packages/intl_phone_field/assets/flags/sk.png": "2a1ee716d4b41c017ff1dbf3fd3ffc64",
 | 
				
			||||||
 | 
					"assets/NOTICES": "412b336cf9e33e70058d612857effae1",
 | 
				
			||||||
 | 
					"assets/AssetManifest.bin": "bf3be26e7055ad9a32f66b3a56138224",
 | 
				
			||||||
"assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1",
 | 
					"assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1",
 | 
				
			||||||
 | 
					"assets/AssetManifest.bin.json": "611449d46e56c96b3baef404bfc56246",
 | 
				
			||||||
 | 
					"assets/assets/google_fonts/Roboto-Regular.ttf": "8a36205bd9b83e03af0591a004bc97f4",
 | 
				
			||||||
 | 
					"assets/assets/images/google_logo.png": "0f118259ce403274f407f5e982e681c3",
 | 
				
			||||||
 | 
					"assets/assets/images/logo_dark.png": "a233ed1d4d0f7414bf97a9a10f11fb0a",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/visa.png": "3ddc4a4d25c946e8ad7e6998f30fd4e3",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/amex.png": "c49a4247984b3732a4af50a3390aa978",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/ach.png": "7433f0aff779dc98a649b7a2daf777cf",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/laser.png": "b4e6e93dd35517ac429301119ff05868",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/discover.png": "6c0a386a00307f87db7bea366cca35f5",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/unionpay.png": "7002f52004e0ab8cc0b7450b0208ccb2",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/carteblanche.png": "d936e11fa3884b8c9f1bd5c914be8629",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/switch.png": "4fa11c45327f5fdc20205821b2cfd9cc",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/dinerscard.png": "06d85186ba858c18ab7c9caa42c92024",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/jcb.png": "07e0942d16c5592118b72e74f2f7198c",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/other.png": "d936e11fa3884b8c9f1bd5c914be8629",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/maestro.png": "e533b92bfb50339fdbfa79e3dfe81f08",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/solo.png": "2030c3ccaccf5d5e87916a62f5b084d6",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/paypal.png": "8e06c094c1871376dfea1da8088c29d1",
 | 
				
			||||||
 | 
					"assets/assets/images/payment_types/mastercard.png": "6f6cdc29ee2e22e06b1ac029cb52ef71",
 | 
				
			||||||
 | 
					"assets/assets/images/icon.png": "090f69e23311a4b6d851b3880ae52541",
 | 
				
			||||||
 | 
					"assets/assets/images/logo_light.png": "e5f46d5a78e226e7a9553d4ca6f69219",
 | 
				
			||||||
"assets/fonts/MaterialIcons-Regular.otf": "a57618538ab8b4c4081d4491870ac333",
 | 
					"assets/fonts/MaterialIcons-Regular.otf": "a57618538ab8b4c4081d4491870ac333",
 | 
				
			||||||
"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
 | 
					"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
 | 
				
			||||||
"/": "09dd63a64a586d8b9ee7b21d2761a403",
 | 
					"assets/shaders/ink_sparkle.frag": "ecc85a2e95f5e9f53123dcaf8cb9b6ce",
 | 
				
			||||||
 | 
					"/": "b4ae35c60e383dbaea943020ee57bca5",
 | 
				
			||||||
"favicon.ico": "51636d3a390451561744c42188ccd628",
 | 
					"favicon.ico": "51636d3a390451561744c42188ccd628",
 | 
				
			||||||
"manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40"};
 | 
					"main.dart.js": "01b109a52b66680ee41d64c1d79cc807"};
 | 
				
			||||||
// The application shell files that are downloaded before a service worker can
 | 
					// The application shell files that are downloaded before a service worker can
 | 
				
			||||||
// start.
 | 
					// start.
 | 
				
			||||||
const CORE = ["main.dart.js",
 | 
					const CORE = ["main.dart.js",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										168093
									
								
								public/main.dart.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										168093
									
								
								public/main.dart.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										165575
									
								
								public/main.foss.dart.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										165575
									
								
								public/main.foss.dart.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										362
									
								
								public/main.profile.dart.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										362
									
								
								public/main.profile.dart.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1,6 +1,6 @@
 | 
				
			|||||||
<div>
 | 
					<div>
 | 
				
			||||||
  <div class="flex flex-row space-x-2 float-right mb-2" x-data>
 | 
					  <div class="flex flex-row space-x-2 float-right mb-2" x-data>
 | 
				
			||||||
    <button wire:loading.attr="disabled" wire:click="downloadPdf" class="bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
					    <button wire:loading.attr="disabled" wire:click="downloadPdf" class="button bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
				
			||||||
        <span class="mr-0">{{ ctrans('texts.download_pdf') }}</span>
 | 
					        <span class="mr-0">{{ ctrans('texts.download_pdf') }}</span>
 | 
				
			||||||
        <div wire:loading wire:target="downloadPdf">
 | 
					        <div wire:loading wire:target="downloadPdf">
 | 
				
			||||||
            <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
					            <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
				
			||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
    </button>
 | 
					    </button>
 | 
				
			||||||
    @if($entity_type == 'invoice' && $settings->enable_e_invoice)
 | 
					    @if($entity_type == 'invoice' && $settings->enable_e_invoice)
 | 
				
			||||||
    <button wire:loading.attr="disabled" wire:click="downloadEDocument" class="bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
					    <button wire:loading.attr="disabled" wire:click="downloadEDocument" class="button bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
				
			||||||
        <span>{{ ctrans('texts.download_e_invoice') }}</span>
 | 
					        <span>{{ ctrans('texts.download_e_invoice') }}</span>
 | 
				
			||||||
        <div wire:loading wire:target="downloadEDocument">
 | 
					        <div wire:loading wire:target="downloadEDocument">
 | 
				
			||||||
            <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
					            <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
				
			||||||
@ -21,7 +21,7 @@
 | 
				
			|||||||
    </button>
 | 
					    </button>
 | 
				
			||||||
    @endif
 | 
					    @endif
 | 
				
			||||||
      @if($entity_type == 'credit' && $settings->enable_e_invoice)
 | 
					      @if($entity_type == 'credit' && $settings->enable_e_invoice)
 | 
				
			||||||
          <button wire:loading.attr="disabled" wire:click="downloadEDocument" class="bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
					          <button wire:loading.attr="disabled" wire:click="downloadEDocument" class="button bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
				
			||||||
              <span>{{ ctrans('texts.download_e_credit') }}</span>
 | 
					              <span>{{ ctrans('texts.download_e_credit') }}</span>
 | 
				
			||||||
              <div wire:loading wire:target="downloadEDocument">
 | 
					              <div wire:loading wire:target="downloadEDocument">
 | 
				
			||||||
                  <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
					                  <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
				
			||||||
@ -32,7 +32,7 @@
 | 
				
			|||||||
          </button>
 | 
					          </button>
 | 
				
			||||||
      @endif
 | 
					      @endif
 | 
				
			||||||
      @if($entity_type == 'quote' && $settings->enable_e_invoice)
 | 
					      @if($entity_type == 'quote' && $settings->enable_e_invoice)
 | 
				
			||||||
          <button wire:loading.attr="disabled" wire:click="downloadEDocument" class="bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
					          <button wire:loading.attr="disabled" wire:click="downloadEDocument" class="button bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
				
			||||||
              <span>{{ ctrans('texts.download_e_quote') }}</span>
 | 
					              <span>{{ ctrans('texts.download_e_quote') }}</span>
 | 
				
			||||||
              <div wire:loading wire:target="downloadEDocument">
 | 
					              <div wire:loading wire:target="downloadEDocument">
 | 
				
			||||||
                  <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
					                  <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
				
			||||||
@ -44,7 +44,7 @@
 | 
				
			|||||||
      @endif
 | 
					      @endif
 | 
				
			||||||
{{--      Not implemented yet--}}
 | 
					{{--      Not implemented yet--}}
 | 
				
			||||||
{{--      @if($entity_type == 'purchase_order' && $settings->enable_e_invoice)
 | 
					{{--      @if($entity_type == 'purchase_order' && $settings->enable_e_invoice)
 | 
				
			||||||
          <button wire:loading.attr="disabled" wire:click="downloadEInvoice" class="bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
					          <button wire:loading.attr="disabled" wire:click="downloadEInvoice" class="button bg-primary text-white px-4 py-4 lg:px-2 lg:py-2 rounded" type="button">
 | 
				
			||||||
              <span>{{ ctrans('texts.download_e_invoice') }}</span>
 | 
					              <span>{{ ctrans('texts.download_e_invoice') }}</span>
 | 
				
			||||||
              <div wire:loading wire:target="downloadEInvoice">
 | 
					              <div wire:loading wire:target="downloadEInvoice">
 | 
				
			||||||
                  <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
					                  <svg class="animate-spin h-5 w-5 text-blue" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
 | 
				
			||||||
 | 
				
			|||||||
@ -9,16 +9,6 @@
 | 
				
			|||||||
                    <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                    <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                        {{ ctrans('texts.entity_number_placeholder', ['entity' => ctrans('texts.credit'), 'entity_number' => $credit->number]) }}
 | 
					                        {{ ctrans('texts.entity_number_placeholder', ['entity' => ctrans('texts.credit'), 'entity_number' => $credit->number]) }}
 | 
				
			||||||
                    </h3>
 | 
					                    </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    @if($key)
 | 
					 | 
				
			||||||
                    <div class="btn hidden md:block" data-clipboard-text="{{url("client/credit/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                        <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                            <p class="mr-2">{{url("client/credit/{$key}")}}</p>
 | 
					 | 
				
			||||||
                            <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                    @endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
@ -30,11 +20,16 @@
 | 
				
			|||||||
@endsection
 | 
					@endsection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@section('footer')
 | 
					@section('footer')
 | 
				
			||||||
    <script src="{{ asset('vendor/clipboard.min.js') }}"></script>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script type="text/javascript">
 | 
					    <script type="text/javascript">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var clipboard = new ClipboardJS('.btn');
 | 
					        document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @if($key)
 | 
				
			||||||
 | 
					                window.history.pushState({}, "", "{{ url("client/credit/{$key}") }}");
 | 
				
			||||||
 | 
					            @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
@endsection
 | 
					@endsection
 | 
				
			||||||
 | 
				
			|||||||
@ -56,17 +56,6 @@
 | 
				
			|||||||
                                {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}}
 | 
					                                {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}}
 | 
				
			||||||
                                - {{ ctrans('texts.unpaid') }}
 | 
					                                - {{ ctrans('texts.unpaid') }}
 | 
				
			||||||
                            </h3>
 | 
					                            </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @if($key)
 | 
					 | 
				
			||||||
                            <div class="btn hidden md:block" data-clipboard-text="{{url("client/invoice/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                                <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                                    <p class="mr-2">{{url("client/invoice/{$key}")}}</p>
 | 
					 | 
				
			||||||
                                    <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            @endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="mt-5 sm:mt-0 sm:ml-6 flex justify-end">
 | 
					                        <div class="mt-5 sm:mt-0 sm:ml-6 flex justify-end">
 | 
				
			||||||
                            <div class="inline-flex rounded-md shadow-sm">
 | 
					                            <div class="inline-flex rounded-md shadow-sm">
 | 
				
			||||||
@ -93,15 +82,6 @@
 | 
				
			|||||||
                            {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}}
 | 
					                            {{ ctrans('texts.invoice_number_placeholder', ['invoice' => $invoice->number])}}
 | 
				
			||||||
                            - {{ \App\Models\Invoice::stringStatus($invoice->status_id) }}
 | 
					                            - {{ \App\Models\Invoice::stringStatus($invoice->status_id) }}
 | 
				
			||||||
                        </h3>
 | 
					                        </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @if($key)
 | 
					 | 
				
			||||||
                            <div class="btn hidden md:block" data-clipboard-text="{{url("client/invoice/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                                <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                                    <p class="pr-10">{{url("client/invoice/{$key}")}}</p>
 | 
					 | 
				
			||||||
                                    <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            @endif
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@ -121,15 +101,16 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@push('head')
 | 
					@push('head')
 | 
				
			||||||
    @vite('resources/js/clients/invoices/payment.js')
 | 
					    @vite('resources/js/clients/invoices/payment.js')
 | 
				
			||||||
    <script src="{{ asset('vendor/clipboard.min.js') }}" defer></script>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script type="text/javascript">
 | 
					    <script type="text/javascript">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    document.addEventListener('DOMContentLoaded', () => {
 | 
					        document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var clipboard = new ClipboardJS('.btn');
 | 
					            @if($key)
 | 
				
			||||||
 | 
					                window.history.pushState({}, "", "{{ url("client/invoice/{$key}") }}");
 | 
				
			||||||
 | 
					            @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </script>
 | 
					    </script>
 | 
				
			||||||
@endpush
 | 
					@endpush
 | 
				
			||||||
 | 
				
			|||||||
@ -10,11 +10,17 @@
 | 
				
			|||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="col-span-2 h-screen flex">
 | 
					        <div class="col-span-2 h-screen flex">
 | 
				
			||||||
            <div class="m-auto md:w-1/2 lg:w-1/4 flex flex-col items-center">
 | 
					            <div class="m-auto md:w-1/2 lg:w-1/3 flex flex-col items-center">
 | 
				
			||||||
                <span class="flex items-center text-2xl">
 | 
					                <span class="flex items-center text-2xl">
 | 
				
			||||||
                    @yield('code') — @yield('message')
 | 
					                    @yield('code') — @yield('message')
 | 
				
			||||||
                </span>
 | 
					                </span>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                @if (\App\Utils\Ninja::isSelfHost())
 | 
				
			||||||
 | 
					                    <span class="flex items-center text-1xl">
 | 
				
			||||||
 | 
					                        Check storage/logs for more details
 | 
				
			||||||
 | 
					                    </span>
 | 
				
			||||||
 | 
					                @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <a class="button-link text-sm mt-2" href="{{ url(request()->getSchemeAndHttpHost() . '/client') }}">
 | 
					                <a class="button-link text-sm mt-2" href="{{ url(request()->getSchemeAndHttpHost() . '/client') }}">
 | 
				
			||||||
                    {{ ctrans('texts.back_to', ['url' => parse_url(request()->getHttpHost())['host'] ?? request()->getHttpHost()]) }}
 | 
					                    {{ ctrans('texts.back_to', ['url' => parse_url(request()->getHttpHost())['host'] ?? request()->getHttpHost()]) }}
 | 
				
			||||||
                </a>
 | 
					                </a>
 | 
				
			||||||
 | 
				
			|||||||
@ -10,18 +10,9 @@
 | 
				
			|||||||
    <div class="px-4 py-5 sm:p-6">
 | 
					    <div class="px-4 py-5 sm:p-6">
 | 
				
			||||||
        <div class="sm:flex sm:items-start sm:justify-between">
 | 
					        <div class="sm:flex sm:items-start sm:justify-between">
 | 
				
			||||||
            <div>
 | 
					            <div>
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
                <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                    {{ ctrans('texts.approve') }}
 | 
					                    {{ ctrans('texts.approve') }}
 | 
				
			||||||
                </h3>
 | 
					                </h3>
 | 
				
			||||||
                
 | 
					 | 
				
			||||||
                <div class="btn hidden md:block" data-clipboard-text="{{url("vendor/purchase_order/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                    <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                        <p class="mr-2">{{url("vendor/purchase_order/{$key}")}}</p>
 | 
					 | 
				
			||||||
                        <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="mt-5 sm:mt-0 sm:ml-6 sm:flex-shrink-0 sm:flex sm:items-center">
 | 
					            <div class="mt-5 sm:mt-0 sm:ml-6 sm:flex-shrink-0 sm:flex sm:items-center">
 | 
				
			||||||
 | 
				
			|||||||
@ -30,15 +30,6 @@
 | 
				
			|||||||
                            {{ ctrans('texts.purchase_order_number_placeholder', ['purchase_order' => $purchase_order->number])}}
 | 
					                            {{ ctrans('texts.purchase_order_number_placeholder', ['purchase_order' => $purchase_order->number])}}
 | 
				
			||||||
                            - {{ \App\Models\PurchaseOrder::stringStatus($purchase_order->status_id) }}
 | 
					                            - {{ \App\Models\PurchaseOrder::stringStatus($purchase_order->status_id) }}
 | 
				
			||||||
                        </h3>
 | 
					                        </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @if($key)
 | 
					 | 
				
			||||||
                            <div class="btn hidden md:block" data-clipboard-text="{{url("vendor/purchase_order/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                                <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                                    <p class="pr-10">{{url("vendor/purchase_order/{$key}")}}</p>
 | 
					 | 
				
			||||||
                                    <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            @endif
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@ -57,13 +48,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@push('head')
 | 
					@push('head')
 | 
				
			||||||
    @vite('resources/js/clients/purchase_orders/accept.js')
 | 
					    @vite('resources/js/clients/purchase_orders/accept.js')
 | 
				
			||||||
    <script src="{{ asset('vendor/clipboard.min.js') }}"  defer></script>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script type="text/javascript">
 | 
					    <script type="text/javascript">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        document.addEventListener('DOMContentLoaded', () => {
 | 
					        document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var clipboard = new ClipboardJS('.btn');
 | 
					            @if($key)
 | 
				
			||||||
 | 
					                window.history.pushState({}, "", "{{ url("vendor/purchase_order/{$key}") }}");
 | 
				
			||||||
 | 
					            @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,17 +11,9 @@
 | 
				
			|||||||
    <div class="px-4 py-5 sm:p-6">
 | 
					    <div class="px-4 py-5 sm:p-6">
 | 
				
			||||||
        <div class="sm:flex sm:items-start sm:justify-between">
 | 
					        <div class="sm:flex sm:items-start sm:justify-between">
 | 
				
			||||||
            <div>
 | 
					            <div>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                    {{ ctrans('texts.approve') }}
 | 
					                    {{ ctrans('texts.approve') }}
 | 
				
			||||||
                </h3>
 | 
					                </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                <div class="btn hidden md:block" data-clipboard-text="{{url("client/quote/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                    <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                        <p class="mr-2">{{url("client/quote/{$key}")}}</p>
 | 
					 | 
				
			||||||
                        <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="mt-5 sm:mt-0 sm:ml-6 sm:flex-shrink-0 sm:flex sm:items-center">
 | 
					            <div class="mt-5 sm:mt-0 sm:ml-6 sm:flex-shrink-0 sm:flex sm:items-center">
 | 
				
			||||||
 | 
				
			|||||||
@ -29,16 +29,6 @@
 | 
				
			|||||||
                        <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                        <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                            {{ ctrans('texts.approved') }}
 | 
					                            {{ ctrans('texts.approved') }}
 | 
				
			||||||
                        </h3>
 | 
					                        </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @if($key)
 | 
					 | 
				
			||||||
                            <div class="btn hidden md:block" data-clipboard-text="{{url("client/quote/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                                <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                                    <p class="mr-2">{{url("client/quote/{$key}")}}</p>
 | 
					 | 
				
			||||||
                                    <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            @endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                                @if($quote->invoice()->exists())
 | 
					                                @if($quote->invoice()->exists())
 | 
				
			||||||
@ -61,15 +51,6 @@
 | 
				
			|||||||
                        <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                        <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                            {{ ctrans('texts.approved') }}
 | 
					                            {{ ctrans('texts.approved') }}
 | 
				
			||||||
                        </h3>
 | 
					                        </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @if($key)
 | 
					 | 
				
			||||||
                            <div class="btn hidden md:block" data-clipboard-text="{{url("client/quote/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                                <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                                    <p class="mr-2">{{url("client/quote/{$key}")}}</p>
 | 
					 | 
				
			||||||
                                    <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            @endif
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@ -84,15 +65,6 @@
 | 
				
			|||||||
                        <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
					                        <h3 class="text-lg leading-6 font-medium text-gray-900">
 | 
				
			||||||
                            {{ ctrans('texts.expired') }}
 | 
					                            {{ ctrans('texts.expired') }}
 | 
				
			||||||
                        </h3>
 | 
					                        </h3>
 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @if($key)
 | 
					 | 
				
			||||||
                            <div class="btn hidden md:block" data-clipboard-text="{{url("client/quote/{$key}")}}" aria-label="Copied!">
 | 
					 | 
				
			||||||
                                <div class="flex text-sm leading-6 font-medium text-gray-500">
 | 
					 | 
				
			||||||
                                    <p class="mr-2">{{url("client/quote/{$key}")}}</p>
 | 
					 | 
				
			||||||
                                    <p><img class="h-5 w-5" src="{{ asset('assets/clippy.svg') }}" alt="Copy to clipboard"></p>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                            @endif
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
@ -112,13 +84,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@push('head')
 | 
					@push('head')
 | 
				
			||||||
    @vite('resources/js/clients/quotes/approve.js')
 | 
					    @vite('resources/js/clients/quotes/approve.js')
 | 
				
			||||||
    <script src="{{ asset('vendor/clipboard.min.js') }}" defer></script>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <script type="text/javascript" defer>
 | 
					    <script type="text/javascript" defer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    document.addEventListener('DOMContentLoaded', () => {
 | 
					    document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var clipboard = new ClipboardJS('.btn');
 | 
					        @if($key)
 | 
				
			||||||
 | 
					            window.history.pushState({}, "", "{{ url("client/quote/{$key}") }}");
 | 
				
			||||||
 | 
					        @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -25,10 +25,12 @@
 | 
				
			|||||||
                    {{ ctrans('texts.https') }}
 | 
					                    {{ ctrans('texts.https') }}
 | 
				
			||||||
                </dt>
 | 
					                </dt>
 | 
				
			||||||
                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
                    <input type="checkbox" class="form-checkbox mr-1" name="https"
 | 
					                    <label for="https">
 | 
				
			||||||
                           {{ old('https') ? 'checked': '' }} checked>
 | 
					                        <input type="checkbox" class="form-checkbox mr-1" name="https"
 | 
				
			||||||
                    <span>{{ ctrans('texts.require') }}</span>
 | 
					                            id="https" {{ old('https') ? 'checked': '' }} checked>
 | 
				
			||||||
                    <span class="text-gray-600 text-xs ml-2">({{ ctrans('texts.recommended_in_production') }})</span>
 | 
					                        <span>{{ ctrans('texts.require') }}</span>
 | 
				
			||||||
 | 
					                        <span class="text-gray-600 text-xs ml-2">({{ ctrans('texts.recommended_in_production') }})</span>
 | 
				
			||||||
 | 
					                    </label>
 | 
				
			||||||
                </dd>
 | 
					                </dd>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6 sm:flex sm:items-center">
 | 
					            <div class="bg-gray-50 px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6 sm:flex sm:items-center">
 | 
				
			||||||
@ -36,9 +38,11 @@
 | 
				
			|||||||
                    {{ ctrans('texts.reports') }}
 | 
					                    {{ ctrans('texts.reports') }}
 | 
				
			||||||
                </dt>
 | 
					                </dt>
 | 
				
			||||||
                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
                    <input type="checkbox" class="form-checkbox mr-1"
 | 
					                    <label for="send_logs">
 | 
				
			||||||
                           name="send_logs" {{ old('send_logs' ? 'checked': '') }}>
 | 
					                        <input type="checkbox" class="form-checkbox mr-1"
 | 
				
			||||||
                    <span>{{ ctrans('texts.send_fail_logs_to_our_server') }}</span>
 | 
					                            name="send_logs" id="send_logs" {{ old('send_logs' ? 'checked': '') }}>
 | 
				
			||||||
 | 
					                        <span>{{ ctrans('texts.send_fail_logs_to_our_server') }}</span>
 | 
				
			||||||
 | 
					                    </label>
 | 
				
			||||||
                    <a class="button-link mt-1 block" target="_blank" href="https://www.invoiceninja.com/privacy-policy/">Read more
 | 
					                    <a class="button-link mt-1 block" target="_blank" href="https://www.invoiceninja.com/privacy-policy/">Read more
 | 
				
			||||||
                        about how we use this.</a>
 | 
					                        about how we use this.</a>
 | 
				
			||||||
                </dd>
 | 
					                </dd>
 | 
				
			||||||
 | 
				
			|||||||
@ -42,13 +42,7 @@
 | 
				
			|||||||
        @endif
 | 
					        @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Title -->
 | 
					        <!-- Title -->
 | 
				
			||||||
        @auth('contact')
 | 
					        <title>@yield('meta_title', '') — {{ config('app.name') }}</title>
 | 
				
			||||||
            <title>@yield('meta_title', '') — {{ auth()->guard('contact')->user()->user->account->isPaid() ? auth()->guard('contact')->user()->company->present()->name() : 'Invoice Ninja' }}</title>
 | 
					 | 
				
			||||||
        @endauth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @guest
 | 
					 | 
				
			||||||
            <title>@yield('meta_title', '') — {{ config('app.name') }}</title>
 | 
					 | 
				
			||||||
        @endguest
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <meta charset="utf-8">
 | 
					        <meta charset="utf-8">
 | 
				
			||||||
        <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
					        <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
				
			||||||
@ -86,10 +80,6 @@
 | 
				
			|||||||
            <link href="{{ str_replace("setup", "", Request::url())}}css/app.css" rel="stylesheet">
 | 
					            <link href="{{ str_replace("setup", "", Request::url())}}css/app.css" rel="stylesheet">
 | 
				
			||||||
        @endif
 | 
					        @endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @if(auth()->guard('contact')->user() && !auth()->guard('contact')->user()->user->account->isPaid())
 | 
					 | 
				
			||||||
        {{-- <link href="{{ mix('favicon.png') }}" rel="shortcut icon" type="image/png"> --}}
 | 
					 | 
				
			||||||
        @endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <link rel="canonical" href="{{ config('ninja.app_url') }}/{{ request()->path() }}"/>
 | 
					        <link rel="canonical" href="{{ config('ninja.app_url') }}/{{ request()->path() }}"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        {{-- Feel free to push anything to header using @push('header') --}}
 | 
					        {{-- Feel free to push anything to header using @push('header') --}}
 | 
				
			||||||
@ -102,8 +92,6 @@
 | 
				
			|||||||
        <link rel="stylesheet" type="text/css" href="{{ asset('vendor/cookieconsent@3/cookieconsent.min.css') }}" />
 | 
					        <link rel="stylesheet" type="text/css" href="{{ asset('vendor/cookieconsent@3/cookieconsent.min.css') }}" />
 | 
				
			||||||
    </head>
 | 
					    </head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @include('portal.ninja2020.components.primary-color')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <body class="antialiased {{ $custom_body_class ?? '' }}">
 | 
					    <body class="antialiased {{ $custom_body_class ?? '' }}">
 | 
				
			||||||
        @if(session()->has('message'))
 | 
					        @if(session()->has('message'))
 | 
				
			||||||
            <div class="py-1 text-sm text-center text-white bg-primary disposable-alert">
 | 
					            <div class="py-1 text-sm text-center text-white bg-primary disposable-alert">
 | 
				
			||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
@extends('portal.ninja2020.layout.clean_setup')
 | 
					@extends('setup.clean_setup')
 | 
				
			||||||
@section('meta_title', ctrans('texts.setup'))
 | 
					@section('meta_title', ctrans('texts.setup'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@section('body')
 | 
					@section('body')
 | 
				
			||||||
@ -59,16 +59,20 @@
 | 
				
			|||||||
                    <div class="flex justify-center mt-4 hidden" id="submit-wrapper">
 | 
					                    <div class="flex justify-center mt-4 hidden" id="submit-wrapper">
 | 
				
			||||||
                        <div class="flex flex-col">
 | 
					                        <div class="flex flex-col">
 | 
				
			||||||
                            <div class="mt-4 text-sm">
 | 
					                            <div class="mt-4 text-sm">
 | 
				
			||||||
                                <input type="checkbox" class="form-checkbox mr-2" name="terms_of_service" required>
 | 
					                                <label for="terms_of_service">
 | 
				
			||||||
                                <span>{{ ctrans('texts.i_agree') }}
 | 
					                                    <input type="checkbox" class="form-checkbox mr-2" name="terms_of_service" id="terms_of_service" required>
 | 
				
			||||||
                                    <a class="button-link text-blue-600" target="_blank" href="https://www.invoiceninja.com/self-hosting-terms-service/">{{ ctrans('texts.terms_of_service') }}</a>
 | 
					                                    <span>{{ ctrans('texts.i_agree') }}
 | 
				
			||||||
                                </span>
 | 
					                                        <a class="button-link text-blue-600" target="_blank" href="https://www.invoiceninja.com/self-hosting-terms-service/">{{ ctrans('texts.terms_of_service') }}</a>
 | 
				
			||||||
 | 
					                                    </span>
 | 
				
			||||||
 | 
					                                </label>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                            <div class="mt-2 text-sm">
 | 
					                            <div class="mt-2 text-sm">
 | 
				
			||||||
                                <input type="checkbox" class="form-checkbox mr-2" name="privacy_policy" required>
 | 
					                                <label for="privacy_policy">
 | 
				
			||||||
                                <span>{{ ctrans('texts.i_agree') }}
 | 
					                                    <input type="checkbox" class="form-checkbox mr-2" name="privacy_policy" id="privacy_policy" required>
 | 
				
			||||||
                                    <a class="button-link text-blue-600" target="_blank" href="https://www.invoiceninja.com/self-hosting-privacy-data-control/">{{ ctrans('texts.privacy_policy') }}</a>
 | 
					                                    <span>{{ ctrans('texts.i_agree') }}
 | 
				
			||||||
                                </span>
 | 
					                                        <a class="button-link text-blue-600" target="_blank" href="https://www.invoiceninja.com/self-hosting-privacy-data-control/">{{ ctrans('texts.privacy_policy') }}</a>
 | 
				
			||||||
 | 
					                                    </span>
 | 
				
			||||||
 | 
					                                </label>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            <button type="submit" class="button button-primary bg-blue-600 w-1/2 my-4">{{ ctrans('texts.submit') }}</button>
 | 
					                            <button type="submit" class="button button-primary bg-blue-600 w-1/2 my-4">{{ ctrans('texts.submit') }}</button>
 | 
				
			||||||
 | 
				
			|||||||
@ -152,6 +152,7 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale']
 | 
				
			|||||||
    Route::post('check_subdomain', [SubdomainController::class, 'index'])->name('check_subdomain');
 | 
					    Route::post('check_subdomain', [SubdomainController::class, 'index'])->name('check_subdomain');
 | 
				
			||||||
    Route::get('ping', [PingController::class, 'index'])->name('ping');
 | 
					    Route::get('ping', [PingController::class, 'index'])->name('ping');
 | 
				
			||||||
    Route::get('health_check', [PingController::class, 'health'])->name('health_check');
 | 
					    Route::get('health_check', [PingController::class, 'health'])->name('health_check');
 | 
				
			||||||
 | 
					    Route::get('last_error', [PingController::class, 'lastError'])->name('last_error');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Route::get('activities', [ActivityController::class, 'index']);
 | 
					    Route::get('activities', [ActivityController::class, 'index']);
 | 
				
			||||||
    Route::post('activities/entity', [ActivityController::class, 'entityActivity']);
 | 
					    Route::post('activities/entity', [ActivityController::class, 'entityActivity']);
 | 
				
			||||||
 | 
				
			|||||||
@ -47,6 +47,46 @@ class ExpenseApiTest extends TestCase
 | 
				
			|||||||
        Model::reguard();
 | 
					        Model::reguard();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testVendorPayment()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $data = [
 | 
				
			||||||
 | 
					            'amount' => 100,
 | 
				
			||||||
 | 
					            'payment_date' => now()->format('Y-m-d'),
 | 
				
			||||||
 | 
					            'vendor_id' => $this->vendor->hashed_id,
 | 
				
			||||||
 | 
					            'date' => '2021-10-01',
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $response = $this->withHeaders([
 | 
				
			||||||
 | 
					            'X-API-SECRET' => config('ninja.api_secret'),
 | 
				
			||||||
 | 
					            'X-API-TOKEN' => $this->token,
 | 
				
			||||||
 | 
					        ])->postJson('/api/v1/expenses', $data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $arr = $response->json();
 | 
				
			||||||
 | 
					        $response->assertStatus(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertEquals($this->vendor->hashed_id, $arr['data']['vendor_id']);
 | 
				
			||||||
 | 
					        $this->assertEquals(now()->format('Y-m-d'), $arr['data']['payment_date']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $data = [
 | 
				
			||||||
 | 
					            'amount' => 100,
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $response = $this->withHeaders([
 | 
				
			||||||
 | 
					            'X-API-SECRET' => config('ninja.api_secret'),
 | 
				
			||||||
 | 
					            'X-API-TOKEN' => $this->token,
 | 
				
			||||||
 | 
					        ])->putJson('/api/v1/expenses/'.$arr['data']['id'], $data);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        $arr = $response->json();
 | 
				
			||||||
 | 
					        $response->assertStatus(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertEquals(now()->format('Y-m-d'), $arr['data']['payment_date']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function testExpensePutWithVendorStatus()
 | 
					    public function testExpensePutWithVendorStatus()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
				
			|||||||
@ -47,7 +47,6 @@ class VendorApiTest extends TestCase
 | 
				
			|||||||
        Model::reguard();
 | 
					        Model::reguard();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function testVendorContactCreation()
 | 
					    public function testVendorContactCreation()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $data = [
 | 
					        $data = [
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user