diff --git a/VERSION.txt b/VERSION.txt index f3cb8c412987..3b867ccd76c3 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.6.31 \ No newline at end of file +5.7.0 \ No newline at end of file diff --git a/app/Console/Commands/TypeCheck.php b/app/Console/Commands/TypeCheck.php index d26785b0ad4b..7a57791eb4e8 100644 --- a/app/Console/Commands/TypeCheck.php +++ b/app/Console/Commands/TypeCheck.php @@ -122,7 +122,7 @@ class TypeCheck extends Command $client->save(); }); - Company::cursor()->each(function ($company) { + Company::query()->cursor()->each(function ($company) { $this->logMessage("Checking company {$company->id}"); $company->saveSettings($company->settings, $company); }); diff --git a/app/Export/CSV/BaseExport.php b/app/Export/CSV/BaseExport.php index 9e5944ddf747..e4c743923c4c 100644 --- a/app/Export/CSV/BaseExport.php +++ b/app/Export/CSV/BaseExport.php @@ -839,7 +839,7 @@ class BaseExport foreach (array_merge($this->input['report_keys'], $this->forced_keys) as $value) { $key = array_search($value, $this->entity_keys); - + nlog("{$key} => {$value}"); $prefix = ''; if(!$key) { @@ -862,7 +862,6 @@ class BaseExport $key = array_search($value, $this->payment_report_keys); } - if(!$key) { $prefix = ctrans('texts.quote')." "; $key = array_search($value, $this->quote_report_keys); @@ -914,7 +913,7 @@ class BaseExport $key = str_replace('contact.', '', $key); $key = str_replace('payment.', '', $key); $key = str_replace('expense.', '', $key); - +// nlog($key); if(in_array($key, ['quote1','quote2','quote3','quote4','credit1','credit2','credit3','credit4','purchase_order1','purchase_order2','purchase_order3','purchase_order4'])) { $number = substr($key, -1); diff --git a/app/Export/CSV/CreditExport.php b/app/Export/CSV/CreditExport.php index 1cadfea5b7dd..234a9f9c10e4 100644 --- a/app/Export/CSV/CreditExport.php +++ b/app/Export/CSV/CreditExport.php @@ -11,13 +11,15 @@ namespace App\Export\CSV; -use App\Libraries\MultiDB; -use App\Models\Company; -use App\Models\Credit; -use App\Transformers\CreditTransformer; use App\Utils\Ninja; -use Illuminate\Support\Facades\App; +use App\Utils\Number; +use App\Models\Credit; use League\Csv\Writer; +use App\Models\Company; +use App\Libraries\MultiDB; +use Illuminate\Support\Facades\App; +use App\Transformers\CreditTransformer; +use Illuminate\Contracts\Database\Eloquent\Builder; class CreditExport extends BaseExport { @@ -32,11 +34,12 @@ class CreditExport extends BaseExport 'amount' => 'amount', 'balance' => 'balance', 'client' => 'client_id', + 'country' => 'country_id', 'custom_surcharge1' => 'custom_surcharge1', 'custom_surcharge2' => 'custom_surcharge2', 'custom_surcharge3' => 'custom_surcharge3', 'custom_surcharge4' => 'custom_surcharge4', - 'country' => 'country_id', + 'currency' => 'currency', 'custom_value1' => 'custom_value1', 'custom_value2' => 'custom_value2', 'custom_value3' => 'custom_value3', @@ -63,7 +66,6 @@ class CreditExport extends BaseExport 'tax_rate3' => 'tax_rate3', 'terms' => 'terms', 'total_taxes' => 'total_taxes', - 'currency' => 'currency', ]; private array $decorate_keys = [ @@ -80,23 +82,67 @@ class CreditExport extends BaseExport $this->credit_transformer = new CreditTransformer(); } - public function run() + public function returnJson() { + $query = $this->init(); + + $header = $this->buildHeader(); + + $report = $query->cursor() + ->map(function ($credit) { + $row = $this->buildRow($credit); + return $this->processMetaData($row, $credit); + })->toArray(); + + return array_merge([$header], $report); + } + + private function processMetaData(array $row, Credit $credit): array + { + $clean_row = []; + + foreach ($this->input['report_keys'] as $key => $value) { + + $report_keys = explode(".", $value); + + $column_key = str_replace("credit.", "", $value); + $column_key = array_search($column_key, $this->entity_keys); + + $clean_row[$key]['entity'] = $report_keys[0]; + $clean_row[$key]['id'] = $report_keys[1] ?? $report_keys[0]; + $clean_row[$key]['hashed_id'] = $report_keys[0] == 'credit' ? null : $credit->{$report_keys[0]}->hashed_id ?? null; + $clean_row[$key]['value'] = $row[$column_key]; + + if(in_array($clean_row[$key]['id'], ['amount', 'balance', 'partial', 'refunded', 'applied','unit_cost','cost','price'])) + $clean_row[$key]['display_value'] = Number::formatMoney($row[$column_key], $credit->client); + else + $clean_row[$key]['display_value'] = $row[$column_key]; + + } + + return $clean_row; + } + + private function init(): Builder + { + MultiDB::setDb($this->company->db); App::forgetInstance('translator'); App::setLocale($this->company->locale()); $t = app('translator'); $t->replace(Ninja::transformTranslations($this->company->settings)); - //load the CSV document from a string - $this->csv = Writer::createFromString(); - if (count($this->input['report_keys']) == 0) { $this->input['report_keys'] = array_values($this->entity_keys); - } + // $this->input['report_keys'] = collect(array_values($this->entity_keys))->map(function ($value){ - //insert the header - $this->csv->insertOne($this->buildHeader()); + // // if(in_array($value,['client_id','country_id'])) + // // return $value; + // // else + // return 'credit.'.$value; + // })->toArray(); + + } $query = Credit::query() ->withTrashed() @@ -105,8 +151,22 @@ class CreditExport extends BaseExport $query = $this->addDateRange($query); + return $query; + } + + public function run(): string + { + $query = $this->init(); + //load the CSV document from a string + $this->csv = Writer::createFromString(); + + //insert the header + $this->csv->insertOne($this->buildHeader()); + // nlog($this->input['report_keys']); + $query->cursor() ->each(function ($credit) { + // nlog($this->buildRow($credit)); $this->csv->insertOne($this->buildRow($credit)); }); diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 060be29f0d31..2044e6a3060a 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -228,7 +228,7 @@ class ClientController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $client); + $this->saveDocuments($request->file('documents'), $client, $request->input('is_public', true)); } return $this->itemResponse($client->fresh()); diff --git a/app/Http/Controllers/ClientPortal/CreditController.php b/app/Http/Controllers/ClientPortal/CreditController.php index 06a7ad6fa9a1..658dee0ad454 100644 --- a/app/Http/Controllers/ClientPortal/CreditController.php +++ b/app/Http/Controllers/ClientPortal/CreditController.php @@ -30,7 +30,8 @@ class CreditController extends Controller { set_time_limit(0); - $invitation = $credit->invitations()->where('client_contact_id', auth()->user()->id)->first(); + // $invitation = $credit->invitations()->where('client_contact_id', auth()->user()->id)->first(); + $invitation = $credit->invitations()->where('client_contact_id', auth()->guard('contact')->user()->id)->first(); $data = [ 'credit' => $credit, diff --git a/app/Http/Controllers/ClientPortal/QuoteController.php b/app/Http/Controllers/ClientPortal/QuoteController.php index 6d3eb9c0335a..98750aa683b9 100644 --- a/app/Http/Controllers/ClientPortal/QuoteController.php +++ b/app/Http/Controllers/ClientPortal/QuoteController.php @@ -53,7 +53,7 @@ class QuoteController extends Controller { /* If the quote is expired, convert the status here */ - $invitation = $quote->invitations()->where('client_contact_id', auth()->user()->id)->first(); + $invitation = $quote->invitations()->where('client_contact_id', auth()->guard('contact')->user()->id)->first(); $data = [ 'quote' => $quote, diff --git a/app/Http/Controllers/ClientPortal/UploadController.php b/app/Http/Controllers/ClientPortal/UploadController.php index 5099317910e4..d72b5c1ea335 100644 --- a/app/Http/Controllers/ClientPortal/UploadController.php +++ b/app/Http/Controllers/ClientPortal/UploadController.php @@ -34,7 +34,7 @@ class UploadController extends Controller /** @var \App\Models\ClientContact $client_contact **/ $client_contact = auth()->user(); - $this->saveDocuments($request->getFile(), $client_contact->client, true); + $this->saveDocuments($request->getFile(), $client_contact->client, $request->input('is_public', true)); return response([], 200); } diff --git a/app/Http/Controllers/CompanyController.php b/app/Http/Controllers/CompanyController.php index 4347f6a28b10..016485535bc0 100644 --- a/app/Http/Controllers/CompanyController.php +++ b/app/Http/Controllers/CompanyController.php @@ -424,7 +424,7 @@ class CompanyController extends BaseController $company = $this->company_repo->save($request->all(), $company); if ($request->has('documents')) { - $this->saveDocuments($request->input('documents'), $company, false); + $this->saveDocuments($request->input('documents'), $company, $request->input('is_public', true)); } if($request->has('e_invoice_certificate') && !is_null($request->file("e_invoice_certificate"))){ @@ -616,7 +616,7 @@ class CompanyController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $company); + $this->saveDocuments($request->file('documents'), $company, $request->input('is_public', true)); } return $this->itemResponse($company->fresh()); diff --git a/app/Http/Controllers/CreditController.php b/app/Http/Controllers/CreditController.php index e502f7ba2979..f64b5efce971 100644 --- a/app/Http/Controllers/CreditController.php +++ b/app/Http/Controllers/CreditController.php @@ -776,7 +776,7 @@ class CreditController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $credit); + $this->saveDocuments($request->file('documents'), $credit, $request->input('is_public', true)); } return $this->itemResponse($credit->fresh()); diff --git a/app/Http/Controllers/EmailController.php b/app/Http/Controllers/EmailController.php index cc60c74b1f94..fdcf887beb5a 100644 --- a/app/Http/Controllers/EmailController.php +++ b/app/Http/Controllers/EmailController.php @@ -78,7 +78,9 @@ class EmailController extends BaseController $entity_obj->service()->markSent()->save(); $mo->invitation_id = $invitation->id; - + $mo->client_id = $invitation->contact->client_id ?? null; + $mo->vendor_id = $invitation->contact->vendor_id ?? null; + Email::dispatch($mo, $invitation->company); } }); diff --git a/app/Http/Controllers/ExpenseController.php b/app/Http/Controllers/ExpenseController.php index 476f206f5ad1..f7bc4e9cfd21 100644 --- a/app/Http/Controllers/ExpenseController.php +++ b/app/Http/Controllers/ExpenseController.php @@ -564,7 +564,7 @@ class ExpenseController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $expense); + $this->saveDocuments($request->file('documents'), $expense, $request->input('is_public', true)); } return $this->itemResponse($expense->fresh()); diff --git a/app/Http/Controllers/GroupSettingController.php b/app/Http/Controllers/GroupSettingController.php index 85d141d1d735..e69d6cab7d2b 100644 --- a/app/Http/Controllers/GroupSettingController.php +++ b/app/Http/Controllers/GroupSettingController.php @@ -144,7 +144,7 @@ class GroupSettingController extends BaseController $this->uploadLogo($request->file('company_logo'), $group_setting->company, $group_setting); if ($request->has('documents')) { - $this->saveDocuments($request->input('documents'), $group_setting, false); + $this->saveDocuments($request->input('documents'), $group_setting, $request->input('is_public', true)); } return $this->itemResponse($group_setting); @@ -217,7 +217,7 @@ class GroupSettingController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $group_setting); + $this->saveDocuments($request->file('documents'), $group_setting, $request->input('is_public', true)); } return $this->itemResponse($group_setting->fresh()); diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 626c22df9acc..790755168c2f 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -977,7 +977,7 @@ class InvoiceController extends BaseController } if ($request->has('file')) { - $this->saveDocuments($request->file('documents'), $invoice, $request->input('is_public', true)); + $this->saveDocuments($request->file('file'), $invoice, $request->input('is_public', true)); } return $this->itemResponse($invoice->fresh()); diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 8498c9d4bdc4..413f8213ef77 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -749,7 +749,7 @@ class PaymentController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $payment); + $this->saveDocuments($request->file('documents'), $payment, $request->input('is_public', true)); } return $this->itemResponse($payment->fresh()); diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 5f4a4b38f150..d46bff3f9bca 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -541,7 +541,7 @@ class ProductController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $product); + $this->saveDocuments($request->file('documents'), $product, $request->input('is_public', true)); } return $this->itemResponse($product->fresh()); diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index e2be244ef02c..085e7b1d7d6c 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -264,7 +264,7 @@ class ProjectController extends BaseController $project->saveQuietly(); if ($request->has('documents')) { - $this->saveDocuments($request->input('documents'), $project); + $this->saveDocuments($request->input('documents'), $project, $request->input('is_public', true)); } event('eloquent.updated: App\Models\Project', $project); @@ -373,7 +373,7 @@ class ProjectController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->input('documents'), $project); + $this->saveDocuments($request->input('documents'), $project, $request->input('is_public', true)); } event('eloquent.created: App\Models\Project', $project); @@ -565,7 +565,7 @@ class ProjectController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $project); + $this->saveDocuments($request->file('documents'), $project, $request->input('is_public', true)); } return $this->itemResponse($project->fresh()); diff --git a/app/Http/Controllers/PurchaseOrderController.php b/app/Http/Controllers/PurchaseOrderController.php index 0355355781d6..f5eefe0fdc69 100644 --- a/app/Http/Controllers/PurchaseOrderController.php +++ b/app/Http/Controllers/PurchaseOrderController.php @@ -751,7 +751,7 @@ class PurchaseOrderController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $purchase_order); + $this->saveDocuments($request->file('documents'), $purchase_order, $request->input('is_public', true)); } return $this->itemResponse($purchase_order->fresh()); diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index cfbad5fe931c..47eab0e96828 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -905,7 +905,7 @@ class QuoteController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $quote); + $this->saveDocuments($request->file('documents'), $quote, $request->input('is_public', true)); } return $this->itemResponse($quote->fresh()); diff --git a/app/Http/Controllers/RecurringExpenseController.php b/app/Http/Controllers/RecurringExpenseController.php index 0a4d4ef59377..e0d926fec8ce 100644 --- a/app/Http/Controllers/RecurringExpenseController.php +++ b/app/Http/Controllers/RecurringExpenseController.php @@ -609,7 +609,7 @@ class RecurringExpenseController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $recurring_expense); + $this->saveDocuments($request->file('documents'), $recurring_expense, $request->input('is_public', true)); } return $this->itemResponse($recurring_expense->fresh()); diff --git a/app/Http/Controllers/RecurringInvoiceController.php b/app/Http/Controllers/RecurringInvoiceController.php index daa59552c836..271c6e57df30 100644 --- a/app/Http/Controllers/RecurringInvoiceController.php +++ b/app/Http/Controllers/RecurringInvoiceController.php @@ -550,7 +550,7 @@ class RecurringInvoiceController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $recurring_invoice); + $this->saveDocuments($request->file('documents'), $recurring_invoice, $request->input('is_public', true)); } return $this->itemResponse($recurring_invoice->fresh()); diff --git a/app/Http/Controllers/Reports/CreditReportController.php b/app/Http/Controllers/Reports/CreditReportController.php index f940f33cb190..5a1a952d6359 100644 --- a/app/Http/Controllers/Reports/CreditReportController.php +++ b/app/Http/Controllers/Reports/CreditReportController.php @@ -14,6 +14,7 @@ namespace App\Http\Controllers\Reports; use App\Export\CSV\CreditExport; use App\Http\Controllers\BaseController; use App\Http\Requests\Report\GenericReportRequest; +use App\Jobs\Report\PreviewReport; use App\Jobs\Report\SendToAdmin; use App\Utils\Traits\MakesHash; use Illuminate\Http\Response; @@ -62,14 +63,26 @@ class CreditReportController extends BaseController */ public function __invoke(GenericReportRequest $request) { + /** @var \App\Models\User $user */ + $user = auth()->user(); + if ($request->has('send_email') && $request->get('send_email')) { - SendToAdmin::dispatch(auth()->user()->company(), $request->all(), CreditExport::class, $this->filename); + SendToAdmin::dispatch($user->company(), $request->all(), CreditExport::class, $this->filename); return response()->json(['message' => 'working...'], 200); } // expect a list of visible fields, or use the default - $export = new CreditExport(auth()->user()->company(), $request->all()); + if($request->has('output') && $request->input('output') == 'json') { + + $hash = \Illuminate\Support\Str::uuid(); + + PreviewReport::dispatch($user->company(), $request->all(), CreditExport::class, $hash); + + return response()->json(['message' => $hash], 200); + } + + $export = new CreditExport($user->company(), $request->all()); $csv = $export->run(); diff --git a/app/Http/Controllers/Reports/ReportPreviewController.php b/app/Http/Controllers/Reports/ReportPreviewController.php new file mode 100644 index 000000000000..82f55bc2f4df --- /dev/null +++ b/app/Http/Controllers/Reports/ReportPreviewController.php @@ -0,0 +1,45 @@ +json(['message' => 'Still working.....'], 409); + + if($report){ + + Cache::forget($hash); + + return response()->json($report, 200); + } + + + } +} diff --git a/app/Http/Controllers/SelfUpdateController.php b/app/Http/Controllers/SelfUpdateController.php index 12fd890840a6..f304482fac6b 100644 --- a/app/Http/Controllers/SelfUpdateController.php +++ b/app/Http/Controllers/SelfUpdateController.php @@ -53,7 +53,7 @@ class SelfUpdateController extends BaseController nlog('Test filesystem is writable'); - // $this->testWritable(); + $this->testWritable(); nlog('Clear cache directory'); @@ -61,12 +61,22 @@ class SelfUpdateController extends BaseController nlog('copying release file'); - if (copy($this->getDownloadUrl(), storage_path("app/{$this->filename}"))) { - nlog('Copied file from URL'); - } else { + $file_headers = @get_headers($this->getDownloadUrl()); + + if (stripos($file_headers[0], "404 Not Found") >0 || (stripos($file_headers[0], "302 Found") > 0 && stripos($file_headers[7], "404 Not Found") > 0)) { return response()->json(['message' => 'Download not yet available. Please try again shortly.'], 410); } + try { + if (copy($this->getDownloadUrl(), storage_path("app/{$this->filename}"))) { + nlog('Copied file from URL'); + } + } + catch(\Exception $e) { + nlog($e->getMessage()); + return response()->json(['message' => 'File exists on the server, however there was a problem downloading and copying to the local filesystem'], 500); + } + nlog('Finished copying'); $file = Storage::disk('local')->path($this->filename); diff --git a/app/Http/Controllers/StripeConnectController.php b/app/Http/Controllers/StripeConnectController.php index b2e2bf70d421..d9ab04eccf17 100644 --- a/app/Http/Controllers/StripeConnectController.php +++ b/app/Http/Controllers/StripeConnectController.php @@ -125,11 +125,11 @@ class StripeConnectController extends BaseController $company_gateway->save(); // StripeWebhook::dispatch($company->company_key, $company_gateway->id); - if(isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react']) { + // if(isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react']) { $redirect_uri = 'https://app.invoicing.co/#/settings/online_payments'; - } else { - $redirect_uri = 'https://invoicing.co/stripe/completed'; - } + // } else { + // $redirect_uri = 'https://invoicing.co/stripe/completed'; + // } //response here return view('auth.connect.completed', ['url' => $redirect_uri]); diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index c664a7a16829..1d722b86a2f6 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -582,7 +582,7 @@ class TaskController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $task); + $this->saveDocuments($request->file('documents'), $task, $request->input('is_public', true)); } return $this->itemResponse($task->fresh()); diff --git a/app/Http/Controllers/VendorController.php b/app/Http/Controllers/VendorController.php index d13240f82d0e..5b074f20f482 100644 --- a/app/Http/Controllers/VendorController.php +++ b/app/Http/Controllers/VendorController.php @@ -568,7 +568,7 @@ class VendorController extends BaseController } if ($request->has('documents')) { - $this->saveDocuments($request->file('documents'), $vendor); + $this->saveDocuments($request->file('documents'), $vendor, $request->input('is_public', true)); } return $this->itemResponse($vendor->fresh()); diff --git a/app/Http/Controllers/VendorPortal/UploadController.php b/app/Http/Controllers/VendorPortal/UploadController.php index c9c6da65815b..9de1e81c0eb3 100644 --- a/app/Http/Controllers/VendorPortal/UploadController.php +++ b/app/Http/Controllers/VendorPortal/UploadController.php @@ -33,7 +33,7 @@ class UploadController extends Controller */ public function upload(StoreUploadRequest $request, PurchaseOrder $purchase_order) { - $this->saveDocuments($request->getFile(), $purchase_order, true); + $this->saveDocuments($request->getFile(), $purchase_order, $request->input('is_public', true)); return response([], 200); } diff --git a/app/Http/Livewire/DocumentsTable.php b/app/Http/Livewire/DocumentsTable.php index 277886344ce6..ae0500bfeebe 100644 --- a/app/Http/Livewire/DocumentsTable.php +++ b/app/Http/Livewire/DocumentsTable.php @@ -50,7 +50,7 @@ class DocumentsTable extends Component { MultiDB::setDb($this->db); - $this->client = Client::withTrashed()->with('company')->find($this->client_id); + $this->client = Client::query()->withTrashed()->with('company')->find($this->client_id); $this->company = $this->client->company; @@ -118,12 +118,14 @@ class DocumentsTable extends Component protected function documents() { - return $this->client->documents(); + return $this->client->documents() + ->where('is_public', true); } protected function credits() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [Credit::class], function ($query) { $query->where('client_id', $this->client->id); }); @@ -132,6 +134,7 @@ class DocumentsTable extends Component protected function expenses() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [Expense::class], function ($query) { $query->where('client_id', $this->client->id); }); @@ -140,6 +143,7 @@ class DocumentsTable extends Component protected function invoices() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [Invoice::class], function ($query) { $query->where('client_id', $this->client->id); }); @@ -148,6 +152,7 @@ class DocumentsTable extends Component protected function payments() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [Payment::class], function ($query) { $query->where('client_id', $this->client->id); }); @@ -156,6 +161,7 @@ class DocumentsTable extends Component protected function projects() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [Project::class], function ($query) { $query->where('client_id', $this->client->id); }); @@ -164,6 +170,7 @@ class DocumentsTable extends Component protected function quotes() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [Quote::class], function ($query) { $query->where('client_id', $this->client->id); }); @@ -172,6 +179,7 @@ class DocumentsTable extends Component protected function recurringInvoices() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [RecurringInvoice::class], function ($query) { $query->where('client_id', $this->client->id); }); @@ -180,6 +188,7 @@ class DocumentsTable extends Component protected function tasks() { return Document::query() + ->where('is_public', true) ->whereHasMorph('documentable', [Task::class], function ($query) { $query->where('client_id', $this->client->id); }); diff --git a/app/Http/Requests/BankIntegration/UploadBankIntegrationRequest.php b/app/Http/Requests/BankIntegration/UploadBankIntegrationRequest.php index cd07c0688343..30dfa2caf767 100644 --- a/app/Http/Requests/BankIntegration/UploadBankIntegrationRequest.php +++ b/app/Http/Requests/BankIntegration/UploadBankIntegrationRequest.php @@ -22,7 +22,10 @@ class UploadBankIntegrationRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->bank_integration); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->bank_integration); } public function rules() @@ -41,6 +44,20 @@ class UploadBankIntegrationRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/BankTransaction/UploadBankTransactionRequest.php b/app/Http/Requests/BankTransaction/UploadBankTransactionRequest.php index 0bbc319ef3e0..040389a93495 100644 --- a/app/Http/Requests/BankTransaction/UploadBankTransactionRequest.php +++ b/app/Http/Requests/BankTransaction/UploadBankTransactionRequest.php @@ -22,7 +22,10 @@ class UploadBankTransactionRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->bank_transaction); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->bank_transaction); } public function rules() @@ -41,6 +44,20 @@ class UploadBankTransactionRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/Client/StoreClientRequest.php b/app/Http/Requests/Client/StoreClientRequest.php index 095b89561c2d..c06305dd8e77 100644 --- a/app/Http/Requests/Client/StoreClientRequest.php +++ b/app/Http/Requests/Client/StoreClientRequest.php @@ -33,11 +33,17 @@ class StoreClientRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('create', Client::class); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('create', Client::class); } public function rules() { + /** @var \App\Models\User $user */ + $user = auth()->user(); + if ($this->file('documents') && is_array($this->file('documents'))) { $rules['documents.*'] = $this->file_validation; } elseif ($this->file('documents')) { @@ -51,7 +57,7 @@ class StoreClientRequest extends Request } if (isset($this->number)) { - $rules['number'] = Rule::unique('clients')->where('company_id', auth()->user()->company()->id); + $rules['number'] = Rule::unique('clients')->where('company_id', $user->company()->id); } $rules['country_id'] = 'integer|nullable'; @@ -81,12 +87,12 @@ class StoreClientRequest extends Request //'regex:/[@$!%*#?&.]/', // must contain a special character ]; - if (auth()->user()->company()->account->isFreeHostedClient()) { - $rules['id'] = new CanStoreClientsRule(auth()->user()->company()->id); + if ($user->company()->account->isFreeHostedClient()) { + $rules['id'] = new CanStoreClientsRule($user->company()->id); } - $rules['number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', auth()->user()->company()->id)]; - $rules['id_number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', auth()->user()->company()->id)]; + $rules['number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', $user->company()->id)]; + $rules['id_number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', $user->company()->id)]; return $rules; } @@ -94,7 +100,9 @@ class StoreClientRequest extends Request public function prepareForValidation() { $input = $this->all(); - + /** @var \App\Models\User $user */ + $user = auth()->user(); + /* Default settings */ $settings = (array)ClientSettings::defaults(); @@ -130,10 +138,10 @@ class StoreClientRequest extends Request if ($group_settings && property_exists($group_settings->settings, 'currency_id') && isset($group_settings->settings->currency_id)) { $input['settings']['currency_id'] = (string) $group_settings->settings->currency_id; } else { - $input['settings']['currency_id'] = (string) auth()->user()->company()->settings->currency_id; + $input['settings']['currency_id'] = (string) $user->company()->settings->currency_id; } } elseif (! array_key_exists('currency_id', $input['settings'])) { - $input['settings']['currency_id'] = (string) auth()->user()->company()->settings->currency_id; + $input['settings']['currency_id'] = (string) $user->company()->settings->currency_id; } if (isset($input['currency_code'])) { diff --git a/app/Http/Requests/Client/UpdateClientRequest.php b/app/Http/Requests/Client/UpdateClientRequest.php index 24cf207bad0f..0344d7aaf205 100644 --- a/app/Http/Requests/Client/UpdateClientRequest.php +++ b/app/Http/Requests/Client/UpdateClientRequest.php @@ -31,12 +31,17 @@ class UpdateClientRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->client); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->client); } public function rules() { /* Ensure we have a client name, and that all emails are unique*/ + /** @var \App\Models\User $user */ + $user = auth()->user(); if ($this->file('documents') && is_array($this->file('documents'))) { $rules['documents.*'] = $this->file_validation; @@ -55,15 +60,13 @@ class UpdateClientRequest extends Request $rules['size_id'] = 'integer|nullable'; $rules['country_id'] = 'integer|nullable'; $rules['shipping_country_id'] = 'integer|nullable'; - //$rules['id_number'] = 'unique:clients,id_number,,id,company_id,' . auth()->user()->company()->id; - //$rules['id_number'] = 'unique:clients,id_number,'.$this->id.',id,company_id,'.$this->company_id; if ($this->id_number) { - $rules['id_number'] = Rule::unique('clients')->where('company_id', auth()->user()->company()->id)->ignore($this->client->id); + $rules['id_number'] = Rule::unique('clients')->where('company_id', $user->company()->id)->ignore($this->client->id); } if ($this->number) { - $rules['number'] = Rule::unique('clients')->where('company_id', auth()->user()->company()->id)->ignore($this->client->id); + $rules['number'] = Rule::unique('clients')->where('company_id', $user->company()->id)->ignore($this->client->id); } $rules['settings'] = new ValidClientGroupSettingsRule(); @@ -99,9 +102,12 @@ class UpdateClientRequest extends Request { $input = $this->all(); + /** @var \App\Models\User $user */ + $user = auth()->user(); + /* If the user removes the currency we must always set the default */ if (array_key_exists('settings', $input) && ! array_key_exists('currency_id', $input['settings'])) { - $input['settings']['currency_id'] = (string) auth()->user()->company()->settings->currency_id; + $input['settings']['currency_id'] = (string) $user->company()->settings->currency_id; } if (isset($input['language_code'])) { diff --git a/app/Http/Requests/Client/UploadClientRequest.php b/app/Http/Requests/Client/UploadClientRequest.php index e5baef5ef0be..264b9d8c451d 100644 --- a/app/Http/Requests/Client/UploadClientRequest.php +++ b/app/Http/Requests/Client/UploadClientRequest.php @@ -22,7 +22,10 @@ class UploadClientRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->client); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->client); } public function rules() @@ -41,6 +44,20 @@ class UploadClientRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/Credit/UploadCreditRequest.php b/app/Http/Requests/Credit/UploadCreditRequest.php index e25782acaf12..fa00f09fbb28 100644 --- a/app/Http/Requests/Credit/UploadCreditRequest.php +++ b/app/Http/Requests/Credit/UploadCreditRequest.php @@ -22,7 +22,10 @@ class UploadCreditRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->credit); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->credit); } public function rules() @@ -41,6 +44,20 @@ class UploadCreditRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/Document/CreateDocumentRequest.php b/app/Http/Requests/Document/CreateDocumentRequest.php index b90a34bd932a..672d8666db48 100644 --- a/app/Http/Requests/Document/CreateDocumentRequest.php +++ b/app/Http/Requests/Document/CreateDocumentRequest.php @@ -23,6 +23,9 @@ class CreateDocumentRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('create', Document::class); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('create', Document::class); } } diff --git a/app/Http/Requests/Document/DestroyDocumentRequest.php b/app/Http/Requests/Document/DestroyDocumentRequest.php index f6f341af0dac..8edb3d9fbaa2 100644 --- a/app/Http/Requests/Document/DestroyDocumentRequest.php +++ b/app/Http/Requests/Document/DestroyDocumentRequest.php @@ -22,6 +22,9 @@ class DestroyDocumentRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->document); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->document); } } diff --git a/app/Http/Requests/Document/EditDocumentRequest.php b/app/Http/Requests/Document/EditDocumentRequest.php index 9679c3aaab0f..c10a2e0f6a3a 100644 --- a/app/Http/Requests/Document/EditDocumentRequest.php +++ b/app/Http/Requests/Document/EditDocumentRequest.php @@ -22,7 +22,10 @@ class EditDocumentRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->document); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->document); } /** diff --git a/app/Http/Requests/Document/ShowDocumentRequest.php b/app/Http/Requests/Document/ShowDocumentRequest.php index 1a3006bf56cd..c993955e37ec 100644 --- a/app/Http/Requests/Document/ShowDocumentRequest.php +++ b/app/Http/Requests/Document/ShowDocumentRequest.php @@ -22,7 +22,10 @@ class ShowDocumentRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('view', $this->document); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('view', $this->document); } /** diff --git a/app/Http/Requests/Document/StoreDocumentRequest.php b/app/Http/Requests/Document/StoreDocumentRequest.php index 6c4e1da2e424..f31504615dfe 100644 --- a/app/Http/Requests/Document/StoreDocumentRequest.php +++ b/app/Http/Requests/Document/StoreDocumentRequest.php @@ -23,12 +23,16 @@ class StoreDocumentRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('create', Document::class); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('create', Document::class); } public function rules() { return [ + 'is_public' => 'sometimes|boolean', ]; } @@ -36,6 +40,10 @@ class StoreDocumentRequest extends Request { $input = $this->all(); + if(isset($input['is_public'])) + $input['is_public'] = $this->toBoolean($input['is_public']); + $this->replace($input); } + } diff --git a/app/Http/Requests/Document/UpdateDocumentRequest.php b/app/Http/Requests/Document/UpdateDocumentRequest.php index ab9916a276dc..bfa876eca2bc 100644 --- a/app/Http/Requests/Document/UpdateDocumentRequest.php +++ b/app/Http/Requests/Document/UpdateDocumentRequest.php @@ -34,14 +34,20 @@ class UpdateDocumentRequest extends Request public function rules() { return [ - 'name' => 'sometimes' + 'name' => 'sometimes', + 'is_public' => 'sometimes|boolean', ]; } + public function prepareForValidation() { $input = $this->all(); + if(isset($input['is_public'])) + $input['is_public'] = $this->toBoolean($input['is_public']); + $this->replace($input); } + } diff --git a/app/Http/Requests/Expense/UploadExpenseRequest.php b/app/Http/Requests/Expense/UploadExpenseRequest.php index 694f2317f2dd..1e22b31c233c 100644 --- a/app/Http/Requests/Expense/UploadExpenseRequest.php +++ b/app/Http/Requests/Expense/UploadExpenseRequest.php @@ -22,7 +22,10 @@ class UploadExpenseRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->expense); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->expense); } public function rules() @@ -41,6 +44,20 @@ class UploadExpenseRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/Invoice/UploadInvoiceRequest.php b/app/Http/Requests/Invoice/UploadInvoiceRequest.php index 8339f64aa393..45d97b079900 100644 --- a/app/Http/Requests/Invoice/UploadInvoiceRequest.php +++ b/app/Http/Requests/Invoice/UploadInvoiceRequest.php @@ -25,6 +25,7 @@ class UploadInvoiceRequest extends Request { /** @var \App\Models\User $user */ $user = auth()->user(); + return $user->can('edit', $this->invoice); } @@ -51,24 +52,13 @@ class UploadInvoiceRequest extends Request public function prepareForValidation() { + $input = $this->all(); - //tests to see if upload via binary data works. - - // if(request()->getContent()) - // { - // // $file = new UploadedFile(request()->getContent(), request()->header('filename')); - // $file = new UploadedFile(request()->getContent(), 'something.png'); - // // request()->files->set('documents', $file); - - // $this->files->add(['file' => $file]); - - // // Merge it in request also (As I found this is not needed in every case) - // $this->merge(['file' => $file]); - - - // } - - + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + $this->replace($input); + } } diff --git a/app/Http/Requests/Payment/UploadPaymentRequest.php b/app/Http/Requests/Payment/UploadPaymentRequest.php index 52bb9b2b318b..e42cae525163 100644 --- a/app/Http/Requests/Payment/UploadPaymentRequest.php +++ b/app/Http/Requests/Payment/UploadPaymentRequest.php @@ -2,7 +2,7 @@ /** * Payment Ninja (https://paymentninja.com). * - * @link https://github.com/paymentninja/paymentninja source repository + * @link https://github.com/invoiceninja/invoiceninja source repository * * @copyright Copyright (c) 2022. Payment Ninja LLC (https://paymentninja.com) * @@ -22,7 +22,10 @@ class UploadPaymentRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->payment); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->payment); } public function rules() @@ -41,6 +44,20 @@ class UploadPaymentRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/Product/UploadProductRequest.php b/app/Http/Requests/Product/UploadProductRequest.php index b7117c035790..a22779bd76c7 100644 --- a/app/Http/Requests/Product/UploadProductRequest.php +++ b/app/Http/Requests/Product/UploadProductRequest.php @@ -2,7 +2,7 @@ /** * Product Ninja (https://paymentninja.com). * - * @link https://github.com/paymentninja/paymentninja source repository + * @link https://github.com/invoiceninja/invoiceninja source repository * * @copyright Copyright (c) 2022. Product Ninja LLC (https://paymentninja.com) * @@ -22,7 +22,10 @@ class UploadProductRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->product); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->product); } public function rules() @@ -40,6 +43,20 @@ class UploadProductRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/Project/UploadProjectRequest.php b/app/Http/Requests/Project/UploadProjectRequest.php index c7504f5b41f7..0653f193eb02 100644 --- a/app/Http/Requests/Project/UploadProjectRequest.php +++ b/app/Http/Requests/Project/UploadProjectRequest.php @@ -2,7 +2,7 @@ /** * Project Ninja (https://paymentninja.com). * - * @link https://github.com/paymentninja/paymentninja source repository + * @link https://github.com/invoiceninja/invoiceninja source repository * * @copyright Copyright (c) 2022. Project Ninja LLC (https://paymentninja.com) * @@ -22,7 +22,10 @@ class UploadProjectRequest extends Request */ public function authorize() : bool { - return auth()->user()->can('edit', $this->project); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->project); } public function rules() @@ -41,6 +44,20 @@ class UploadProjectRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/PurchaseOrder/UploadPurchaseOrderRequest.php b/app/Http/Requests/PurchaseOrder/UploadPurchaseOrderRequest.php index 25aadfdb1a19..746e17abf11e 100644 --- a/app/Http/Requests/PurchaseOrder/UploadPurchaseOrderRequest.php +++ b/app/Http/Requests/PurchaseOrder/UploadPurchaseOrderRequest.php @@ -1,10 +1,10 @@ user()->can('edit', $this->purchase_order); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->purchase_order); } public function rules() @@ -41,6 +44,20 @@ class UploadPurchaseOrderRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/Quote/UploadQuoteRequest.php b/app/Http/Requests/Quote/UploadQuoteRequest.php index cfc3580ad412..d965c413342e 100644 --- a/app/Http/Requests/Quote/UploadQuoteRequest.php +++ b/app/Http/Requests/Quote/UploadQuoteRequest.php @@ -1,10 +1,10 @@ user()->can('edit', $this->quote); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->quote); } public function rules() @@ -41,6 +44,20 @@ class UploadQuoteRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/RecurringInvoice/UploadRecurringInvoiceRequest.php b/app/Http/Requests/RecurringInvoice/UploadRecurringInvoiceRequest.php index 7d0ef57f7eba..788ea08c827f 100644 --- a/app/Http/Requests/RecurringInvoice/UploadRecurringInvoiceRequest.php +++ b/app/Http/Requests/RecurringInvoice/UploadRecurringInvoiceRequest.php @@ -1,10 +1,10 @@ user()->can('edit', $this->recurring_invoice); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->recurring_invoice); } public function rules() @@ -41,6 +44,20 @@ class UploadRecurringInvoiceRequest extends Request $rules['file'] = $this->file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) { + $input['is_public'] = $this->toBoolean($input['is_public']); + } + + $this->replace($input); + + } } diff --git a/app/Http/Requests/RecurringQuote/UploadRecurringQuoteRequest.php b/app/Http/Requests/RecurringQuote/UploadRecurringQuoteRequest.php index ee17418bb88f..09de0571bd83 100644 --- a/app/Http/Requests/RecurringQuote/UploadRecurringQuoteRequest.php +++ b/app/Http/Requests/RecurringQuote/UploadRecurringQuoteRequest.php @@ -1,10 +1,10 @@ user(); + + return $user->isAdmin() || $user->hasPermission('view_reports'); + + } + + public function rules() + { + return [ + ]; + } + + public function prepareForValidation() + { + } +} diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php index 5d8577efa189..6a35ed446adc 100644 --- a/app/Http/Requests/Request.php +++ b/app/Http/Requests/Request.php @@ -199,6 +199,17 @@ class Request extends FormRequest { } + /** + * Convert to boolean + * + * @param $bool + * @return bool + */ + public function toBoolean($bool): bool + { + return filter_var($bool, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); + } + public function checkTimeLog(array $log): bool { if (count($log) == 0) { diff --git a/app/Http/Requests/Task/SortTaskRequest.php b/app/Http/Requests/Task/SortTaskRequest.php index 20ae64370cd4..8a9d5d8481cf 100644 --- a/app/Http/Requests/Task/SortTaskRequest.php +++ b/app/Http/Requests/Task/SortTaskRequest.php @@ -2,7 +2,7 @@ /** * Invoice Ninja (https://paymentninja.com). * - * @link https://github.com/paymentninja/paymentninja source repository + * @link https://github.com/invoiceninja/invoiceninja source repository * * @copyright Copyright (c) 2022. Invoice Ninja LLC (https://paymentninja.com) * diff --git a/app/Http/Requests/Task/UploadTaskRequest.php b/app/Http/Requests/Task/UploadTaskRequest.php index 250f76cf9198..6b7d96ef048b 100644 --- a/app/Http/Requests/Task/UploadTaskRequest.php +++ b/app/Http/Requests/Task/UploadTaskRequest.php @@ -1,10 +1,10 @@ user()->can('edit', $this->task); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return $user->can('edit', $this->task); } public function rules() { $rules = []; - if ($this->input('documents')) { - $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000'; + if ($this->file('documents') && is_array($this->file('documents'))) { + $rules['documents.*'] = $this->file_validation; + } elseif ($this->file('documents')) { + $rules['documents'] = $this->file_validation; } + if ($this->file('file') && is_array($this->file('file'))) { + $rules['file.*'] = $this->file_validation; + } elseif ($this->file('file')) { + $rules['file'] = $this->file_validation; + } + + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) + $input['is_public'] = $this->toBoolean($input['is_public']); + + $this->replace($input); + } + } diff --git a/app/Http/Requests/Vendor/UploadVendorRequest.php b/app/Http/Requests/Vendor/UploadVendorRequest.php index 6df26684fd6c..a9263fb979be 100644 --- a/app/Http/Requests/Vendor/UploadVendorRequest.php +++ b/app/Http/Requests/Vendor/UploadVendorRequest.php @@ -1,10 +1,10 @@ file_validation; } + $rules['is_public'] = 'sometimes|boolean'; + return $rules; } + + public function prepareForValidation() + { + $input = $this->all(); + + if(isset($input['is_public'])) + $input['is_public'] = $this->toBoolean($input['is_public']); + + $this->replace($input); + } } diff --git a/app/Jobs/Bank/ProcessBankTransactions.php b/app/Jobs/Bank/ProcessBankTransactions.php index 2015b19d74d8..d6b6d8582ab7 100644 --- a/app/Jobs/Bank/ProcessBankTransactions.php +++ b/app/Jobs/Bank/ProcessBankTransactions.php @@ -111,6 +111,7 @@ class ProcessBankTransactions implements ShouldQueue if($account[0]['current_balance']) { $this->bank_integration->balance = $account[0]['current_balance']; $this->bank_integration->currency = $account[0]['account_currency']; + $this->bank_integration->bank_account_status = $account[0]['account_status']; $this->bank_integration->save(); } diff --git a/app/Jobs/Mail/NinjaMailerJob.php b/app/Jobs/Mail/NinjaMailerJob.php index ee38fbb77181..eed243b27d91 100644 --- a/app/Jobs/Mail/NinjaMailerJob.php +++ b/app/Jobs/Mail/NinjaMailerJob.php @@ -51,7 +51,7 @@ class NinjaMailerJob implements ShouldQueue public $override; - /** @var \App\Models\Company $company | null **/ + /** @var null|\App\Models\Company $company **/ public ?Company $company; private $mailer; @@ -143,8 +143,6 @@ class NinjaMailerJob implements ShouldQueue LightLogs::create(new EmailSuccess($this->nmo->company->company_key)) ->send(); - $this->nmo = null; - $this->company = null; } catch(\Symfony\Component\Mime\Exception\RfcComplianceException $e) { nlog("Mailer failed with a Logic Exception {$e->getMessage()}"); $this->fail(); @@ -195,6 +193,9 @@ class NinjaMailerJob implements ShouldQueue $this->release($this->backoff()[$this->attempts()-1]); } + $this->nmo = null; + $this->company = null; + /*Clean up mailers*/ $this->cleanUpMailers(); } diff --git a/app/Jobs/Report/PreviewReport.php b/app/Jobs/Report/PreviewReport.php new file mode 100644 index 000000000000..abddca938758 --- /dev/null +++ b/app/Jobs/Report/PreviewReport.php @@ -0,0 +1,51 @@ +company->db); + + /** @var \App\Export\CSV\CreditExport $export */ + $export = new $this->report_class($this->company, $this->request); + $report = $export->returnJson(); + + // nlog($report); + Cache::put($this->hash, $report, 60 * 60); + } + + public function middleware() + { + return [new WithoutOverlapping("report-{$this->company->company_key}")]; + } +} diff --git a/app/Models/Company.php b/app/Models/Company.php index 644dcab807e1..1de20b8d694b 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -880,6 +880,13 @@ class Company extends BaseModel return $data; } + public function utc_offset(): int + { + $timezone = $this->timezone(); + + return $timezone->utc_offset ?? 0; + } + public function timezone_offset(): int { $offset = 0; diff --git a/app/Models/CompanyGateway.php b/app/Models/CompanyGateway.php index 446d3022c8fe..d40c569ba05b 100644 --- a/app/Models/CompanyGateway.php +++ b/app/Models/CompanyGateway.php @@ -221,6 +221,22 @@ class CompanyGateway extends BaseModel { $this->config = encrypt(json_encode($config)); } + + /** + * setConfigField + * + * @param mixed $field + * @param mixed $value + * @return void + */ + public function setConfigField($field, $value): void + { + $config = $this->getConfig(); + $config->{$field} = $value; + + $this->setConfig($config); + $this->save(); + } /** * @return mixed diff --git a/app/Models/Document.php b/app/Models/Document.php index e317e27c8656..476c0f605ccb 100644 --- a/app/Models/Document.php +++ b/app/Models/Document.php @@ -77,6 +77,16 @@ class Document extends BaseModel 'name', ]; + /** + * @var array + */ + protected $casts = [ + 'is_public' => 'bool', + 'updated_at' => 'timestamp', + 'created_at' => 'timestamp', + 'deleted_at' => 'timestamp', + ]; + /** * @var array */ diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index 79677bf45b5c..80c5b391d7c0 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -171,7 +171,7 @@ class Gateway extends StaticModel ]; case 57: return [ - GatewayType::CREDIT_CARD => ['refund' => false, 'token_billing' => true], //Square + GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true], //Square ]; case 52: return [ diff --git a/app/Models/PaymentHash.php b/app/Models/PaymentHash.php index daf6b6197d9f..a870489ce02f 100644 --- a/app/Models/PaymentHash.php +++ b/app/Models/PaymentHash.php @@ -17,7 +17,7 @@ use Illuminate\Database\Eloquent\Model; * App\Models\PaymentHash * * @property int $id - * @property string $hash + * @property string $hash 32 char length AlphaNum * @property float $fee_total * @property int|null $fee_invoice_id * @property \stdClass $data @@ -41,6 +41,7 @@ class PaymentHash extends Model /** * @class \App\Models\PaymentHash $this * @property \App\Models\PaymentHash $data + * @property \App\Modes\PaymentHash $hash 32 char length AlphaNum * @class \stdClass $data * @property string $raw_value */ diff --git a/app/Models/SystemLog.php b/app/Models/SystemLog.php index e402d09f468e..781e2b1a7a48 100644 --- a/app/Models/SystemLog.php +++ b/app/Models/SystemLog.php @@ -195,7 +195,10 @@ class SystemLog extends Model */ public function scopeCompany($query) { - $query->where('company_id', auth()->user()->companyId()); + /** @var \App\Models\User $user */ + $user = auth()->user(); + + $query->where('company_id', $user->companyId()); return $query; } diff --git a/app/PaymentDrivers/BaseDriver.php b/app/PaymentDrivers/BaseDriver.php index 43290710a70d..940727d9f917 100644 --- a/app/PaymentDrivers/BaseDriver.php +++ b/app/PaymentDrivers/BaseDriver.php @@ -263,6 +263,8 @@ class BaseDriver extends AbstractPaymentDriver public function setClient(Client $client) { $this->client = $client; + + return $this; } /************************** Helper methods *************************************/ diff --git a/app/PaymentDrivers/Square/CreditCard.php b/app/PaymentDrivers/Square/CreditCard.php index f3589b98333f..59139361a946 100644 --- a/app/PaymentDrivers/Square/CreditCard.php +++ b/app/PaymentDrivers/Square/CreditCard.php @@ -12,30 +12,30 @@ namespace App\PaymentDrivers\Square; -use App\Exceptions\PaymentFailed; -use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest; -use App\Models\ClientGatewayToken; -use App\Models\GatewayType; +use App\Models\Invoice; use App\Models\Payment; -use App\Models\PaymentType; -use App\PaymentDrivers\Common\MethodInterface; -use App\PaymentDrivers\SquarePaymentDriver; -use App\Utils\Traits\MakesHash; -use Illuminate\Http\RedirectResponse; -use Illuminate\Http\Request; -use Illuminate\Support\Str; +use App\Models\SystemLog; use Illuminate\View\View; +use App\Models\GatewayType; +use App\Models\PaymentType; +use Illuminate\Support\Str; +use Illuminate\Http\Request; use Square\Http\ApiResponse; +use App\Jobs\Util\SystemLogger; +use App\Utils\Traits\MakesHash; +use App\Exceptions\PaymentFailed; +use App\Models\ClientGatewayToken; +use Illuminate\Http\RedirectResponse; +use App\PaymentDrivers\SquarePaymentDriver; +use App\PaymentDrivers\Common\MethodInterface; +use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest; class CreditCard implements MethodInterface { use MakesHash; - public $square_driver; - - public function __construct(SquarePaymentDriver $square_driver) + public function __construct(public SquarePaymentDriver $square_driver) { - $this->square_driver = $square_driver; $this->square_driver->init(); } @@ -100,28 +100,35 @@ class CreditCard implements MethodInterface ); if ($request->shouldUseToken()) { - /** @var \App\Models\ClientGatewayToken $cgt **/ - $cgt = ClientGatewayToken::where('token', $request->token)->first(); + $cgt = ClientGatewayToken::query()->where('token', $request->token)->first(); $token = $cgt->token; } + $invoice = Invoice::query()->whereIn('id', $this->transformKeys(array_column($this->square_driver->payment_hash->invoices(), 'invoice_id')))->withTrashed()->first(); + + if ($invoice) { + $description = "Invoice {$invoice->number} for {$amount} for client {$this->square_driver->client->present()->name()}"; + } else { + $description = "Payment with no invoice for amount {$amount} for client {$this->square_driver->client->present()->name()}"; + } + $amount_money = new \Square\Models\Money(); $amount_money->setAmount($amount); $amount_money->setCurrency($this->square_driver->client->currency()->code); - $body = new \Square\Models\CreatePaymentRequest($token, $request->idempotencyKey, $amount_money); - + $body = new \Square\Models\CreatePaymentRequest($token, $request->idempotencyKey); + $body->setAmountMoney($amount_money); $body->setAutocomplete(true); $body->setLocationId($this->square_driver->company_gateway->getConfigField('locationId')); - $body->setReferenceId(Str::random(16)); - + $body->setReferenceId($this->square_driver->payment_hash->hash); + $body->setNote($description); + if ($request->shouldUseToken()) { $body->setCustomerId($cgt->gateway_customer_reference); }elseif ($request->has('verificationToken') && $request->input('verificationToken')) { $body->setVerificationToken($request->input('verificationToken')); } - /** @var ApiResponse */ $response = $this->square_driver->square->getPaymentsApi()->createPayment($body); if ($response->isSuccess()) { @@ -152,6 +159,20 @@ class CreditCard implements MethodInterface $payment = $this->square_driver->createPayment($payment_record, Payment::STATUS_COMPLETED); + $message = [ + 'server_response' => $body, + 'data' => $this->square_driver->payment_hash->data, + ]; + + SystemLogger::dispatch( + $message, + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_SUCCESS, + SystemLog::TYPE_SQUARE, + $this->square_driver->client, + $this->square_driver->client->company, + ); + return redirect()->route('client.payments.show', ['payment' => $this->encodePrimaryKey($payment->id)]); } diff --git a/app/PaymentDrivers/Square/SquareWebhook.php b/app/PaymentDrivers/Square/SquareWebhook.php new file mode 100644 index 000000000000..ebe46b0af4ee --- /dev/null +++ b/app/PaymentDrivers/Square/SquareWebhook.php @@ -0,0 +1,176 @@ + PaymentType::CREDIT_CARD_OTHER, + 'BANK_ACCOUNT' => PaymentType::ACH, + 'WALLET' => PaymentType::CREDIT_CARD_OTHER, + 'BUY_NOW_PAY_LATER' => PaymentType::CREDIT_CARD_OTHER, + 'SQUARE_ACCOUNT' => PaymentType::CREDIT_CARD_OTHER, + 'CASH' => PaymentType::CASH, + 'EXTERNAL' =>PaymentType::CREDIT_CARD_OTHER + ]; + + public function __construct(public array $webhook_array, public string $company_key, public int $company_gateway_id) + { + } + + public function handle() + { + nlog("Square Webhook"); + + MultiDB::findAndSetDbByCompanyKey($this->company_key); + + $this->company_gateway = CompanyGateway::query()->withTrashed()->find($this->company_gateway_id); + $this->driver = $this->company_gateway->driver()->init(); + $this->square = $this->driver->square; + + $status = $this->webhook_array['data']['object']['payment']['status'] ?? false; + $payment_id = $this->webhook_array['data']['object']['payment']['id'] ?? null; + + $payment_status = false; + + match($status){ + 'APPROVED' => $payment_status = false, + 'COMPLETED' => $payment_status = Payment::STATUS_COMPLETED, + 'PENDING' => $payment_status = Payment::STATUS_PENDING, + 'CANCELED' => $payment_status = Payment::STATUS_CANCELLED, + 'FAILED' => $payment_status = Payment::STATUS_FAILED, + default => $payment_status = false, + }; + + if(!$payment_status){ + nlog("Square Webhook - Payment Status Not Found or not worthy of processing"); + nlog($this->webhook_array); + } + + $payment = $this->retrieveOrCreatePayment($payment_id, $payment_status); + + /** If the status was pending and now is reporting as Failed / Cancelled - process failure path */ + if($payment->status_id == Payment::STATUS_PENDING && in_array($payment_status, [Payment::STATUS_CANCELLED, Payment::STATUS_FAILED])){ + $payment->service()->deletePayment(); + + if ($this->driver->payment_hash) { + $error = ctrans('texts.client_payment_failure_body', [ + 'invoice' => implode(',', $payment->invoices->pluck('number')->toArray()), + 'amount' => array_sum(array_column($this->driver->payment_hash->invoices(), 'amount')) + $this->driver->payment_hash->fee_total, + ]); + } else { + $error = 'Payment for '.$payment->client->present()->name()." for {$payment->amount} failed"; + } + + PaymentFailedMailer::dispatch( + $this->driver->payment_hash, + $this->driver->client->company, + $this->driver->client, + $error + ); + + } + elseif($payment->status_id == Payment::STATUS_PENDING && in_array($payment_status, [Payment::STATUS_COMPLETED, Payment::STATUS_COMPLETED])){ + $payment->status_id = Payment::STATUS_COMPLETED; + $payment->save(); + } + + } + + private function retrieveOrCreatePayment(?string $payment_reference, int $payment_status): ?\App\Models\Payment + { + + $payment = Payment::withTrashed()->where('transaction_reference', $payment_reference)->first(); + + if($payment) { + nlog("payment found, returning"); + return $payment; + } + + /** Handles the edge case where for some reason the payment has not yet been recorded in Invoice Ninja */ + $apiResponse = $this->square->getPaymentsApi()->getPayment($payment_reference); + + nlog("searching square for payment"); + + if($apiResponse->isSuccess()){ + + nlog("Searching by payment hash"); + + $payment_hash_id = $apiResponse->getPayment()->getReferenceId() ?? false; + $square_payment = $apiResponse->getPayment()->jsonSerialize(); + $payment_hash = PaymentHash::query()->where('hash', $payment_hash_id)->firstOrFail(); + + $payment_hash->data = array_merge((array) $payment_hash->data, (array)$square_payment); + $payment_hash->save(); + + $this->driver->setPaymentHash($payment_hash); + $this->driver->setClient($payment_hash->fee_invoice->client); + + $data = [ + 'payment_type' => $this->source_type[$square_payment->source_type], + 'amount' => $payment_hash->amount_with_fee, + 'transaction_reference' => $square_payment->id, + 'gateway_type_id' => GatewayType::BANK_TRANSFER, + ]; + + $payment = $this->driver->createPayment($data, $payment_status); + + nlog("Creating payment"); + + SystemLogger::dispatch( + ['response' => $this->webhook_array, 'data' => $square_payment], + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_SUCCESS, + SystemLog::TYPE_SQUARE, + $this->driver->client, + $this->driver->client->company, + ); + + return $payment; + + } + else{ + nlog("Square Webhook - Payment not found: {$payment_reference}"); + nlog($apiResponse->getErrors()); + return null; + } + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/SquarePaymentDriver.php b/app/PaymentDrivers/SquarePaymentDriver.php index cdae15876a2e..9a14358be634 100644 --- a/app/PaymentDrivers/SquarePaymentDriver.php +++ b/app/PaymentDrivers/SquarePaymentDriver.php @@ -11,18 +11,22 @@ namespace App\PaymentDrivers; -use App\Http\Requests\Payments\PaymentWebhookRequest; -use App\Jobs\Util\SystemLogger; -use App\Models\ClientGatewayToken; -use App\Models\GatewayType; use App\Models\Invoice; use App\Models\Payment; +use App\Models\SystemLog; +use App\Models\GatewayType; use App\Models\PaymentHash; use App\Models\PaymentType; -use App\Models\SystemLog; -use App\PaymentDrivers\Square\CreditCard; +use App\Jobs\Util\SystemLogger; use App\Utils\Traits\MakesHash; -use Square\Http\ApiResponse; +use Square\Utils\WebhooksHelper; +use App\Models\ClientGatewayToken; +use Square\Models\WebhookSubscription; +use App\PaymentDrivers\Square\CreditCard; +use App\PaymentDrivers\Square\SquareWebhook; +use Square\Models\CreateWebhookSubscriptionRequest; +use App\Http\Requests\Payments\PaymentWebhookRequest; +use Square\Models\Builders\RefundPaymentRequestBuilder; class SquarePaymentDriver extends BaseDriver { @@ -96,15 +100,115 @@ class SquarePaymentDriver extends BaseDriver public function refund(Payment $payment, $amount, $return_client_response = false) { $this->init(); + $this->client = $payment->client; $amount_money = new \Square\Models\Money(); $amount_money->setAmount($this->convertAmount($amount)); $amount_money->setCurrency($this->client->currency()->code); - $body = new \Square\Models\RefundPaymentRequest(\Illuminate\Support\Str::random(32), $amount_money, $payment->transaction_reference); + $body = RefundPaymentRequestBuilder::init(\Illuminate\Support\Str::random(32), $amount_money) + ->paymentId($payment->transaction_reference) + ->reason('Refund Request') + ->build(); + + $apiResponse = $this->square->getRefundsApi()->refundPayment($body); + + if ($apiResponse->isSuccess()) { + + $refundPaymentResponse = $apiResponse->getResult(); + + nlog($refundPaymentResponse); + + /** + * - `PENDING` - Awaiting approval. + * - `COMPLETED` - Successfully completed. + * - `REJECTED` - The refund was rejected. + * - `FAILED` - An error occurred. + */ + + $status = $refundPaymentResponse->getRefund()->getStatus(); + + if(in_array($status, ['COMPLETED', 'PENDING'])){ + + $transaction_reference = $refundPaymentResponse->getRefund()->getId(); + + $data = [ + 'transaction_reference' => $transaction_reference, + 'transaction_response' => json_encode($refundPaymentResponse->getRefund()->jsonSerialize()), + 'success' => true, + 'description' => $refundPaymentResponse->getRefund()->getReason(), + 'code' => $refundPaymentResponse->getRefund()->getReason(), + ]; + + SystemLogger::dispatch( + [ + 'server_response' => $data, + 'data' => request()->all() + ], + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_SUCCESS, + SystemLog::TYPE_SQUARE, + $this->client, + $this->client->company + ); + + return $data; + } + elseif(in_array($status, ['REJECTED', 'FAILED'])) { + + $transaction_reference = $refundPaymentResponse->getRefund()->getId(); + + $data = [ + 'transaction_reference' => $transaction_reference, + 'transaction_response' => json_encode($refundPaymentResponse->getRefund()->jsonSerialize()), + 'success' => false, + 'description' => $refundPaymentResponse->getRefund()->getReason(), + 'code' => $refundPaymentResponse->getRefund()->getReason(), + ]; + + SystemLogger::dispatch( + [ + 'server_response' => $data, + 'data' => request()->all() + ], + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_FAILURE, + SystemLog::TYPE_SQUARE, + $this->client, + $this->client->company + ); + + return $data; + } + + } else { + + /** @var \Square\Models\Error $error */ + $error = end($apiResponse->getErrors()); + + $data = [ + 'transaction_reference' => $payment->transaction_reference, + 'transaction_response' => $error->jsonSerialize(), + 'success' => false, + 'description' => $error->getDetail(), + 'code' => $error->getCode(), + ]; + + SystemLogger::dispatch( + [ + 'server_response' => $data, + 'data' => request()->all() + ], + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_FAILURE, + SystemLog::TYPE_SQUARE, + $this->client, + $this->client->company + ); + + return $data; + } - /** @var ApiResponse */ - $response = $this->square->getRefundsApi()->refund($body); } public function tokenBilling(ClientGatewayToken $cgt, PaymentHash $payment_hash) @@ -126,10 +230,12 @@ class SquarePaymentDriver extends BaseDriver $amount_money->setAmount($amount); $amount_money->setCurrency($this->client->currency()->code); - $body = new \Square\Models\CreatePaymentRequest($cgt->token, \Illuminate\Support\Str::random(32), $amount_money); + $body = new \Square\Models\CreatePaymentRequest($cgt->token, \Illuminate\Support\Str::random(32)); $body->setCustomerId($cgt->gateway_customer_reference); + $body->setAmountMoney($amount_money); + $body->setReferenceId($payment_hash->hash); + $body->setNote(substr($description,0,500)); - /** @var ApiResponse */ $response = $this->square->getPaymentsApi()->createPayment($body); $body = json_decode($response->getBody()); @@ -177,8 +283,130 @@ class SquarePaymentDriver extends BaseDriver return false; } - public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null) + public function checkWebhooks(): mixed { + $this->init(); + + $api_response = $this->square->getWebhookSubscriptionsApi()->listWebhookSubscriptions(); + + if ($api_response->isSuccess()) { + + //array of WebhookSubscription objects + foreach($api_response->getResult()->getSubscriptions() ?? [] as $subscription) + { + if($subscription->getName() == 'Invoice_Ninja_Webhook_Subscription') + return $subscription->getId(); + } + + } else { + $errors = $api_response->getErrors(); + nlog($errors); + return false; + } + + return false; + } + + // { + // "subscription": { + // "id": "wbhk_b35f6b3145074cf9ad513610786c19d5", + // "name": "Example Webhook Subscription", + // "enabled": true, + // "event_types": [ + // "payment.created", + // "order.updated", + // "invoice.created" + // ], + // "notification_url": "https://example-webhook-url.com", + // "api_version": "2021-12-15", + // "signature_key": "1k9bIJKCeTmSQwyagtNRLg", + // "created_at": "2022-08-17 23:29:48 +0000 UTC", + // "updated_at": "2022-08-17 23:29:48 +0000 UTC" + // } + // } + public function createWebhooks(): void + { + + if($this->checkWebhooks()) + return; + + $this->init(); + + $event_types = ['payment.created', 'payment.updated']; + $subscription = new WebhookSubscription(); + $subscription->setName('Invoice_Ninja_Webhook_Subscription'); + $subscription->setEventTypes($event_types); + + // $subscription->setNotificationUrl('https://invoicing.co'); + + $subscription->setNotificationUrl($this->company_gateway->webhookUrl()); + // $subscription->setApiVersion('2021-12-15'); + + $body = new CreateWebhookSubscriptionRequest($subscription); + $body->setIdempotencyKey(\Illuminate\Support\Str::uuid()); + + $api_response = $this->square->getWebhookSubscriptionsApi()->createWebhookSubscription($body); + + if ($api_response->isSuccess()) { + $subscription = $api_response->getResult()->getSubscription(); + $signatureKey = $subscription->getSignatureKey(); + + $this->company_gateway->setConfigField('signatureKey', $signatureKey); + + } else { + $errors = $api_response->getErrors(); + nlog($errors); + } + + } + + public function processWebhookRequest(PaymentWebhookRequest $request) + { + nlog("square webhook"); + + $signature_key = $this->company_gateway->getConfigField('signatureKey'); + $notification_url = $this->company_gateway->webhookUrl(); + + $body = ''; + $handle = fopen('php://input', 'r'); + while(!feof($handle)) { + $body .= fread($handle, 1024); + } + + if (WebhooksHelper::isValidWebhookEventSignature($body, $request->header('x-square-hmacsha256-signature'), $signature_key, $notification_url)) { + SquareWebhook::dispatch($request->all(), $request->company_key, $this->company_gateway->id)->delay(5); + } else { + nlog("Square Hash Mismatch"); + nlog($request->all()); + } + + return response()->json(['success' => true]); + + } + + public function testWebhook() + { + $this->init(); + + $body = new \Square\Models\TestWebhookSubscriptionRequest(); + $body->setEventType('payment.created'); + + //getsubscriptionid here + $subscription_id = $this->checkWebhooks(); + + if(!$subscription_id) + return nlog('No Subscription Found'); + + $api_response = $this->square->getWebhookSubscriptionsApi()->testWebhookSubscription($subscription_id, $body); + + if ($api_response->isSuccess()) { + $result = $api_response->getResult(); + nlog($result); + } else { + $errors = $api_response->getErrors(); + nlog($errors); + } + } public function convertAmount($amount) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 6d5e145af815..089287512bfd 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -93,6 +93,7 @@ class AppServiceProvider extends ServiceProvider }); Mailer::macro('postmark_config', function (string $postmark_key) { + // @phpstan-ignore /** @phpstan-ignore-next-line **/ Mailer::setSymfonyTransport(app('mail.manager')->createSymfonyTransport([ 'transport' => 'postmark', 'token' => $postmark_key @@ -101,8 +102,10 @@ class AppServiceProvider extends ServiceProvider return $this; }); + Mailer::macro('mailgun_config', function (string $secret, string $domain, string $endpoint = 'api.mailgun.net') { - Mailer::setSymfonyTransport(app('mail.manager')->createSymfonyTransport([ + // @phpstan-ignore /** @phpstan-ignore-next-line **/ + Mailer::setSymfonyTransport(app('mail.manager')->createSymfonyTransport([ 'transport' => 'mailgun', 'secret' => $secret, 'domain' => $domain, diff --git a/app/Repositories/TaskRepository.php b/app/Repositories/TaskRepository.php index 051a2c1c5689..f3f5642dc198 100644 --- a/app/Repositories/TaskRepository.php +++ b/app/Repositories/TaskRepository.php @@ -118,7 +118,7 @@ class TaskRepository extends BaseRepository $task->is_running = $data['is_running'] ? 1 : 0; } - $task->calculated_start_date = $this->harvestStartDate($time_log); + $task->calculated_start_date = $this->harvestStartDate($time_log, $task); $task->time_log = json_encode($time_log); @@ -133,11 +133,11 @@ class TaskRepository extends BaseRepository return $task; } - private function harvestStartDate($time_log) + private function harvestStartDate($time_log, $task) { if(isset($time_log[0][0])){ - return \Carbon\Carbon::createFromTimestamp($time_log[0][0]); + return \Carbon\Carbon::createFromTimestamp($time_log[0][0])->addSeconds($task->company->utc_offset()); } return null; @@ -218,7 +218,7 @@ class TaskRepository extends BaseRepository $log = array_merge($log, [[$start_time, 0]]); $task->time_log = json_encode($log); - $task->calculated_start_date = \Carbon\Carbon::createFromTimestamp($start_time); + $task->calculated_start_date = \Carbon\Carbon::createFromTimestamp($start_time)->addSeconds($task->company->utc_offset()); $task->saveQuietly(); } diff --git a/app/Services/Email/Email.php b/app/Services/Email/Email.php index 4a9663ea43f4..4c114d586d31 100644 --- a/app/Services/Email/Email.php +++ b/app/Services/Email/Email.php @@ -138,7 +138,9 @@ class Email implements ShouldQueue $this->email_object->company = $this->company; - $this->email_object->client_id ? $this->email_object->settings = $this->email_object->client->getMergedSettings() : $this->email_object->settings = $this->company->settings; + $this->email_object->client_id ? $this->email_object->settings = $this->email_object->client->getMergedSettings() : $this->email_object->settings = $this->company->settings; + + $this->email_object->client_id ? nlog("client settings") : nlog("company settings "); $this->email_object->whitelabel = $this->company->account->isPaid() ? true : false; diff --git a/app/Services/Payment/ApplyNumber.php b/app/Services/Payment/ApplyNumber.php index 76c915204fa5..bed877459065 100644 --- a/app/Services/Payment/ApplyNumber.php +++ b/app/Services/Payment/ApplyNumber.php @@ -2,7 +2,7 @@ /** * Payment Ninja (https://paymentninja.com). * - * @link https://github.com/paymentninja/paymentninja source repository + * @link https://github.com/invoiceninja/invoiceninja source repository * * @copyright Copyright (c) 2022. Payment Ninja LLC (https://paymentninja.com) * diff --git a/app/Services/Payment/PaymentService.php b/app/Services/Payment/PaymentService.php index 9dc72e088258..280a33a1df9f 100644 --- a/app/Services/Payment/PaymentService.php +++ b/app/Services/Payment/PaymentService.php @@ -2,7 +2,7 @@ /** * payment Ninja (https://paymentninja.com). * - * @link https://github.com/paymentninja/paymentninja source repository + * @link https://github.com/invoiceninja/invoiceninja source repository * * @copyright Copyright (c) 2022. payment Ninja LLC (https://paymentninja.com) * diff --git a/app/Transformers/TaskTransformer.php b/app/Transformers/TaskTransformer.php index af78d20d92eb..cd668ba6bf63 100644 --- a/app/Transformers/TaskTransformer.php +++ b/app/Transformers/TaskTransformer.php @@ -30,6 +30,7 @@ class TaskTransformer extends EntityTransformer protected $defaultIncludes = [ 'documents', + 'project', ]; /** diff --git a/composer.json b/composer.json index 0d071ca1da10..d9bb6348f79c 100644 --- a/composer.json +++ b/composer.json @@ -86,7 +86,7 @@ "socialiteproviders/microsoft": "^4.1", "spatie/laravel-data": "^3.5", "sprain/swiss-qr-bill": "^3.2", - "square/square": "13.0.0.20210721", + "square/square": "30.0.0.*", "stripe/stripe-php": "^7.50", "symfony/http-client": "^6.0", "symfony/mailgun-mailer": "^6.1", diff --git a/composer.lock b/composer.lock index 2be5001245e6..31584f8b7590 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9d7348352c913eb82fcca2e67670e1f8", + "content-hash": "673ca66ddfdb05c3ea29012594a196d3", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -99,21 +99,121 @@ "time": "2023-05-02T15:11:17+00:00" }, { - "name": "apimatic/jsonmapper", - "version": "v2.0.3", + "name": "apimatic/core", + "version": "0.3.2", "source": { "type": "git", - "url": "https://github.com/apimatic/jsonmapper.git", - "reference": "f7588f1ab692c402a9118e65cb9fd42b74e5e0db" + "url": "https://github.com/apimatic/core-lib-php.git", + "reference": "32238fb83ce9a3ebef38c726b497c0f218d6e6c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/apimatic/jsonmapper/zipball/f7588f1ab692c402a9118e65cb9fd42b74e5e0db", - "reference": "f7588f1ab692c402a9118e65cb9fd42b74e5e0db", + "url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/32238fb83ce9a3ebef38c726b497c0f218d6e6c9", + "reference": "32238fb83ce9a3ebef38c726b497c0f218d6e6c9", "shasum": "" }, + "require": { + "apimatic/core-interfaces": "~0.1.0", + "apimatic/jsonmapper": "^3.1.1", + "ext-curl": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "php": "^7.2 || ^8.0", + "php-jsonpointer/php-jsonpointer": "^3.0.2" + }, "require-dev": { - "phpunit/phpunit": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "phan/phan": "5.4.2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Core\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Core logic and the utilities for the Apimatic's PHP SDK", + "homepage": "https://github.com/apimatic/core-lib-php", + "keywords": [ + "apimatic", + "core", + "corelib", + "php" + ], + "support": { + "issues": "https://github.com/apimatic/core-lib-php/issues", + "source": "https://github.com/apimatic/core-lib-php/tree/0.3.2" + }, + "time": "2023-07-11T09:30:32+00:00" + }, + { + "name": "apimatic/core-interfaces", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/apimatic/core-interfaces-php.git", + "reference": "183214195a79784c382a446795c46ca8c1f43cc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/apimatic/core-interfaces-php/zipball/183214195a79784c382a446795c46ca8c1f43cc1", + "reference": "183214195a79784c382a446795c46ca8c1f43cc1", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "CoreInterfaces\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Definition of the behavior of apimatic/core, apimatic/unirest-php and Apimatic's PHP SDK", + "homepage": "https://github.com/apimatic/core-interfaces-php", + "keywords": [ + "apimatic", + "core", + "corelib", + "interface", + "php", + "unirest" + ], + "support": { + "issues": "https://github.com/apimatic/core-interfaces-php/issues", + "source": "https://github.com/apimatic/core-interfaces-php/tree/0.1.2" + }, + "time": "2023-04-04T06:40:52+00:00" + }, + { + "name": "apimatic/jsonmapper", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/apimatic/jsonmapper.git", + "reference": "6673a946c21f2ceeec0cb60d17541c11a22bc79d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/apimatic/jsonmapper/zipball/6673a946c21f2ceeec0cb60d17541c11a22bc79d", + "reference": "6673a946c21f2ceeec0cb60d17541c11a22bc79d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "squizlabs/php_codesniffer": "^3.0.0" }, "type": "library", @@ -144,37 +244,38 @@ "support": { "email": "mehdi.jaffery@apimatic.io", "issues": "https://github.com/apimatic/jsonmapper/issues", - "source": "https://github.com/apimatic/jsonmapper/tree/v2.0.3" + "source": "https://github.com/apimatic/jsonmapper/tree/3.1.2" }, - "time": "2021-07-16T09:02:23+00:00" + "time": "2023-06-08T04:27:10+00:00" }, { "name": "apimatic/unirest-php", - "version": "2.3.0", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/apimatic/unirest-php.git", - "reference": "52e226fb3b7081dc9ef64aee876142a240a5f0f9" + "reference": "e16754010c16be5473289470f129d87a0f41b55e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/apimatic/unirest-php/zipball/52e226fb3b7081dc9ef64aee876142a240a5f0f9", - "reference": "52e226fb3b7081dc9ef64aee876142a240a5f0f9", + "url": "https://api.github.com/repos/apimatic/unirest-php/zipball/e16754010c16be5473289470f129d87a0f41b55e", + "reference": "e16754010c16be5473289470f129d87a0f41b55e", "shasum": "" }, "require": { + "apimatic/core-interfaces": "^0.1.0", "ext-curl": "*", - "php": ">=5.6.0" + "ext-json": "*", + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5 || ^6 || ^7 || ^8 || ^9" - }, - "suggest": { - "ext-json": "Allows using JSON Bodies for sending and parsing requests" + "phan/phan": "5.4.2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "autoload": { - "psr-0": { + "psr-4": { "Unirest\\": "src/" } }, @@ -208,9 +309,9 @@ "support": { "email": "opensource@apimatic.io", "issues": "https://github.com/apimatic/unirest-php/issues", - "source": "https://github.com/apimatic/unirest-php/tree/2.3.0" + "source": "https://github.com/apimatic/unirest-php/tree/4.0.5" }, - "time": "2022-06-15T08:29:49+00:00" + "time": "2023-04-25T14:19:45+00:00" }, { "name": "asm/php-ansible", @@ -424,16 +525,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.279.0", + "version": "3.279.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "7b3d38cfccd393add0ea0ce281de91846967c61e" + "reference": "ebd5e47c5be0425bb5cf4f80737850ed74767107" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7b3d38cfccd393add0ea0ce281de91846967c61e", - "reference": "7b3d38cfccd393add0ea0ce281de91846967c61e", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ebd5e47c5be0425bb5cf4f80737850ed74767107", + "reference": "ebd5e47c5be0425bb5cf4f80737850ed74767107", "shasum": "" }, "require": { @@ -513,9 +614,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.279.0" + "source": "https://github.com/aws/aws-sdk-php/tree/3.279.2" }, - "time": "2023-08-16T18:18:34+00:00" + "time": "2023-08-18T18:13:09+00:00" }, { "name": "bacon/bacon-qr-code", @@ -1351,16 +1452,16 @@ }, { "name": "doctrine/dbal", - "version": "3.6.5", + "version": "3.6.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf" + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/96d5a70fd91efdcec81fc46316efc5bf3da17ddf", - "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864", + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864", "shasum": "" }, "require": { @@ -1376,10 +1477,11 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.21", + "phpstan/phpstan": "1.10.29", "phpstan/phpstan-strict-rules": "^1.5", "phpunit/phpunit": "9.6.9", "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", @@ -1443,7 +1545,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.6.5" + "source": "https://github.com/doctrine/dbal/tree/3.6.6" }, "funding": [ { @@ -1459,7 +1561,7 @@ "type": "tidelift" } ], - "time": "2023-07-17T09:15:50+00:00" + "time": "2023-08-17T05:38:17+00:00" }, { "name": "doctrine/deprecations", @@ -3348,16 +3450,16 @@ }, { "name": "horstoeko/zugferd", - "version": "v1.0.23", + "version": "v1.0.26", "source": { "type": "git", "url": "https://github.com/horstoeko/zugferd.git", - "reference": "bb55417be4c4de8deb0113e832feeaf7b4d3984e" + "reference": "2a7541a35f00499c206391273f30159dc2c7072a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/bb55417be4c4de8deb0113e832feeaf7b4d3984e", - "reference": "bb55417be4c4de8deb0113e832feeaf7b4d3984e", + "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/2a7541a35f00499c206391273f30159dc2c7072a", + "reference": "2a7541a35f00499c206391273f30159dc2c7072a", "shasum": "" }, "require": { @@ -3415,9 +3517,9 @@ ], "support": { "issues": "https://github.com/horstoeko/zugferd/issues", - "source": "https://github.com/horstoeko/zugferd/tree/v1.0.23" + "source": "https://github.com/horstoeko/zugferd/tree/v1.0.26" }, - "time": "2023-08-16T17:39:36+00:00" + "time": "2023-08-18T03:05:43+00:00" }, { "name": "http-interop/http-factory-guzzle", @@ -7664,6 +7766,62 @@ }, "time": "2020-07-07T09:29:14+00:00" }, + { + "name": "php-jsonpointer/php-jsonpointer", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/raphaelstolt/php-jsonpointer.git", + "reference": "4428f86c6f23846e9faa5a420c4ef14e485b3afb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/raphaelstolt/php-jsonpointer/zipball/4428f86c6f23846e9faa5a420c4ef14e485b3afb", + "reference": "4428f86c6f23846e9faa5a420c4ef14e485b3afb", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "phpunit/phpunit": "4.6.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Rs\\Json": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Stolt", + "email": "raphael.stolt@gmail.com", + "homepage": "http://raphaelstolt.blogspot.com/" + } + ], + "description": "Implementation of JSON Pointer (http://tools.ietf.org/html/rfc6901)", + "homepage": "https://github.com/raphaelstolt/php-jsonpointer", + "keywords": [ + "json", + "json pointer", + "json traversal" + ], + "support": { + "issues": "https://github.com/raphaelstolt/php-jsonpointer/issues", + "source": "https://github.com/raphaelstolt/php-jsonpointer/tree/master" + }, + "time": "2016-08-29T08:51:01+00:00" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -10037,29 +10195,28 @@ }, { "name": "square/square", - "version": "13.0.0.20210721", + "version": "30.0.0.20230816", "source": { "type": "git", "url": "https://github.com/square/square-php-sdk.git", - "reference": "03d90445854cd3b500f75061a9c63956799b8ecf" + "reference": "fedfea8b6c6f16b6a90ef0d629743ae9ae25e13d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/square/square-php-sdk/zipball/03d90445854cd3b500f75061a9c63956799b8ecf", - "reference": "03d90445854cd3b500f75061a9c63956799b8ecf", + "url": "https://api.github.com/repos/square/square-php-sdk/zipball/fedfea8b6c6f16b6a90ef0d629743ae9ae25e13d", + "reference": "fedfea8b6c6f16b6a90ef0d629743ae9ae25e13d", "shasum": "" }, "require": { - "apimatic/jsonmapper": "^2.0.2", - "apimatic/unirest-php": "^2.0", - "ext-curl": "*", + "apimatic/core": "~0.3.0", + "apimatic/core-interfaces": "~0.1.0", + "apimatic/unirest-php": "^4.0.0", "ext-json": "*", - "ext-mbstring": "*", - "php": ">=7.2" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phan/phan": "^3.0", - "phpunit/phpunit": "^7.5 || ^8.5", + "phan/phan": "5.4.2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", @@ -10088,9 +10245,9 @@ ], "support": { "issues": "https://github.com/square/square-php-sdk/issues", - "source": "https://github.com/square/square-php-sdk/tree/13.0.0.20210721" + "source": "https://github.com/square/square-php-sdk/tree/30.0.0.20230816" }, - "time": "2021-07-21T06:43:15+00:00" + "time": "2023-08-15T21:45:55+00:00" }, { "name": "stripe/stripe-php", diff --git a/config/ninja.php b/config/ninja.php index 233559f73bbf..646f456a9cd1 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -15,8 +15,8 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', 'invoicing.co'), - 'app_version' => env('APP_VERSION','5.6.31'), - 'app_tag' => env('APP_TAG','5.6.31'), + 'app_version' => env('APP_VERSION','5.7.0'), + 'app_tag' => env('APP_TAG','5.7.0'), 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', ''), diff --git a/database/factories/DocumentFactory.php b/database/factories/DocumentFactory.php index b3183de7fff0..23109a5a5de6 100644 --- a/database/factories/DocumentFactory.php +++ b/database/factories/DocumentFactory.php @@ -25,7 +25,7 @@ class DocumentFactory extends Factory return [ 'is_default' => true, 'is_public' => true, - 'name' => true, + 'name' => $this->faker->word().".png", ]; } } diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php index 4a096febef58..6803c4bf5f54 100644 --- a/database/seeders/PaymentLibrariesSeeder.php +++ b/database/seeders/PaymentLibrariesSeeder.php @@ -80,7 +80,7 @@ class PaymentLibrariesSeeder extends Seeder ['id' => 53, 'name' => 'PagSeguro', 'provider' => 'PagSeguro', 'key' => 'ef498756b54db63c143af0ec433da803', 'fields' => '{"email":"","token":"","sandbox":false}'], ['id' => 54, 'name' => 'PAYMILL', 'provider' => 'Paymill', 'key' => 'ca52f618a39367a4c944098ebf977e1c', 'fields' => '{"apiKey":""}'], ['id' => 55, 'name' => 'Custom', 'provider' => 'Custom', 'is_offsite' => true, 'sort_order' => 21, 'key' => '54faab2ab6e3223dbe848b1686490baa', 'fields' => '{"name":"","text":""}'], - ['id' => 57, 'name' => 'Square', 'provider' => 'Square', 'is_offsite' => false, 'sort_order' => 21, 'key' => '65faab2ab6e3223dbe848b1686490baz', 'fields' => '{"accessToken":"","applicationId":"","locationId":"","testMode":false}'], + ['id' => 57, 'name' => 'Square', 'provider' => 'Square', 'is_offsite' => false, 'sort_order' => 21, 'key' => '65faab2ab6e3223dbe848b1686490baz', 'fields' => '{"accessToken":"","applicationId":"","locationId":"","signatureKey":"","testMode":false}'], ['id' => 58, 'name' => 'Razorpay', 'provider' => 'Razorpay', 'is_offsite' => false, 'sort_order' => 21, 'key' => 'hxd6gwg3ekb9tb3v9lptgx1mqyg69zu9', 'fields' => '{"apiKey":"","apiSecret":""}'], ['id' => 59, 'name' => 'Forte', 'provider' => 'Forte', 'is_offsite' => false, 'sort_order' => 21, 'key' => 'kivcvjexxvdiyqtj3mju5d6yhpeht2xs', 'fields' => '{"testMode":false,"apiLoginId":"","apiAccessId":"","secureKey":"","authOrganizationId":"","organizationId":"","locationId":""}'], ['id' => 60, 'name' => 'PayPal REST', 'provider' => 'PayPal_Rest', 'key' => '80af24a6a691230bbec33e930ab40665', 'fields' => '{"clientId":"","secret":"","signature":"","testMode":false}'], diff --git a/lang/ar/texts.php b/lang/ar/texts.php index 18e98f34ed84..2d3219afe580 100644 --- a/lang/ar/texts.php +++ b/lang/ar/texts.php @@ -2378,6 +2378,9 @@ $LANG = array( 'currency_cuban_peso' => 'بيزو كوبي', 'currency_bz_dollar' => 'دولار BZ', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'نأمل أن تستمتع باستخدام التطبيق.
إذا كنت تفكر في :link فإننا نقدر ذلك كثيرًا!', 'writing_a_review' => 'كتابة مراجعة', @@ -3313,9 +3316,9 @@ $LANG = array( 'freq_three_years' => 'ثلاث سنوات', 'military_time_help' => 'عرض 24 ساعة', 'click_here_capital' => 'انقر هنا', - 'marked_invoice_as_paid' => 'تم تعيين الفاتورة كمرسلة', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'نجح وضع علامة على الفواتير على أنها مرسلة', - 'marked_invoices_as_paid' => 'تم تعيين الفواتير كمرسلة', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'فشل النظام في إرسال الفاتورة بالبريد الإلكتروني :invoice', 'custom_value3' => 'القيمة المخصصة 3', 'custom_value4' => 'القيمة المخصصة 4', @@ -4926,7 +4929,7 @@ $LANG = array( 'sync_from' => 'مزامنة من', 'gateway_payment_text' => 'الفواتير: :invoices لـ :amount للعميل :client', 'gateway_payment_text_no_invoice' => 'الدفع بدون فاتورة للمبلغ :amount للعميل :client', - 'click_to_variables' => 'العميل هنا لمشاهدة جميع المتغيرات.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'سافر على متن سفينة لِـ', 'stripe_direct_debit_details' => 'يرجى التحويل إلى الحساب المصرفي المحدد أعلاه.', 'branch_name' => 'اسم الفرع', @@ -5072,7 +5075,7 @@ $LANG = array( 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5080,7 +5083,7 @@ $LANG = array( 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5088,9 +5091,50 @@ $LANG = array( 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/bg/texts.php b/lang/bg/texts.php index 293d2449b33c..f7796ae5c52e 100644 --- a/lang/bg/texts.php +++ b/lang/bg/texts.php @@ -2405,6 +2405,9 @@ $LANG = array( 'currency_cuban_peso' => 'Кубински песо', 'currency_bz_dollar' => 'BZ долар', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Надяваме се, че използвате приложението с удоволствие.
Ще се радваме, ако решите да :link!', 'writing_a_review' => 'напишете оценка', @@ -3340,9 +3343,9 @@ $LANG = array( 'freq_three_years' => 'Три години', 'military_time_help' => '24-часов формат', 'click_here_capital' => 'Натиснете тук', - 'marked_invoice_as_paid' => 'Успешно отбелязана фактура като изпратена', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Фактурите са маркирани като изпратени', - 'marked_invoices_as_paid' => 'Успешно маркирани фактури като изпратени ', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Системата не успя да изпрати фактура :invoice по e-mail', 'custom_value3' => 'Персонифицирана стойност 3', 'custom_value4' => 'Персонифицирана стойност 4', @@ -4953,7 +4956,7 @@ $LANG = array( 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5099,7 +5102,7 @@ $LANG = array( 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5107,7 +5110,7 @@ $LANG = array( 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5115,9 +5118,50 @@ $LANG = array( 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/ca/texts.php b/lang/ca/texts.php index 165dc5b1fd8e..0d2418f3da32 100644 --- a/lang/ca/texts.php +++ b/lang/ca/texts.php @@ -2404,6 +2404,9 @@ $LANG = array( 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'Dòlar BZ', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'We hope you\'re enjoying using the app.
If you\'d consider :link we\'d greatly appreciate it!', 'writing_a_review' => 'escriu una ressenya', @@ -3339,9 +3342,9 @@ $LANG = array( 'freq_three_years' => 'Three Years', 'military_time_help' => '24 Hour Display', 'click_here_capital' => 'Click here', - 'marked_invoice_as_paid' => 'Successfully marked invoice as sent', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Successfully marked invoices as sent', - 'marked_invoices_as_paid' => 'Successfully marked invoices as sent', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'System failed to email invoice :invoice', 'custom_value3' => 'Custom Value 3', 'custom_value4' => 'Custom Value 4', @@ -4952,7 +4955,7 @@ $LANG = array( 'sync_from' => 'Sincronitza de', 'gateway_payment_text' => 'Factures: :invoices de :amount per al client :client', 'gateway_payment_text_no_invoice' => 'Pagament sense factura de :amount per al client :client', - 'click_to_variables' => 'Pitgeu aquí per veure totes les variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Envia a', 'stripe_direct_debit_details' => 'Transferiu al compte bancari especificat a dalt, si us plau.', 'branch_name' => 'Nom de l\'oficina', @@ -5098,7 +5101,7 @@ $LANG = array( 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5106,7 +5109,7 @@ $LANG = array( 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5114,9 +5117,50 @@ $LANG = array( 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/de/texts.php b/lang/de/texts.php index a1c2ad677771..35c1f82c803c 100644 --- a/lang/de/texts.php +++ b/lang/de/texts.php @@ -2405,6 +2405,9 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'currency_cuban_peso' => 'Kubanischer Peso', 'currency_bz_dollar' => 'Belize-Dollar', + 'currency_libyan_dinar' => 'Libyscher Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Wir hoffen, dass Ihnen die App gefällt. Wenn Sie :link in Betracht ziehen würden, wären wir Ihnen sehr dankbar!', 'writing_a_review' => 'Schreiben einer Rezension', @@ -3340,9 +3343,9 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese 'freq_three_years' => 'Drei Jahre', 'military_time_help' => '24-Stunden-Anzeige', 'click_here_capital' => 'Klicke hier', - 'marked_invoice_as_paid' => 'Die Rechnung wurde erfolgreich als "versendet" markiert', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Erfolgreich Rechnungen als versendet markiert', - 'marked_invoices_as_paid' => 'Die Rechnung wurde erfolgreich als "versendet" markiert', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Das System konnte die Rechnung :invoice nicht per E-Mail versenden', 'custom_value3' => 'Benutzerdefinierter Wert 3', 'custom_value4' => 'Benutzerdefinierter Wert 4', @@ -3708,7 +3711,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'invoice_task_timelog' => 'Aufgaben Zeiterfassung in Rechnung stellen', 'invoice_task_timelog_help' => 'Zeitdetails in der Rechnungsposition ausweisen', 'auto_start_tasks_help' => 'Beginne Aufgabe vor dem Speichern', - 'configure_statuses' => 'Stati bearbeiten', + 'configure_statuses' => 'Status bearbeiten', 'task_settings' => 'Aufgaben-Einstellungen', 'configure_categories' => 'Kategorien bearbeiten', 'edit_expense_category' => 'Ausgaben Kategorie bearbeiten', @@ -3865,7 +3868,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'notification_credit_viewed' => 'Der folgende Kunde :client hat die Gutschrift :credit über :amount angeschaut.', 'reset_password_text' => 'Bitte geben Sie ihre E-Mail-Adresse an, um das Passwort zurücksetzen zu können.', 'password_reset' => 'Passwort zurücksetzten', - 'account_login_text' => 'Welcome! Glad to see you.', + 'account_login_text' => 'Willkommen! Schön Sie zu sehen.', 'request_cancellation' => 'Storno beantragen', 'delete_payment_method' => 'Zahlungsmethode löschen', 'about_to_delete_payment_method' => 'Diese Zahlungsmethode wird gelöscht.', @@ -4954,7 +4957,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'sync_from' => 'Synchronisieren von', 'gateway_payment_text' => 'Rechnungen: :invoices über :amount für Kunde :client', 'gateway_payment_text_no_invoice' => 'Zahlung ohne Rechnung für Kunde :client über :amount', - 'click_to_variables' => 'Client hier, um alle Variablen zu sehen.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Liefern an', 'stripe_direct_debit_details' => 'Bitte überweisen Sie den Betrag an obenstehende Bankverbindung', 'branch_name' => 'Zweigstelle', @@ -5100,7 +5103,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'certificate_passphrase' => 'Zertifikat Passwort', 'valid_vat_number' => 'Gültige USt-ID', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Abrechenbare Aufgaben anzeigen', 'credit_item' => 'Gutschriftsposition', 'drop_file_here' => 'Datei hier hineinziehen', @@ -5108,7 +5111,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'camera' => 'Kamera', 'gallery' => 'Gallerie', 'project_location' => 'Projektstandort', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Ungarisch', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5121,10 +5124,47 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting', 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', 'paid_date' => 'Paid Date', 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Steuerdetails', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Dateien hochladen', + 'download_e_invoice' => 'E-Rechnung herunterladen', + 'triangular_tax_info' => 'innergemeinschaftliches Dreiecksgeschäft', + 'intracommunity_tax_info' => 'Steuerfreie innergemeinschaftliche Lieferung', + 'reverse_tax_info' => 'Steuerschuldnerschaft des + +Leistungsempfängers', + 'currency_nicaraguan_cordoba' => 'Córdoba Oro', + 'public' => 'Öffentlich', + 'private' => 'Privat', + 'image' => 'Image', + 'other' => 'Andere', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', ); - return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/el/texts.php b/lang/el/texts.php index 9af40d06e252..aa31422663ff 100644 --- a/lang/el/texts.php +++ b/lang/el/texts.php @@ -2404,6 +2404,9 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Ελπίζουμε να απολαμβάνετε τη χρήση της εφαρμογής.
Εάν θα θέλατε να γράψετε μια κριτική :link θα το εκτιμούσαμε ιδιαίτερα!', 'writing_a_review' => 'συγγραφή κριτικής', @@ -3339,9 +3342,9 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'freq_three_years' => 'Τρία Χρόνια', 'military_time_help' => '24ωρη εμφάνιση Ώρας', 'click_here_capital' => 'Πατήστε εδώ', - 'marked_invoice_as_paid' => 'Επιτυχής ορισμός τιμολογίου ως απεσταλμένο', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Επιτυχής ορισμός τιμολογίων ως απεσταλμένα', - 'marked_invoices_as_paid' => 'Επιτυχής ορισμός τιμολογίων ως απεσταλμένα', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Το σύστημα απέτυχε να στείλει με email το τιμολόγιο :invoice', 'custom_value3' => 'Προσαρμοσμένη Τιμή 3', 'custom_value4' => 'Προσαρμοσμένη Τιμή 4', @@ -4952,7 +4955,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Πληρωμή χωρίς τιμολόγιο για ποσό : amount για πελάτη :client', - 'click_to_variables' => 'Κάντε κλικ εδώ για να δείτε όλες τις μεταβλητές.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Αποστολή προς', 'stripe_direct_debit_details' => 'Μεταφέρετε στον παραπάνω τραπεζικό λογαριασμό.', 'branch_name' => 'Ονομασία υποκαταστήματος', @@ -5098,7 +5101,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5106,7 +5109,7 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5114,9 +5117,50 @@ email που είναι συνδεδεμένη με το λογαριασμό σ 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/en/texts.php b/lang/en/texts.php index ba7b3f4085fb..a96969812c96 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -3342,9 +3342,9 @@ $LANG = array( 'freq_three_years' => 'Three Years', 'military_time_help' => '24 Hour Display', 'click_here_capital' => 'Click here', - 'marked_invoice_as_paid' => 'Successfully marked invoice as sent', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Successfully marked invoices as sent', - 'marked_invoices_as_paid' => 'Successfully marked invoices as sent', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'System failed to email invoice :invoice', 'custom_value3' => 'Custom Value 3', 'custom_value4' => 'Custom Value 4', @@ -5157,6 +5157,8 @@ $LANG = array( 'unlinked_transactions' => 'Successfully unlinked :count transactions', 'unlinked_transaction' => 'Successfully unlinked transaction', 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', + ); return $LANG; diff --git a/lang/es/texts.php b/lang/es/texts.php index 49f532ee21bc..f6d58f5413bc 100644 --- a/lang/es/texts.php +++ b/lang/es/texts.php @@ -753,7 +753,7 @@ $LANG = array( 'activity_7' => ':contact vió la factura :invoice del cliente :client', 'activity_8' => ':user archivó la factura :invoice', 'activity_9' => ':user eliminó la factura :invoice', - 'activity_10' => ':user entered payment :payment for :payment_amount on invoice :invoice for :client', + 'activity_10' => ':user ingresó el pago :payment para :payment _cantidad en la factura :invoice para :client', 'activity_11' => ':user actualizó el pago :payment', 'activity_12' => ':user archivó el pago :payment', 'activity_13' => ':user eliminó el pago :payment', @@ -1998,7 +1998,7 @@ $LANG = array( 'current_quarter' => 'Trimerstre Actual', 'last_quarter' => 'Último Trimestre', 'last_year' => 'Año Anterior', - 'all_time' => 'All Time', + 'all_time' => 'Todo el tiempo', 'custom_range' => 'Rango Personalizado', 'url' => 'URL', 'debug' => 'Depurar', @@ -2258,7 +2258,7 @@ $LANG = array( 'restore_recurring_expense' => 'Restaurar Gasto Recurrente', 'restored_recurring_expense' => 'Gasto recurrente restaurado con éxito', 'delete_recurring_expense' => 'Eliminar Gasto Recurrente', - 'deleted_recurring_expense' => 'Successfully deleted recurring expense', + 'deleted_recurring_expense' => 'Gasto recurrente eliminado con éxito', 'view_recurring_expense' => 'Ver Gasto Recurrente', 'taxes_and_fees' => 'Impuestos y Tarifas', 'import_failed' => 'Importación fallida', @@ -2402,6 +2402,9 @@ $LANG = array( 'currency_cuban_peso' => 'Peso Cubano', 'currency_bz_dollar' => 'Dólar BZ', + 'currency_libyan_dinar' => 'dinar libio', + 'currency_silver_troy_ounce' => 'Onza troy de plata', + 'currency_gold_troy_ounce' => 'Onza troy de oro', 'review_app_help' => 'Esperamos que estés disfrutando de usar la aplicación.
Si consideras :link lo apreciaremos mucho!', 'writing_a_review' => 'escribiendo una reseña', @@ -2513,8 +2516,8 @@ $LANG = array( 'partial_due_date' => 'Fecha de Vencimiento Parcial', 'task_fields' => 'Campos de la Tarea', 'product_fields_help' => 'Arrastra y suelta los campos para cambiar su orden', - 'custom_value1' => 'Custom Value 1', - 'custom_value2' => 'Custom Value 2', + 'custom_value1' => 'Valor personalizado 1', + 'custom_value2' => 'Valor personalizado 2', 'enable_two_factor' => 'Autenticación de Dos Factores', 'enable_two_factor_help' => 'Usa tu teléfono para confirmar tu identidad al ingresar', 'two_factor_setup' => 'Configuración de Autenticación de Dos Factores', @@ -3337,9 +3340,9 @@ $LANG = array( 'freq_three_years' => 'Tres años', 'military_time_help' => 'Pantalla de 24 horas', 'click_here_capital' => 'haga clic aquí', - 'marked_invoice_as_paid' => 'Factura marcada correctamente como enviada', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Facturas marcadas correctamente como enviadas', - 'marked_invoices_as_paid' => 'Facturas marcadas correctamente como enviadas', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'El sistema no envió la factura por correo electrónico :invoice', 'custom_value3' => 'Valor personalizado 3', 'custom_value4' => 'Valor personalizado 4', @@ -3861,7 +3864,7 @@ $LANG = array( 'notification_credit_viewed' => 'El siguiente cliente :client vio el Crédito :credit para :amount.', 'reset_password_text' => 'Ingrese su correo electrónico para restablecer su contraseña.', 'password_reset' => 'Restablecimiento de contraseña', - 'account_login_text' => 'Welcome! Glad to see you.', + 'account_login_text' => '¡Bienvenido! Contento de verte.', 'request_cancellation' => 'Solicitar una cancelación', 'delete_payment_method' => 'Eliminar método de pago', 'about_to_delete_payment_method' => 'Está a punto de eliminar el método de pago.', @@ -3975,7 +3978,7 @@ $LANG = array( 'add_payment_method_first' => 'añadir método de pago', 'no_items_selected' => 'No hay elementos seleccionados.', 'payment_due' => 'Fecha de pago', - 'account_balance' => 'Account Balance', + 'account_balance' => 'Saldo de la cuenta', 'thanks' => 'Gracias', 'minimum_required_payment' => 'El pago mínimo requerido es :amount', 'under_payments_disabled' => 'La empresa no admite pagos inferiores.', @@ -4000,7 +4003,7 @@ $LANG = array( 'notification_invoice_reminder1_sent_subject' => 'El recordatorio 1 de la factura :invoice se envió a :client', 'notification_invoice_reminder2_sent_subject' => 'El recordatorio 2 de la factura :invoice se envió a :client', 'notification_invoice_reminder3_sent_subject' => 'El recordatorio 3 de la factura :invoice se envió a :client', - 'notification_invoice_custom_sent_subject' => 'Custom reminder for Invoice :invoice was sent to :client', + 'notification_invoice_custom_sent_subject' => 'Se envió un recordatorio personalizado para la factura :invoice a :client', 'notification_invoice_reminder_endless_sent_subject' => 'Se envió un recordatorio interminable de la factura :invoice a :client', 'assigned_user' => 'Usuario asignado', 'setup_steps_notice' => 'Para continuar con el siguiente paso, asegúrese de probar cada sección.', @@ -4378,7 +4381,7 @@ $LANG = array( 'imported_customers' => 'Comenzó con éxito la importación de clientes', 'login_success' => 'Acceso exitoso', 'login_failure' => 'Inicio de sesión fallido', - 'exported_data' => 'Once the file is ready you\'ll receive an email with a download link', + 'exported_data' => 'Una vez que el archivo esté listo, recibirá un correo electrónico con un enlace de descarga.', 'include_deleted_clients' => 'Incluir clientes eliminados', 'include_deleted_clients_help' => 'Cargar registros pertenecientes a clientes eliminados', 'step_1_sign_in' => 'Paso 1: Iniciar sesión', @@ -4467,7 +4470,7 @@ $LANG = array( 'activity_123' => ':user gasto recurrente eliminado :recurring_expense', 'activity_124' => ':user gasto recurrente restaurado :recurring_expense', 'fpx' => "FPX", - 'to_view_entity_set_password' => 'To view the :entity you need to set a password.', + 'to_view_entity_set_password' => 'Para ver el :entity necesita establecer una contraseña.', 'unsubscribe' => 'Darse de baja', 'unsubscribed' => 'dado de baja', 'unsubscribed_text' => 'Has sido eliminado de las notificaciones de este documento.', @@ -4565,7 +4568,7 @@ $LANG = array( 'purchase_order_number' => 'Número de orden de compra', 'purchase_order_number_short' => 'Orden de compra #', 'inventory_notification_subject' => 'Notificación de umbral de inventario para el producto: :product', - 'inventory_notification_body' => 'Threshold of :amount has been reached for product: :product', + 'inventory_notification_body' => 'Se alcanzó el umbral de :amount para el producto: :product', 'activity_130' => ':user orden de compra creada :purchase_order', 'activity_131' => ':user orden de compra actualizada :purchase_order', 'activity_132' => ':user orden de compra archivada :purchase_order', @@ -4597,7 +4600,7 @@ $LANG = array( 'vendor_document_upload' => 'Carga de documentos de proveedores', 'vendor_document_upload_help' => 'Permitir que los proveedores carguen documentos', 'are_you_enjoying_the_app' => '¿Estás disfrutando de la aplicación?', - 'yes_its_great' => 'Yes, it\'s great!', + 'yes_its_great' => '¡Sí, es genial!', 'not_so_much' => 'No tanto', 'would_you_rate_it' => '¡Me alegro de oirlo! ¿Te gustaría calificarlo?', 'would_you_tell_us_more' => '¡Lamento escucharlo! ¿Te gustaría contarnos más?', @@ -4906,7 +4909,7 @@ $LANG = array( 'all_clients' => 'Todos los clientes', 'show_aging_table' => 'Mostrar tabla de antigüedad', 'show_payments_table' => 'Mostrar tabla de pagos', - 'only_clients_with_invoices' => 'Only Clients with Invoices', + 'only_clients_with_invoices' => 'Solo Clientes con Facturas', 'email_statement' => 'Estado de cuenta por correo electrónico', 'once' => 'Una vez', 'schedules' => 'Horarios', @@ -4950,7 +4953,7 @@ $LANG = array( 'sync_from' => 'sincronizar desde', 'gateway_payment_text' => 'Facturas: :invoices para :amount para cliente :client', 'gateway_payment_text_no_invoice' => 'Pago sin factura por importe :amount para cliente :client', - 'click_to_variables' => 'Cliente aquí para ver todas las variables.', + 'click_to_variables' => 'Haga clic aquí para ver todas las variables.', 'ship_to' => 'Envie a', 'stripe_direct_debit_details' => 'Por favor transfiera a la cuenta bancaria designada arriba.', 'branch_name' => 'Nombre de la sucursal', @@ -4970,7 +4973,7 @@ $LANG = array( 'payment_type_Interac E Transfer' => 'Transferencia Interac E', 'xinvoice_payable' => 'Payable within :payeddue days net until :paydate', 'xinvoice_no_buyers_reference' => "No se da referencia del comprador", - 'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link', + 'xinvoice_online_payment' => 'La factura debe pagarse en línea a través del enlace provisto', 'pre_payment' => 'Prepago', 'number_of_payments' => 'numero de pagos', 'number_of_payments_helper' => 'El número de veces que se realizará este pago.', @@ -5044,77 +5047,118 @@ $LANG = array( 'date_picker_hint' => 'Utilice +days para establecer la fecha en el futuro', 'app_help_link' => 'Más información', 'here' => 'aquí', - 'industry_Restaurant & Catering' => 'Restaurant & Catering', - 'show_credits_table' => 'Show Credits Table', - 'manual_payment' => 'Payment Manual', - 'tax_summary_report' => 'Tax Summary Report', - 'tax_category' => 'Tax Category', - 'physical_goods' => 'Physical Goods', - 'digital_products' => 'Digital Products', - 'services' => 'Services', - 'shipping' => 'Shipping', - 'tax_exempt' => 'Tax Exempt', - 'late_fee_added_locked_invoice' => 'Late fee for invoice :invoice added on :date', - 'lang_Khmer' => 'Khmer', - 'routing_id' => 'Routing ID', - 'enable_e_invoice' => 'Enable E-Invoice', - 'e_invoice_type' => 'E-Invoice Type', - 'reduced_tax' => 'Reduced Tax', - 'override_tax' => 'Override Tax', - 'zero_rated' => 'Zero Rated', - 'reverse_tax' => 'Reverse Tax', - 'updated_tax_category' => 'Successfully updated the tax category', - 'updated_tax_categories' => 'Successfully updated the tax categories', - 'set_tax_category' => 'Set Tax Category', - 'payment_manual' => 'Payment Manual', - 'expense_payment_type' => 'Expense Payment Type', - 'payment_type_Cash App' => 'Cash App', - 'rename' => 'Rename', - 'renamed_document' => 'Successfully renamed document', - 'e_invoice' => 'E-Invoice', - 'light_dark_mode' => 'Light/Dark Mode', - 'activities' => 'Activities', - 'recent_transactions' => "Here are your company's most recent transactions:", - 'country_Palestine' => "Palestine", - 'country_Taiwan' => 'Taiwan', - 'duties' => 'Duties', - 'order_number' => 'Order Number', - 'order_id' => 'Order', - 'total_invoices_outstanding' => 'Total Invoices Outstanding', - 'recent_activity' => 'Recent Activity', - 'enable_auto_bill' => 'Enable auto billing', - 'email_count_invoices' => 'Email :count invoices', - 'invoice_task_item_description' => 'Invoice Task Item Description', - 'invoice_task_item_description_help' => 'Add the item description to the invoice line items', - 'next_send_time' => 'Next Send Time', - 'uploaded_certificate' => 'Successfully uploaded certificate', - 'certificate_set' => 'Certificate set', - 'certificate_not_set' => 'Certificate not set', - 'passphrase_set' => 'Passphrase set', - 'passphrase_not_set' => 'Passphrase not set', - 'upload_certificate' => 'Upload Certificate', - 'certificate_passphrase' => 'Certificate Passphrase', - 'valid_vat_number' => 'Valid VAT Number', - 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', - 'show_task_billable' => 'Show Task Billable', - 'credit_item' => 'Credit Item', - 'drop_file_here' => 'Drop file here', - 'files' => 'Files', - 'camera' => 'Camera', - 'gallery' => 'Gallery', - 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', - 'lang_Hungarian' => 'Hungarian', - 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', - 'item_tax3' => 'Item Tax3', - 'item_tax_rate1' => 'Item Tax Rate 1', - 'item_tax_rate2' => 'Item Tax Rate 2', - 'item_tax_rate3' => 'Item Tax Rate 3', - 'buy_price' => 'Buy Price', -); + 'industry_Restaurant & Catering' => 'Restaurante y Catering', + 'show_credits_table' => 'Mostrar tabla de créditos', + 'manual_payment' => 'Manual de pago', + 'tax_summary_report' => 'Informe resumido de impuestos', + 'tax_category' => 'Categoría de impuestos', + 'physical_goods' => 'Bienes físicos', + 'digital_products' => 'Productos digitales', + 'services' => 'Servicios', + 'shipping' => 'Envío', + 'tax_exempt' => 'Exento de Impuestos', + 'late_fee_added_locked_invoice' => 'Cargo por pago atrasado de la factura :invoice agregado en :date', + 'lang_Khmer' => 'jemer', + 'routing_id' => 'Id. de enrutamiento', + 'enable_e_invoice' => 'Habilitar factura electrónica', + 'e_invoice_type' => 'Tipo de factura electrónica', + 'reduced_tax' => 'Impuesto reducido', + 'override_tax' => 'Anular impuestos', + 'zero_rated' => 'Clasificación cero', + 'reverse_tax' => 'Impuesto Inverso', + 'updated_tax_category' => 'Se actualizó con éxito la categoría de impuestos', + 'updated_tax_categories' => 'Actualizadas con éxito las categorías de impuestos', + 'set_tax_category' => 'Establecer categoría de impuestos', + 'payment_manual' => 'Manual de pago', + 'expense_payment_type' => 'Tipo de pago de gastos', + 'payment_type_Cash App' => 'Aplicación de efectivo', + 'rename' => 'Rebautizar', + 'renamed_document' => 'Documento renombrado con éxito', + 'e_invoice' => 'Factura electrónica', + 'light_dark_mode' => 'Modo claro/oscuro', + 'activities' => 'Actividades', + 'recent_transactions' => "Estas son las transacciones más recientes de su empresa:", + 'country_Palestine' => "Palestina", + 'country_Taiwan' => 'Taiwán', + 'duties' => 'Deberes', + 'order_number' => 'Número de orden', + 'order_id' => 'Orden', + 'total_invoices_outstanding' => 'Total de facturas pendientes', + 'recent_activity' => 'Actividad reciente', + 'enable_auto_bill' => 'Habilitar la facturación automática', + 'email_count_invoices' => 'Correo electrónico :count facturas', + 'invoice_task_item_description' => 'Descripción del elemento de la tarea de la factura', + 'invoice_task_item_description_help' => 'Agregar la descripción del artículo a las líneas de la factura', + 'next_send_time' => 'Próxima hora de envío', + 'uploaded_certificate' => 'Certificado subido correctamente', + 'certificate_set' => 'conjunto de certificados', + 'certificate_not_set' => 'Certificado no establecido', + 'passphrase_set' => 'Conjunto de frase de contraseña', + 'passphrase_not_set' => 'Frase de contraseña no establecida', + 'upload_certificate' => 'Subir certificado', + 'certificate_passphrase' => 'Frase de contraseña del certificado', + 'valid_vat_number' => 'Número de IVA válido', + 'react_notification_link' => 'Reaccionar enlaces de notificación', + 'react_notification_link_help' => 'Los correos electrónicos de administración contendrán enlaces a la aplicación de reacción', + 'show_task_billable' => 'Mostrar tarea facturable', + 'credit_item' => 'Artículo de crédito', + 'drop_file_here' => 'Suelta el archivo aquí', + 'files' => 'archivos', + 'camera' => 'Cámara', + 'gallery' => 'Galería', + 'project_location' => 'Localización del proyecto', + 'add_gateway_help_message' => 'Agregue una pasarela de pago (es decir, Stripe, WePay o PayPal) para aceptar pagos en línea', + 'lang_Hungarian' => 'húngaro', + 'use_mobile_to_manage_plan' => 'Use la configuración de suscripción de su teléfono para administrar su plan', + 'item_tax3' => 'Artículo Impuesto3', + 'item_tax_rate1' => 'Artículo Tasa de impuesto 1', + 'item_tax_rate2' => 'Artículo Tasa de impuesto 2', + 'item_tax_rate3' => 'Artículo Tasa de impuestos 3', + 'buy_price' => 'Precio de compra', + 'country_Macedonia' => 'macedonia', + 'admin_initiated_payments' => 'Pagos iniciados por el administrador', + 'admin_initiated_payments_help' => 'Soporte para ingresar un pago en el portal de administración sin factura', + 'paid_date' => 'Fecha de pago', + 'downloaded_entities' => 'Se enviará un correo electrónico con los PDF', + 'lang_French - Swiss' => 'Francés - Suizo', + 'currency_swazi_lilangeni' => 'Lilangeni suazi', + 'income' => 'Ingreso', + 'amount_received_help' => 'Ingrese un valor aquí si el monto total recibido fue MÁS que el monto de la factura, o al registrar un pago sin facturas. De lo contrario, este campo debe dejarse en blanco.', + 'vendor_phone' => 'Teléfono del proveedor', + 'mercado_pago' => 'mercado pago', + 'mybank' => 'Mi banco', + 'paypal_paylater' => 'Paga en 4', + 'paid_date' => 'Fecha de pago', + 'district' => 'Distrito', + 'region' => 'Región', + 'county' => 'Condado', + 'tax_details' => 'Detalles de impuestos', + 'activity_10_online' => ':contact ingresó el pago :payment para la factura :invoice para :client', + 'activity_10_manual' => ':user ingresó el pago :payment para la factura :invoice para :client', + 'default_payment_type' => 'Tipo de pago predeterminado', + 'number_precision' => 'Precisión numérica', + 'number_precision_help' => 'Controla el número de decimales admitidos en la interfaz', + 'is_tax_exempt' => 'Exento de Impuestos', + 'drop_files_here' => 'Suelte archivos aquí', + 'upload_files' => 'Subir archivos', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/es_ES/texts.php b/lang/es_ES/texts.php index 8f447156d426..1b0122dcff25 100644 --- a/lang/es_ES/texts.php +++ b/lang/es_ES/texts.php @@ -2394,6 +2394,9 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'currency_cuban_peso' => 'Peso Cubano', 'currency_bz_dollar' => 'Dólar BZ', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Esperamos que estés disfrutando con la app.
Si consideras :link ¡te lo agraderemos enormemente!', 'writing_a_review' => 'escribir una reseña', @@ -3329,9 +3332,9 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'freq_three_years' => 'Tres Años', 'military_time_help' => 'Formato de 24 Horas', 'click_here_capital' => 'Pulsa aquí', - 'marked_invoice_as_paid' => 'Factura marcada como enviada correctamente', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Facturas marcadas como enviadas correctamente', - 'marked_invoices_as_paid' => 'Facturas marcadas como enviadas correctamente', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'El sistema falló al enviar la factura :invoice', 'custom_value3' => 'Valor Personalizado 3', 'custom_value4' => 'Valor Personalizado 4', @@ -4942,7 +4945,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'sync_from' => 'sincronizar desde', 'gateway_payment_text' => 'Factura: :invoices por importe de :amount de :client', 'gateway_payment_text_no_invoice' => 'Pago sin factura por importe :amount del cliente :client', - 'click_to_variables' => 'Aquí para ver todas las variables del cliente', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Enviar a', 'stripe_direct_debit_details' => 'Por favor transfiera a la cuenta bancaria designada arriba.', 'branch_name' => 'Nombre de la sucursal', @@ -5088,7 +5091,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'certificate_passphrase' => 'Frase de contraseña del certificado', 'valid_vat_number' => 'Número de IVA válido', 'react_notification_link' => 'Links de notificación React', - 'react_notification_link_help' => 'Los correos electrónicos de administración contendrán enlaces a la aplicación de reacción', + 'react_notification_link_help' => 'Los correos electrónicos de administración contendrán enlaces a la aplicación de reacción', 'show_task_billable' => 'Mostrar tarea facturable', 'credit_item' => 'Artículo de crédito', 'drop_file_here' => 'Suelta el archivo aquí', @@ -5096,7 +5099,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'camera' => 'Cámara', 'gallery' => 'Galería', 'project_location' => 'Localización del proyecto', - 'add_gateway_help_message' => 'Agregue una pasarela de pago (ej., Stripe, WePay o PayPal) para aceptar pagos en línea', + 'add_gateway_help_message' => 'Agregue una pasarela de pago (ej., Stripe, WePay o PayPal) para aceptar pagos en línea', 'lang_Hungarian' => 'Húngaro', 'use_mobile_to_manage_plan' => 'Use la configuración de suscripción de su teléfono para administrar su plan', 'item_tax3' => 'Item Tax3', @@ -5104,9 +5107,50 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/et/texts.php b/lang/et/texts.php index 14f58f35ef61..b59dc4429acd 100644 --- a/lang/et/texts.php +++ b/lang/et/texts.php @@ -2401,6 +2401,9 @@ $LANG = array( 'currency_cuban_peso' => 'Kuuba peeso', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Loodame, et teile meeldib rakenduse kasutamine.
Kui kaaluksite :link, oleksime selle eest väga tänulikud!', 'writing_a_review' => 'arvustuse kirjutamine', @@ -3336,9 +3339,9 @@ $LANG = array( 'freq_three_years' => 'Kolm aastat', 'military_time_help' => '24 Hour Display', 'click_here_capital' => 'Kliki siia', - 'marked_invoice_as_paid' => 'Arve märgiti saadetuks', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Arved märgiti saadetuks', - 'marked_invoices_as_paid' => 'Arved märgiti saadetuks', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Süsteem ei suutnud arvet :invoice meiliga saata', 'custom_value3' => 'Kohandatud väärtus 3', 'custom_value4' => 'Kohandatud väärtus 4', @@ -4949,7 +4952,7 @@ $LANG = array( 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5095,7 +5098,7 @@ $LANG = array( 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5103,7 +5106,7 @@ $LANG = array( 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5111,9 +5114,50 @@ $LANG = array( 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/fi/texts.php b/lang/fi/texts.php index de0ad9702adf..dc19890a0e1a 100644 --- a/lang/fi/texts.php +++ b/lang/fi/texts.php @@ -2404,6 +2404,9 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'We hope you\'re enjoying using app.
If you\'d consider :link we\'d greatly appreciate it!', 'writing_a_review' => 'writing review', @@ -3339,9 +3342,9 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta 'freq_three_years' => '3 vuotta', 'military_time_help' => 'Näytä 24 tunnin aikamuoto', 'click_here_capital' => 'Klikkaa tästä', - 'marked_invoice_as_paid' => 'Lasku merkittiin lähetetyksi onnistuneesti', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Laskut merkittiin lähetetyksi onnistuneesti', - 'marked_invoices_as_paid' => 'Laskut merkittiin lähetetyksi onnistuneesti', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Järjestelmä epäonnistui lähettämään sähköpostilaskun :invoice', 'custom_value3' => 'Muokattu arvo 3', 'custom_value4' => 'Muokattu arvo 4', @@ -4952,7 +4955,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5098,7 +5101,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5106,7 +5109,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5114,9 +5117,50 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/fr/texts.php b/lang/fr/texts.php index 8fcd5291626d..7b081eb0d2ff 100644 --- a/lang/fr/texts.php +++ b/lang/fr/texts.php @@ -499,7 +499,7 @@ $LANG = array( 'payment_type_bitcoin' => 'Bitcoin', 'payment_type_gocardless' => 'GoCardless', 'knowledge_base' => 'Base de connaissances', - 'partial' => 'Partiel/dépôt', + 'partial' => 'Acompte', 'partial_remaining' => ':partial de :balance', 'more_fields' => 'Plus de champs', 'less_fields' => 'Moins de champs', @@ -748,7 +748,7 @@ $LANG = array( 'activity_7' => ':contact a vu la facture :invoice pour :client', 'activity_8' => ':user a archivé la facture :invoice', 'activity_9' => ':user a supprimé la facture :invoice', - 'activity_10' => ':user entered payment :payment for :payment_amount on invoice :invoice for :client', + 'activity_10' => ':user a saisi le paiement :payment pour :payment _montant sur la facture :invoice pour :client', 'activity_11' => ':user a mis à jour le moyen de paiement :payment', 'activity_12' => ':user a archivé le moyen de paiement :payment', 'activity_13' => ':user a supprimé le moyen de paiement :payment', @@ -1083,7 +1083,7 @@ $LANG = array( 'user_create_all' => 'Créer des clients, des factures, etc.', 'user_view_all' => 'Voir tous les clients, les factures, etc.', 'user_edit_all' => 'Modifier tous les clients, les factures, etc.', - 'partial_due' => 'Solde partiel', + 'partial_due' => 'Acompte à verser', 'restore_vendor' => 'Restaurer le fournisseur', 'restored_vendor' => 'Fournisseur restauré avec succès', 'restored_expense' => 'Dépense restaurée avec succès', @@ -1327,7 +1327,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'finish_setup' => 'Terminer la configuration', 'created_wepay_confirmation_required' => 'Veuillez vérifier votre courriel et confirmer votre adresse courriel avec WePay.', 'switch_to_wepay' => 'Changer pour WePay', - 'switch' => 'Changer', + 'switch' => 'Commutateur', 'restore_account_gateway' => 'Rétablir la passerelle de paiement', 'restored_account_gateway' => 'La passerelle de paiement a été rétablie', 'united_states' => 'États-Unis', @@ -1994,7 +1994,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'current_quarter' => 'Trimestre courant', 'last_quarter' => 'Dernier trimestre', 'last_year' => 'Dernière année', - 'all_time' => 'All Time', + 'all_time' => 'Tout le temps', 'custom_range' => 'Intervalle personnalisé', 'url' => 'URL', 'debug' => 'Débogage', @@ -2210,7 +2210,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'expense_link' => 'Dépenses', 'resume_task' => 'Relancer la tâche', 'resumed_task' => 'Tâche relancée avec succès', - 'quote_design' => 'Modèle des offres', + 'quote_design' => 'Modèle des devis', 'default_design' => 'Conception standard', 'custom_design1' => 'Modèle personnalisé 1', 'custom_design2' => 'Modèle personnalisé 2', @@ -2254,7 +2254,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'restore_recurring_expense' => 'Restaurer la dépense récurrente', 'restored_recurring_expense' => 'Dépense récurrente restaurée avec succès', 'delete_recurring_expense' => 'Supprimer la dépense récurrente', - 'deleted_recurring_expense' => 'Successfully deleted recurring expense', + 'deleted_recurring_expense' => 'La dépense récurrente a été supprimée', 'view_recurring_expense' => 'Voir la dépense récurrente', 'taxes_and_fees' => 'Taxes et frais', 'import_failed' => 'L\'importation a échoué', @@ -2398,6 +2398,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'currency_cuban_peso' => 'Peso colombien', 'currency_bz_dollar' => 'Dollar BZ', + 'currency_libyan_dinar' => 'Dinar libyen', + 'currency_silver_troy_ounce' => 'Once troy d'argent', + 'currency_gold_troy_ounce' => 'Once troy d'or', 'review_app_help' => 'Nous espérons que votre utilisation de cette application vous est agréable.
Un commentaire de votre part serait grandement apprécié!', 'writing_a_review' => 'écrire un commentaire', @@ -2509,8 +2512,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'partial_due_date' => 'Paiement partiel', 'task_fields' => 'Champs de tâche', 'product_fields_help' => 'Glissez et déposez les champs pour changer leur ordre', - 'custom_value1' => 'Custom Value 1', - 'custom_value2' => 'Custom Value 2', + 'custom_value1' => 'Valeur personnalisée 1', + 'custom_value2' => 'Valeur personnalisée 2', 'enable_two_factor' => 'Authentification à 2 facteurs', 'enable_two_factor_help' => 'Utilisez votre téléphone pour confirmer votre identité lorsque vous vous connectez', 'two_factor_setup' => 'Configuration à deux facteurs', @@ -2530,7 +2533,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'converted_amount' => 'Montant converti', 'default' => 'Par défaut', 'shipping_address' => 'Adresse de Livraison', - 'bllling_address' => 'Adresse de Facturation', + 'bllling_address' => 'Adresse de facturation', 'billing_address1' => 'Rue', 'billing_address2' => 'Appt/Bâtiment', 'billing_city' => 'Ville', @@ -2732,7 +2735,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'upgrade_to_upload_images' => 'Mettre à niveau vers le plan entreprise pour envoyer des images', 'delete_image' => 'Supprimer l\'image', 'delete_image_help' => 'Attention : supprimer l\'image la retirera de toutes les propositions.', - 'amount_variable_help' => 'Note: le champ $amount de la facture utilisera le champ partiel/dépôt. Il utilisera le solde de la facture, si spécifié autrement.', + 'amount_variable_help' => 'Note: le champ $amount de la facture utilisera le champ d\'acompte. Il utilisera le solde de la facture, si spécifié autrement.', 'taxes_are_included_help' => 'Note : Les taxes incluses ont été activées.', 'taxes_are_not_included_help' => 'Note : Les taxes incluses ne sont pas activées.', 'change_requires_purge' => 'Modifier ce paramètre requière de :link les données du compte.', @@ -2858,7 +2861,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'ok' => 'Ok', 'email_is_invalid' => 'L\'adresse de courriel n\'est pas correcte', 'items' => 'Articles ', - 'partial_deposit' => 'Depot Partial ', + 'partial_deposit' => 'Acompte', 'add_item' => 'Ajouter Article ', 'total_amount' => 'Montant Total ', 'pdf' => 'Fichier PDF', @@ -3136,7 +3139,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'credit_field' => 'Champ de Crédit', 'payment_field' => 'Champ de Paiement', 'group_field' => 'Champ de Groupe', - 'number_counter' => 'Compteur de nombre', + 'number_counter' => 'Avancement du compteur', 'number_pattern' => 'Modèle de numéro', 'custom_javascript' => 'JavaScript personnalisé', 'portal_mode' => 'Mode portail', @@ -3178,7 +3181,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'filtered_by_group' => 'Filtrer par groupe', 'filtered_by_invoice' => 'Filtré par Facture', 'filtered_by_client' => 'Filtré par Client', - 'filtered_by_vendor' => 'Filtré par Vendeur', + 'filtered_by_vendor' => 'Filtré par fournisseur', 'group_settings' => 'Paramètres de groupe', 'groups' => 'Groupes', 'new_group' => 'Nouveau Groupe', @@ -3333,9 +3336,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'freq_three_years' => 'Trois ans', 'military_time_help' => 'Affichage sur 24h', 'click_here_capital' => 'Cliquer ici', - 'marked_invoice_as_paid' => 'Facture marquée comme envoyée', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Les factures ont été marquées envoyées', - 'marked_invoices_as_paid' => 'Factures marquées comme envoyées', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'La facture :invoice n\'a pu être envoyée', 'custom_value3' => 'Valeur personnalisée 3', 'custom_value4' => 'Valeur personnalisée 4', @@ -3618,7 +3621,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'search_invoice' => 'Recherche de 1 facture', 'search_client' => 'Recherche de 1 client', 'search_product' => 'Recherche de 1 produit', - 'search_quote' => 'Recherche de 1 soumission', + 'search_quote' => 'Rechercher un devis', 'search_credit' => 'Recherche de 1 crédit', 'search_vendor' => 'Recherche de 1 fournisseurs', 'search_user' => 'Recherche de 1 utilisateur', @@ -3678,7 +3681,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'allow_over_payment' => 'Accepter Sur-paiement', 'allow_over_payment_help' => 'Accepter le paiement supplémentaire pour pourboire', 'allow_under_payment' => 'Accepter Sous-paiement', - 'allow_under_payment_help' => 'Supporter le paiement au minimum du montant partiel/dépôt', + 'allow_under_payment_help' => 'Supporter le paiement au minimum du montant de l\'acompte', 'test_mode' => 'Mode test', 'calculated_rate' => 'Taux Calculé', 'default_task_rate' => 'Taux par défaut de la tâche', @@ -3803,7 +3806,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'restored_clients' => 'Les :value clients ont été restaurés avec succès', 'restored_invoices' => 'Restauration réussie :value des factures', 'restored_payments' => 'Les :value paiements ont été restaurés avec succès', - 'restored_quotes' => 'Les :value soumissions ont été restaurées avec succès', + 'restored_quotes' => 'Les :value devis ont été restaurés avec succès', 'update_app' => 'Mettre à jour l\'App', 'started_import' => 'L\'importation a démarré avec succès', 'duplicate_column_mapping' => 'Dupliquer le mappage de colonnes', @@ -3857,7 +3860,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'notification_credit_viewed' => 'Le client suivant :client consulté Crédit :credit pour :amount.', 'reset_password_text' => 'Entrez votre e-mail pour réinitialiser votre mot de passe.', 'password_reset' => 'Réinitialiser le mot de passe', - 'account_login_text' => 'Welcome! Glad to see you.', + 'account_login_text' => 'Bienvenue ! Content de vous voir.', 'request_cancellation' => 'Demande de résiliation', 'delete_payment_method' => 'Supprimer la méthode de paiement', 'about_to_delete_payment_method' => 'Vous allez supprimer cette méthode de paiement', @@ -3971,7 +3974,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'add_payment_method_first' => 'ajouter un moyen de paiement', 'no_items_selected' => 'Aucun élément sélectionné.', 'payment_due' => 'Paiement dû', - 'account_balance' => 'Account Balance', + 'account_balance' => 'Solde du compte', 'thanks' => 'Merci', 'minimum_required_payment' => 'Le paiement minimum requis est :amount', 'under_payments_disabled' => 'La société ne prend pas en charge les sous-paiements.', @@ -4067,8 +4070,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'payment_message_extended' => 'Merci pour votre paiement de :amount pour :invoice', 'online_payments_minimum_note' => 'Remarque : Les paiements en ligne ne sont pris en charge que si le montant est supérieur à 1 $ ou l\'équivalent en devise.', 'payment_token_not_found' => 'Le jeton de paiement est introuvable. Veuillez essayer de nouveau. Si le problème persiste, essayez avec un autre mode de paiement', - 'vendor_address1' => 'Rue du vendeur', - 'vendor_address2' => 'Vendeur Appt/Suite', + 'vendor_address1' => 'Rue du fournisseur', + 'vendor_address2' => 'Appt/Bâtiment du fournisseur', 'partially_unapplied' => 'Partiellement non appliqué', 'select_a_gmail_user' => 'Veuillez sélectionner un utilisateur authentifié avec Gmail', 'list_long_press' => 'Appuyez longuement sur la liste', @@ -4123,7 +4126,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'disconnected_google' => 'Compte déconnecté avec succès', 'delivered' => 'Livré', 'spam' => 'Courrier indésirable', - 'view_docs' => 'Afficher les documents', + 'view_docs' => 'Afficher la documentation', 'enter_phone_to_enable_two_factor' => 'Veuillez fournir un numéro de téléphone mobile pour activer l\'authentification à deux facteurs', 'send_sms' => 'Envoyer un SMS', 'sms_code' => 'Code SMS', @@ -4576,11 +4579,11 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'notification_purchase_order_viewed_subject' => 'Bon de commande :invoice a été consultée par :client', 'notification_purchase_order_viewed' => 'Le fournisseur suivant :client a consulté le bon de commande :invoice pour :amount.', 'purchase_order_date' => 'Date du bon de commande', - 'purchase_orders' => 'Acheter en ligne', + 'purchase_orders' => 'Bons de commande', 'purchase_order_number_placeholder' => 'Bon de commande n° :purchase_order', 'accepted' => 'Accepté', 'activity_137' => ':contact commande d\'achat acceptée :purchase_order', - 'vendor_information' => 'Informations sur le vendeur', + 'vendor_information' => 'Informations sur le fournisseur', 'notification_purchase_order_accepted_subject' => 'Bon de commande :purchase_order a été accepté par :vendor', 'notification_purchase_order_accepted' => 'Le fournisseur suivant :vendor a accepté le bon de commande :purchase_order pour :amount.', 'amount_received' => 'Montant reçu', @@ -4590,8 +4593,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'added_purchase_order_to_inventory' => 'Bon de commande ajouté avec succès à l\'inventaire', 'added_purchase_orders_to_inventory' => 'Bons de commande ajoutés avec succès à l\'inventaire', 'client_document_upload' => 'Envoi de documents par les clients', - 'vendor_document_upload' => 'Envoi de documents par les vendeurs', - 'vendor_document_upload_help' => 'Activer l\'envoi de documents par les vendeurs', + 'vendor_document_upload' => 'Envoi de documents par les fournisseurs', + 'vendor_document_upload_help' => 'Activer l\'envoi de documents par les fournisseurs', 'are_you_enjoying_the_app' => 'Appréciez-vous l\'application ?', 'yes_its_great' => 'Oui, c\'est parfait !', 'not_so_much' => 'Pas tellement', @@ -4603,7 +4606,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'last_sent_template' => 'Dernier modèle envoyé', 'enable_flexible_search' => 'Active la recherche flexible', 'enable_flexible_search_help' => 'Correspondance de caractères non contigus, par exemple, "ct" va trouver "cat"', - 'vendor_details' => 'Détails du vendeur', + 'vendor_details' => 'Détails du fournisseur', 'purchase_order_details' => 'Détails du bon de commande', 'qr_iban' => 'QRIBAN', 'besr_id' => 'ID BVRB', @@ -4735,7 +4738,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'category_type' => 'Type de catégorie', 'bank_transaction' => 'Transaction', 'bulk_print' => 'Imprimer PDF', - 'vendor_postal_code' => 'Code postal du vendeur', + 'vendor_postal_code' => 'Code postal du fournisseur', 'preview_location' => 'Emplacement de l\'aperçu', 'bottom' => 'En bas', 'side' => 'Sur le coté', @@ -4852,11 +4855,11 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'backup_restore' => 'Sauvegarde | Restaurer', 'export_company' => 'Créer une sauvegarde d\'entreprise', 'backup' => 'Sauvegarde', - 'notification_purchase_order_created_body' => 'Le Purchase_Order suivant :purchase_order a été créé pour le fournisseur :vendor pour :amount.', + 'notification_purchase_order_created_body' => 'Le bon de commande suivant :purchase_order a été créé pour le fournisseur :vendor pour :amount.', 'notification_purchase_order_created_subject' => 'Bon de commande :purchase_order a été créé pour :vendor', 'notification_purchase_order_sent_subject' => 'Bon de commande :purchase_order a été envoyé à :vendor', 'notification_purchase_order_sent' => 'Le fournisseur suivant :vendor a reçu un bon de commande par e-mail :purchase_order pour :amount.', - 'subscription_blocked' => 'Ce produit est un article restreint, veuillez contacter le vendeur pour plus d\'informations.', + 'subscription_blocked' => 'Ce produit est un article restreint, veuillez contacter le fournisseur pour plus d\'informations.', 'subscription_blocked_title' => 'Produit non disponible.', 'purchase_order_created' => 'Bon de commande créé', 'purchase_order_sent' => 'Bon de commande envoyé', @@ -4892,7 +4895,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'invalid_design' => 'Le design est invalide, la section :value est manquante', 'setup_wizard_logo' => 'Souhaitez-vous télécharger votre logo ?', 'installed_version' => 'Version installée', - 'notify_vendor_when_paid' => 'Avertir le vendeur une fois payé', + 'notify_vendor_when_paid' => 'Avertir le fournisseur une fois payé', 'notify_vendor_when_paid_help' => 'Envoyer un e-mail au fournisseur lorsque la dépense est marquée comme payée', 'update_payment' => 'Mettre à jour le paiement', 'markup' => 'Balisage', @@ -4902,7 +4905,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'all_clients' => 'Tous les clients', 'show_aging_table' => 'Afficher la table d\'âge', 'show_payments_table' => 'Afficher le tableau des paiements', - 'only_clients_with_invoices' => 'Only Clients with Invoices', + 'only_clients_with_invoices' => 'Seuls les clients avec factures', 'email_statement' => 'Relevé par e-mail', 'once' => 'Une fois', 'schedules' => 'Planifications', @@ -4946,7 +4949,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'sync_from' => 'Synchroniser depuis', 'gateway_payment_text' => 'Factures : :invoices de :amount pour le client :client', 'gateway_payment_text_no_invoice' => 'Paiement sans facture pour montant :amount pour client :client', - 'click_to_variables' => 'Client ici pour voir toutes les variables.', + 'click_to_variables' => 'Cliquez ici pour voir toutes les variables.', 'ship_to' => 'Envoyez à', 'stripe_direct_debit_details' => 'Veuillez transférer le montant sur le compte ci-dessus.', 'branch_name' => 'Nom de la filiale', @@ -5013,7 +5016,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'email_record' => 'Enregistrement par e-mail', 'invoice_product_columns' => 'Colonnes de produit de facture', 'quote_product_columns' => 'Colonnes de produits de devis', - 'vendors' => 'Vendeurs', + 'vendors' => 'Fournisseurs', 'product_sales' => 'Ventes de produits', 'user_sales_report_header' => 'Rapport sur les ventes des utilisateurs pour le(s) client(s) :client de :start_date à :end_date', 'client_balance_report' => 'Rapport sur le solde du client', @@ -5064,53 +5067,94 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'set_tax_category' => 'Définir la catégorie de taxe', 'payment_manual' => 'Paiement manuel', 'expense_payment_type' => 'Type de paiement de dépense', - 'payment_type_Cash App' => 'Cash App', - 'rename' => 'Rename', - 'renamed_document' => 'Successfully renamed document', - 'e_invoice' => 'E-Invoice', - 'light_dark_mode' => 'Light/Dark Mode', - 'activities' => 'Activities', - 'recent_transactions' => "Here are your company's most recent transactions:", + 'payment_type_Cash App' => 'Application de trésorerie', + 'rename' => 'Renommer', + 'renamed_document' => 'Document renommé avec succès', + 'e_invoice' => 'Facture électronique', + 'light_dark_mode' => 'Thème clair/sombre', + 'activities' => 'Activités', + 'recent_transactions' => "Voici les transactions les plus récentes de votre entreprise :", 'country_Palestine' => "Palestine", - 'country_Taiwan' => 'Taiwan', - 'duties' => 'Duties', - 'order_number' => 'Order Number', - 'order_id' => 'Order', - 'total_invoices_outstanding' => 'Total Invoices Outstanding', - 'recent_activity' => 'Recent Activity', - 'enable_auto_bill' => 'Enable auto billing', - 'email_count_invoices' => 'Email :count invoices', - 'invoice_task_item_description' => 'Invoice Task Item Description', - 'invoice_task_item_description_help' => 'Add the item description to the invoice line items', - 'next_send_time' => 'Next Send Time', - 'uploaded_certificate' => 'Successfully uploaded certificate', - 'certificate_set' => 'Certificate set', - 'certificate_not_set' => 'Certificate not set', - 'passphrase_set' => 'Passphrase set', - 'passphrase_not_set' => 'Passphrase not set', - 'upload_certificate' => 'Upload Certificate', - 'certificate_passphrase' => 'Certificate Passphrase', - 'valid_vat_number' => 'Valid VAT Number', - 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', - 'show_task_billable' => 'Show Task Billable', - 'credit_item' => 'Credit Item', - 'drop_file_here' => 'Drop file here', - 'files' => 'Files', - 'camera' => 'Camera', - 'gallery' => 'Gallery', - 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', - 'lang_Hungarian' => 'Hungarian', - 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', - 'item_tax3' => 'Item Tax3', - 'item_tax_rate1' => 'Item Tax Rate 1', - 'item_tax_rate2' => 'Item Tax Rate 2', - 'item_tax_rate3' => 'Item Tax Rate 3', - 'buy_price' => 'Buy Price', -); + 'country_Taiwan' => 'Taïwan', + 'duties' => 'Devoirs', + 'order_number' => 'Numéro de commande', + 'order_id' => 'Commande', + 'total_invoices_outstanding' => 'Total des factures impayées', + 'recent_activity' => 'Activité récente', + 'enable_auto_bill' => 'Activer l\'autofacturation', + 'email_count_invoices' => 'Envoi de :count factures', + 'invoice_task_item_description' => 'Description de l'élément de tâche de la facture', + 'invoice_task_item_description_help' => 'Ajouter la description de l'article aux éléments de ligne de la facture', + 'next_send_time' => 'Prochaine heure d\'envoi', + 'uploaded_certificate' => 'Le certificat a été téléversé', + 'certificate_set' => 'Le certificat est défini', + 'certificate_not_set' => 'Le certificat n\'est pas défini', + 'passphrase_set' => 'La phrase de passe est définie', + 'passphrase_not_set' => 'La phrase de passe n\'est pas définie', + 'upload_certificate' => 'Téléverser le certificat', + 'certificate_passphrase' => 'Phrase de passe du certificat', + 'valid_vat_number' => 'Numéro de TVA valide', + 'react_notification_link' => 'Liens de notification de réaction', + 'react_notification_link_help' => 'Les courriels provenant de l\'administrateur contiennent des liens vers l\'application React', + 'show_task_billable' => 'Afficher la tâche facturable', + 'credit_item' => 'Article de crédit', + 'drop_file_here' => 'Déposez le fichier ici', + 'files' => 'Des dossiers', + 'camera' => 'Caméra', + 'gallery' => 'Galerie', + 'project_location' => 'Emplacement du projet', + 'add_gateway_help_message' => 'Ajoutez une passerelle de paiement (c.-à-d. Stripe, WePay ou PayPal) pour accepter les paiements en ligne', + 'lang_Hungarian' => 'hongrois', + 'use_mobile_to_manage_plan' => 'Utilisez les paramètres de votre abonnement téléphonique pour gérer votre forfait', + 'item_tax3' => 'Taxe sur les articles3', + 'item_tax_rate1' => 'Taux de taxe sur l'article 1', + 'item_tax_rate2' => 'Taux de taxe sur l'article 2', + 'item_tax_rate3' => 'Taux de taxe sur l'article 3', + 'buy_price' => 'Prix d'achat', + 'country_Macedonia' => 'Macédoine', + 'admin_initiated_payments' => 'Paiements initiés par l'administrateur', + 'admin_initiated_payments_help' => 'Prise en charge de la saisie d'un paiement dans le portail d'administration sans facture', + 'paid_date' => 'La date de paiement', + 'downloaded_entities' => 'Un email sera envoyé avec les PDF', + 'lang_French - Swiss' => 'Français - Suisse', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Revenu', + 'amount_received_help' => 'Entrez une valeur ici si le montant total reçu était SUPÉRIEUR au montant de la facture, ou lors de l'enregistrement d'un paiement sans facture. Sinon, ce champ doit rester vide.', + 'vendor_phone' => 'Téléphone du fournisseur', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'Ma banque', + 'paypal_paylater' => 'Payez en 4', + 'paid_date' => 'La date de paiement', + 'district' => 'District', + 'region' => 'Région', + 'county' => 'Comté', + 'tax_details' => 'Détails fiscaux', + 'activity_10_online' => ':contact a saisi le paiement :payment pour la facture :invoice pour :client', + 'activity_10_manual' => ':user a saisi le paiement :payment pour la facture :invoice pour :client', + 'default_payment_type' => 'Type de paiement par défaut', + 'number_precision' => 'Précision du nombre', + 'number_precision_help' => 'Contrôle le nombre de décimales prises en charge dans l'interface', + 'is_tax_exempt' => 'Exonéré d'impôt', + 'drop_files_here' => 'Déposez les fichiers ici', + 'upload_files' => 'Télécharger des fichiers', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Article 141 de la directive 2006/112/CE – opération triangulaire', + 'intracommunity_tax_info' => 'Livraison désignée à l\'article 262 ter du CGI – TVA due par le preneur', + 'reverse_tax_info' => 'Exonération des TVA article 283-2 du CGI – TVA due par le preneur', + 'currency_nicaraguan_cordoba' => 'Cordoue nicaraguayenne', + 'public' => 'Publique', + 'private' => 'Privé', + 'image' => 'Image', + 'other' => 'Autre', + 'linked_to' => 'Lié à', + 'file_saved_in_path' => 'Le fichier a été enregistré dans :path', + 'unlinked_transactions' => 'Transactions :count dissociées avec succès', + 'unlinked_transaction' => 'Transaction dissociée avec succès', + 'view_dashboard_permission' => 'Autoriser l'utilisateur à accéder au tableau de bord, les données sont limitées aux autorisations disponibles', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php index a349743843c7..2f62edaafd50 100644 --- a/lang/fr_CA/texts.php +++ b/lang/fr_CA/texts.php @@ -3334,9 +3334,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'freq_three_years' => 'Trois ans', 'military_time_help' => 'Affichage 24h', 'click_here_capital' => 'Cliquez ici', - 'marked_invoice_as_paid' => 'La facture a été marquée comme envoyée', + 'marked_invoice_as_paid' => 'La facture a été marquée comme payée', 'marked_invoices_as_sent' => 'Les factures ont été marquées comme envoyées', - 'marked_invoices_as_paid' => 'Les factures ont été marquées comme envoyées', + 'marked_invoices_as_paid' => 'Les factures ont été marquées comme payées', 'activity_57' => 'Le système n\'a pas pu envoyer le courriel de la facture :invoice', 'custom_value3' => 'Valeur personnalisée 3', 'custom_value4' => 'Valeur personnalisée 4', @@ -5093,7 +5093,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'certificate_passphrase' => 'Passphrase du certificat', 'valid_vat_number' => 'Numéro de taxe valide', 'react_notification_link' => 'Lien de notifications React', - 'react_notification_link_help' => 'Les courriels provenant de l\'administration contiennent des liens vers l\'application React', + 'react_notification_link_help' => 'Les courriels provenant de l\'administration contiennent des liens vers l\'application React', 'show_task_billable' => 'Afficher la facturation de tâche', 'credit_item' => 'Article de crédit', 'drop_file_here' => 'Déposer le fichier ici', @@ -5101,7 +5101,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'camera' => 'Caméra', 'gallery' => 'Galerie', 'project_location' => 'Emplacement du projet', - 'add_gateway_help_message' => 'Ajouter un passerelle de paiement (Stripe, WePay, ou PayPal) pour accepter les paiements en ligne', + 'add_gateway_help_message' => 'Ajouter un passerelle de paiement (Stripe, WePay, ou PayPal) pour accepter les paiements en ligne', 'lang_Hungarian' => 'Hongrois', 'use_mobile_to_manage_plan' => 'Utilisez les paramètres de votre abonnement cellulaire pour gérer votre plan', 'item_tax3' => 'Taxe 3 de l\'article', @@ -5117,7 +5117,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'lang_French - Swiss' => 'Français - Suisse', 'currency_swazi_lilangeni' => 'Lilangeni Eswatinien', 'income' => 'Revenu', - 'amount_received_help' => 'Saisissez une valeur si le montant total reçu été PLUS élevé que le montant de la facture, ou lors de l\'enregistrement d\'un paiement sans factures. Sinon, ce champ devrait rester vide.', + 'amount_received_help' => 'Saisissez une valeur si le montant total reçu été PLUS élevé que le montant de la facture, ou lors de l\'enregistrement d\'un paiement sans factures. Sinon, ce champ devrait rester vide.', 'vendor_phone' => 'Téléphone du fournisseur', 'mercado_pago' => 'Mercado Pago', 'mybank' => 'MyBank', @@ -5135,6 +5135,22 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'is_tax_exempt' => 'Exonéré de taxe', 'drop_files_here' => 'Déposez les fichiers ici', 'upload_files' => 'Téléverser les fichiers', + 'download_e_invoice' => 'Télécharger la facture électronique', + 'triangular_tax_info' => 'Transactions intra-communautaire triangulaire', + 'intracommunity_tax_info' => 'Livraison intra-communautaure sans taxe', + 'reverse_tax_info' => 'Veuillez noter que cette provision est sujette à une charge renversée', + 'currency_nicaraguan_cordoba' => 'Codoba nicaraguyen', + 'public' => 'Public', + 'private' => 'Privé', + 'image' => 'Image', + 'other' => 'Autre', + 'linked_to' => 'Lié à', + 'file_saved_in_path' => 'Ce fichier a été sauvegardé dans :path', + 'unlinked_transactions' => ' :count transactions ont été déliées', + 'unlinked_transaction' => 'La transactions a été déliée', + 'view_dashboard_permission' => 'Autoriser l\'accès de l\'utilisateur au tableau de bord. Les données sont limitées aux permissions disponibles.', + 'marked_sent_credits' => 'Les crédits envoyés ont été marqués', + ); return $LANG; diff --git a/lang/fr_CH/texts.php b/lang/fr_CH/texts.php index 08cdde2feaff..1fd99be47adc 100644 --- a/lang/fr_CH/texts.php +++ b/lang/fr_CH/texts.php @@ -84,7 +84,7 @@ $LANG = array( 'online_payments' => 'Paiements en ligne', 'notifications' => 'Notifications', 'import_export' => 'Importer / Exporter', - 'done' => 'Valider', + 'done' => 'Finalisé', 'save' => 'Enregistrer', 'create' => 'Créer', 'upload' => 'Téléverser', @@ -104,13 +104,13 @@ $LANG = array(
  • ":YEAR+1 - abonnement annuel" >> "2015 - abonnement annuel"
  • "Acompte pour le :QUARTER+1" >> "Acompte pour le Q2"
  • ', - 'recurring_quotes' => 'Soumissions récurrentes', + 'recurring_quotes' => 'Offres récurrentes', 'in_total_revenue' => 'de revenu total', 'billed_client' => 'client facturé', 'billed_clients' => 'clients facturés', 'active_client' => 'client actif', 'active_clients' => 'clients actifs', - 'invoices_past_due' => 'Factures en souffrance', + 'invoices_past_due' => 'Factures en retard', 'upcoming_invoices' => 'Factures à venir', 'average_invoice' => 'Facture moyenne', 'archive' => 'Archiver', @@ -304,43 +304,43 @@ $LANG = array( 'chart_builder' => 'Concepteur de graphiques', 'ninja_email_footer' => 'Créé par :site | Créer. Envoyer. Encaisser.', 'go_pro' => 'Devenez Pro', - 'quote' => 'Soumission', - 'quotes' => 'Soumissions', - 'quote_number' => 'N° de soumission', - 'quote_number_short' => 'Soumission n° ', - 'quote_date' => 'Date de soumission', - 'quote_total' => 'Total de la soumission', - 'your_quote' => 'Votre soumission', + 'quote' => 'Offre', + 'quotes' => 'Offres', + 'quote_number' => 'N° de l\'offre', + 'quote_number_short' => 'Offre n° #', + 'quote_date' => 'Date de l\'offre', + 'quote_total' => 'Total de l\'offre', + 'your_quote' => 'Votre offre', 'total' => 'Total', 'clone' => 'Dupliquer', - 'new_quote' => 'Nouvelle soumission', - 'create_quote' => 'Créer une soumission', - 'edit_quote' => 'Modifier la soumission', - 'archive_quote' => 'Archiver la soumission', - 'delete_quote' => 'Supprimer la soumission', - 'save_quote' => 'Enregistrer la soumission', - 'email_quote' => 'Envoyer la soumission par courriel', - 'clone_quote' => 'Dupliquer vers une nouvelle soumission', + 'new_quote' => 'Nouvelle offre', + 'create_quote' => 'Créer une offre', + 'edit_quote' => 'Éditer cette offre', + 'archive_quote' => 'Archiver cette offre', + 'delete_quote' => 'Supprimer cette offre', + 'save_quote' => 'Enregistrer cette offre', + 'email_quote' => 'Envoyer cette offre par e-mail', + 'clone_quote' => 'Dupliquer en offre', 'convert_to_invoice' => 'Convertir en facture', 'view_invoice' => 'Voir la facture', 'view_client' => 'Voir le client', - 'view_quote' => 'Voir la soumission', - 'updated_quote' => 'La soumission a été mise à jour avec succès', - 'created_quote' => 'La soumission a été créée avec succès', - 'cloned_quote' => 'La soumission a été dupliquée avec succès', - 'emailed_quote' => 'La soumission a été envoyée avec succès', - 'archived_quote' => 'La soumission a été archivée avec succès', - 'archived_quotes' => ':count soumissions ont été archivées avec succès', - 'deleted_quote' => 'La soumission a été supprimée avec succès', - 'deleted_quotes' => ':count soumissions ont été supprimées avec succès', - 'converted_to_invoice' => 'La soumission a été convertie en facture avec succès', - 'quote_subject' => 'Nouvelle soumission :number de :account', - 'quote_message' => 'Pour visionner votre soumission de :amount, cliquez sur le lien ci-dessous.', - 'quote_link_message' => 'Pour visionner votre soumission, cliquez sur le lien ci-dessous:', - 'notification_quote_sent_subject' => 'La soumission :invoice a été envoyée à :client', - 'notification_quote_viewed_subject' => 'La soumission :invoice a été visionnée par :client', - 'notification_quote_sent' => 'La soumission :invoice de :amount a été envoyée au client :client.', - 'notification_quote_viewed' => 'La soumission :invoice de :amount a été visionnée par le client :client.', + 'view_quote' => 'Voir l\'offre', + 'updated_quote' => 'Offre mise à jour avec succès', + 'created_quote' => 'Offre créée avec succès', + 'cloned_quote' => 'Offre dupliquée avec succès', + 'emailed_quote' => 'Offre envoyée par e-mail avec succès', + 'archived_quote' => 'Offre archivée avec succès', + 'archived_quotes' => ':count offres archivées avec succès', + 'deleted_quote' => 'Offre supprimée avec succès', + 'deleted_quotes' => ':count offres supprimées avec succès', + 'converted_to_invoice' => 'Offre convertie en facture avec succès', + 'quote_subject' => 'Nouvelle offre :number de :account', + 'quote_message' => 'Pour visionner votre offre de :amount, cliquez sur le lien ci-dessous.', + 'quote_link_message' => 'Pour visionner l\'offre du client, cliquez sur le lien ci-dessous:', + 'notification_quote_sent_subject' => 'L\'offre :invoice a été envoyée à :client', + 'notification_quote_viewed_subject' => 'L\'offre :invoice a été vue par :client', + 'notification_quote_sent' => 'L\'offre :invoice de :amount a été envoyée par e-mail au client :client.', + 'notification_quote_viewed' => 'L\'offre :invoice de :amount a été visualisée par le client :client.', 'session_expired' => 'Votre session a expiré.', 'invoice_fields' => 'Champs de facture', 'invoice_options' => 'Options de facture', @@ -354,14 +354,14 @@ $LANG = array( 'updated_user' => 'L\'utilisateur a été mis à jour avec succès', 'invitation_message' => 'Vous avez été invité par :invitor. ', 'register_to_add_user' => 'Veuillez vous enregistrer pour ajouter un utilisateur', - 'user_state' => 'Province', + 'user_state' => 'Canton', 'edit_user' => 'Éditer l\'utilisateur', 'delete_user' => 'Supprimer l\'utilisateur', 'active' => 'Actif', 'pending' => 'En attente', 'deleted_user' => 'L\'utilisateur a été supprimé avec succès', 'confirm_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel?', - 'confirm_email_quote' => 'Voulez-vous vraiment envoyer cette soumission par courriel?', + 'confirm_email_quote' => 'Voulez-vous vraiment envoyer cette offre par e-mail ?', 'confirm_recurring_email_invoice' => 'Voulez-vous vraiment envoyer cette facture par courriel?', 'confirm_recurring_email_invoice_not_sent' => 'Voulez-vous vraiment démarrer cette récurrence?', 'cancel_account' => 'Supprimer le compte', @@ -374,11 +374,11 @@ $LANG = array( 'invoice_settings' => 'Paramètres des factures', 'invoice_number_prefix' => 'Préfixe du numéro de facture', 'invoice_number_counter' => 'Compteur du numéro de facture', - 'quote_number_prefix' => 'Préfixe du numéro de soumission', - 'quote_number_counter' => 'Compteur du numéro de soumission', + 'quote_number_prefix' => 'Préfixe du numéro de l\'offre', + 'quote_number_counter' => 'Compteur du numéro de l\'offre', 'share_invoice_counter' => 'Partager le compteur de facture', 'invoice_issued_to' => 'Facture destinée à', - 'invalid_counter' => 'Pour éviter un éventuel conflit, merci de définir un préfixe pour le numéro de facture ou pour le numéro de soumission', + 'invalid_counter' => 'Pour éviter un éventuel conflit, merci de définir un préfixe pour le numéro de facture ou pour le numéro de l\'offre', 'mark_sent' => 'Marquer comme envoyé', 'more_designs' => 'Plus de modèles', 'more_designs_title' => 'Modèles de factures additionnels', @@ -401,12 +401,12 @@ $LANG = array( 'white_labeled' => 'Sans marque', 'restore' => 'Restaurer', 'restore_invoice' => 'Restaurer la facture', - 'restore_quote' => 'Restaurer la soumission', + 'restore_quote' => 'Restaurer l\'offre', 'restore_client' => 'Restaurer le client', 'restore_credit' => 'Restaurer le crédit', 'restore_payment' => 'Restaurer le paiement', 'restored_invoice' => 'La facture a été restaurée avec succès', - 'restored_quote' => 'La soumission a été restaurée avec succès', + 'restored_quote' => 'Offre restaurée avec succès', 'restored_client' => 'Le client a été restauré avec succès', 'restored_payment' => 'Le paiement a été restauré avec succès', 'restored_credit' => 'Le crédit a été restauré avec succès', @@ -414,7 +414,7 @@ $LANG = array( 'discount_percent' => 'Pourcent', 'discount_amount' => 'Montant', 'invoice_history' => 'Historique des factures', - 'quote_history' => 'Historique des soumissions', + 'quote_history' => 'Historique des offres', 'current_version' => 'Version courante', 'select_version' => 'Choix de la verison', 'view_history' => 'Consulter l\'historique', @@ -427,7 +427,7 @@ $LANG = array( 'email_templates' => 'Modèles de courriel', 'invoice_email' => 'Courriel de facturation', 'payment_email' => 'Courriel de paiement', - 'quote_email' => 'Courriel de soumission', + 'quote_email' => 'E-mail de l\'offre', 'reset_all' => 'Remise à zéro', 'approve' => 'Approuver', 'token_billing_type_id' => 'Jeton de facturation', @@ -489,9 +489,9 @@ $LANG = array( 'send_email' => 'Envoyer un courriel', 'set_password' => 'Nouveau mot de passe', 'converted' => 'Convertie', - 'email_approved' => 'M\'envoyer un courriel lorsqu\'une soumission a été acceptée', - 'notification_quote_approved_subject' => 'La soumission :invoice a été acceptée par :client', - 'notification_quote_approved' => 'Le client :client a accepté la soumission :invoice pour :amount.', + 'email_approved' => 'M\'envoyer un e-mail quand une offre est approuvé', + 'notification_quote_approved_subject' => 'L\'offre :invoice a été approuvé par :client', + 'notification_quote_approved' => 'Le client :client a approuvé l\'offre :invoice pour un montant de :amount.', 'resend_confirmation' => 'Renvoyer la confirmation par courriel', 'confirmation_resent' => 'La confirmation a été renvoyée', 'payment_type_credit_card' => 'Carte de crédit', @@ -587,7 +587,7 @@ $LANG = array( 'pro_plan_feature3' => 'URL personnalisées - "VotreNom.InvoiceNinja.com"', 'pro_plan_feature4' => 'Suppression de "Créé par Invoice Ninja"', 'pro_plan_feature5' => 'Accès multi-utilisateurs & suivi d\'activité', - 'pro_plan_feature6' => 'Création de soumission et de factures Pro-forma', + 'pro_plan_feature6' => 'Créer des Offre & Pro-forma', 'pro_plan_feature7' => 'Personnalisation des champs de facture', 'pro_plan_feature8' => 'Pièces jointes PDF pour les envois de courriel aux clients', 'resume' => 'Continuer', @@ -637,7 +637,7 @@ $LANG = array( 'custom' => 'Personnalisé', 'invoice_to' => 'Facture à', 'invoice_no' => 'Facture n°', - 'quote_no' => 'N° de soumission', + 'quote_no' => 'Offre n°', 'recent_payments' => 'Paiements reçus', 'outstanding' => 'Impayées', 'manage_companies' => 'Gérer les entreprises', @@ -645,8 +645,8 @@ $LANG = array( 'current_user' => 'Utilisateur en cours', 'new_recurring_invoice' => 'Nouvelle facture récurrente', 'recurring_invoice' => 'Facture récurrente', - 'new_recurring_quote' => 'Nouvelle soumission récurrente', - 'recurring_quote' => 'Soumission récurrente', + 'new_recurring_quote' => 'Nouvelle offre récurrente', + 'recurring_quote' => 'Offre récurrente', 'recurring_too_soon' => 'il est trop tôt pour la création d\'une autre facture récurrente, elle est planifiée pour le :date', 'created_by_invoice' => 'Créée par :invoice', 'primary_user' => 'Utilisateur principal', @@ -677,7 +677,7 @@ $LANG = array( 'military_time' => 'Format d\'heure 24 h', 'last_sent' => 'Dernier envoi', 'reminder_emails' => 'Courriels de rappel', - 'quote_reminder_emails' => 'Courriel de rappel de soumission', + 'quote_reminder_emails' => 'Emails de rappel de l\'offre', 'templates_and_reminders' => 'Modèles et rappels', 'subject' => 'Sujet', 'body' => 'Corps', @@ -692,20 +692,20 @@ $LANG = array( 'referral_code' => 'Code de référencement', 'last_sent_on' => 'Dernier envoi le :date', 'page_expire' => 'Cette page va expirer bientôt, :click_here pour continuer', - 'upcoming_quotes' => 'Soumissions à venir', - 'expired_quotes' => 'Soumissions expirées', + 'upcoming_quotes' => 'Offre à venir', + 'expired_quotes' => 'Offres expirées', 'sign_up_using' => 'Connectez-vous avec', 'invalid_credentials' => 'Ces informations ne correspondent pas à nos données', 'show_all_options' => 'Afficher toutes les options', 'user_details' => 'Profil utilisateur', 'oneclick_login' => 'Compte connecté', 'disable' => 'Désactiver', - 'invoice_quote_number' => 'Numéros de factures et de soumissions', + 'invoice_quote_number' => 'Numéro des offres & factures', 'invoice_charges' => 'Suppléments de facture', 'notification_invoice_bounced' => 'Impossible d\'envoyer la facture :invoice à :contact.', 'notification_invoice_bounced_subject' => 'Impossible d\'envoyer la facture :invoice', - 'notification_quote_bounced' => 'Impossible d\'envoyer la soumission :invoice à :contact.', - 'notification_quote_bounced_subject' => 'Impossible d\'envoyer la soumission :invoice', + 'notification_quote_bounced' => 'Impossible d\'envoyer l\'offre :invoice à :contact.', + 'notification_quote_bounced_subject' => 'Impossible d\'envoyer l\'offre :invoice', 'custom_invoice_link' => 'Lien de facture personnalisé', 'total_invoiced' => 'Total facturé', 'open_balance' => 'Solde restant', @@ -737,7 +737,7 @@ $LANG = array( 'pattern_help_3' => 'Par exemple, :example produira :value', 'see_options' => 'Voir les options', 'invoice_counter' => 'Numéros de factures', - 'quote_counter' => 'Numéros de soumissions', + 'quote_counter' => 'Compteur d\'offre', 'type' => 'Type', 'activity_1' => ':user a créé le client :client', 'activity_2' => ':user a archivé le client :client', @@ -756,18 +756,18 @@ $LANG = array( 'activity_15' => ':user a mis à jour le crédit :credit', 'activity_16' => ':user a archivé le crédit :credit', 'activity_17' => ':user a supprimé le crédit :credit', - 'activity_18' => ':user a créé la soumission :quote', - 'activity_19' => ':user a mis à jour la soumission :quote', - 'activity_20' => ':user a envoyé par courriel la soumission :quote pour :client à :contact', - 'activity_21' => ':contact a visualisé la soumission :quote', - 'activity_22' => ':user a archivé la soumission :quote', - 'activity_23' => ':user a supprimé la soumission :quote', - 'activity_24' => ':user a restauré la soumission :quote', + 'activity_18' => ':user a créé l\'offre :quote', + 'activity_19' => ':user a mis à jour l\'offre :quote', + 'activity_20' => ':user a envoyé par courriel l\'offre :quote pour :client à :contact', + 'activity_21' => ':contact a visualisé l\'offre :quote', + 'activity_22' => ':user a archivé l\'offre :quote', + 'activity_23' => ':user a supprimé l\'offre :quote', + 'activity_24' => ':user a restauré l\'offre :quote', 'activity_25' => ':user a restauré la facture :invoice', 'activity_26' => ':user a restauré le client :client', 'activity_27' => ':user a restauré le paiement :payment', 'activity_28' => ':user a restauré le crédit :credit', - 'activity_29' => ':contact a approuvé la soumission :quote pour :client', + 'activity_29' => ':contact a approuvé l\'offre :quote pour :client', 'activity_30' => ':user a créé le fournisseur :vendor', 'activity_31' => ':user a archivé le fournisseur :vendor', 'activity_32' => ':user a supprimé le fournisseur :vendor', @@ -796,11 +796,11 @@ $LANG = array( 'system' => 'Système', 'signature' => 'Signature de courriel', 'default_messages' => 'Message par défaut', - 'quote_terms' => 'Conditions de soumission', - 'default_quote_terms' => 'Conditions par défaut pour les soumissions', + 'quote_terms' => 'Conditions des offres', + 'default_quote_terms' => 'Conditions des offres par défaut', 'default_invoice_terms' => 'Définir comme les conditions par défaut', 'default_invoice_footer' => 'Définir le pied de facture par défaut', - 'quote_footer' => 'Pied de soumission par défaut', + 'quote_footer' => 'Pied de page des offres', 'free' => 'Gratuit', 'quote_is_approved' => 'Approuvé avec succès', 'apply_credit' => 'Appliquer le crédit', @@ -817,12 +817,12 @@ $LANG = array( 'deleted_recurring_invoice' => 'La facture récurrente a été supprimée avec succès', 'restore_recurring_invoice' => 'Restaurer la facture récurrente', 'restored_recurring_invoice' => 'La facture récurrente a été restaurée avec succès', - 'archive_recurring_quote' => 'Archiver une soumission récurrente', - 'archived_recurring_quote' => 'La soumission récurrente a été archivée avec succès', - 'delete_recurring_quote' => 'Supprimer la soumission récurrente', - 'deleted_recurring_quote' => 'La soumission récurrente a été supprimée avec succès', - 'restore_recurring_quote' => 'Restaurer une soumission récurrente', - 'restored_recurring_quote' => 'La soumission récurrente a été restaurée avec succès', + 'archive_recurring_quote' => 'Archiver offre récurrente', + 'archived_recurring_quote' => 'Offre récurrent archivé avec succès', + 'delete_recurring_quote' => 'Supprimer offre récurrente', + 'deleted_recurring_quote' => 'Offre récurrent supprimé avec succès', + 'restore_recurring_quote' => 'Restaurer offre récurrente', + 'restored_recurring_quote' => 'Offre récurrent restauré avec succès', 'archived' => 'Archivé', 'untitled_account' => 'Entreprise sans nom', 'before' => 'Avant', @@ -869,7 +869,7 @@ $LANG = array( 'subdomain_help' => 'Définissez le sous-domaine ou affichez la facture sur votre site web.', 'website_help' => 'Afficher la facture dans un iFrame sur votre site web', 'invoice_number_help' => 'Spécifiez un préfixe ou utilisez un modèle personnalisé pour la création du numéro de facture.', - 'quote_number_help' => 'Spécifiez un préfixe ou utilisez un modèle personnalisé pour la création du numéro de soumission.', + 'quote_number_help' => 'Spécifier un préfixe ou utiliser un modèle personnalisé pour la création du numéro de l\'offre.', 'custom_client_fields_helps' => 'Ajoute un champ lors de la création d\'un client et affiche, de façon optionnelle, le libellé et la valeur dans le PDF.', 'custom_account_fields_helps' => 'Ajoutez un titre et une valeur à la section des informations de l\'entreprise dans le fichier PDF.', 'custom_invoice_fields_helps' => 'Ajoute un champ lors de la création d\'une facture et affiche, de façon optionnelle, le libellé et la valeur dans le PDF.', @@ -881,7 +881,7 @@ $LANG = array( 'email_preferences' => 'Préférences courriel', 'created_invoices' => ':count factures ont été créées avec succès', 'next_invoice_number' => 'Le prochain numéro de facture est :number.', - 'next_quote_number' => 'Le prochain numéro de soumission est :number.', + 'next_quote_number' => 'Le prochain numéro de l\'offre est :number.', 'days_before' => 'jours avant le', 'days_after' => 'jours après le', 'field_due_date' => 'Échéance', @@ -963,7 +963,7 @@ $LANG = array( 'live_preview' => 'PRÉVISUALISATION', 'invalid_mail_config' => 'impossible d\'envoyer le courriel, veuillez vérifier vos paramètres courriel.', 'invoice_message_button' => 'Pour voir la facture de :amount, cliquez sur le bouton ci-dessous.', - 'quote_message_button' => 'Pour voir la soumission de :amount, cliquez sur le bouton ci-dessous.', + 'quote_message_button' => 'Pour visualiser votre offre de :amount, cliquez sur le lien ci-dessous.', 'payment_message_button' => 'Merci pour votre paiement de :amount.', 'payment_type_direct_debit' => 'Prélèvement automatique', 'bank_accounts' => 'Comptes bancaires', @@ -985,9 +985,9 @@ $LANG = array( 'account_name' => 'Nom du compte', 'bank_account_error' => 'Impossible de récupérer les informations de compte, veuillez vérifier les informations entrées.', 'status_approved' => 'Acceptée', - 'quote_settings' => 'Paramètres des soumissions', + 'quote_settings' => 'Paramètres des offres', 'auto_convert_quote' => 'Autoconversion', - 'auto_convert_quote_help' => 'Convertir automatiquement une soumission lorsque celle-ci est approuvée.', + 'auto_convert_quote_help' => 'Convertir automatiquement une offre en facture dès qu\'il est approuvé.', 'validate' => 'Valider', 'info' => 'Info', 'imported_expenses' => ':count_vendors fournisseur(s) et :count_expenses dépense(s) ont été créés avec succès', @@ -1003,7 +1003,7 @@ $LANG = array( 'all_pages_footer' => 'Afficher le pied de page sur', 'invoice_currency' => 'Devise de la facture', 'enable_https' => 'Nous vous recommandons fortement d\'activer le HTTPS pour la réception de paiement par carte de crédit en ligne.', - 'quote_issued_to' => 'La soumission a été émise pour', + 'quote_issued_to' => 'Offre à l\'attention de', 'show_currency_code' => 'Code de devise', 'free_year_message' => 'Votre compte a été mis à niveau gratuitement vers le Plan Pro pour une année.', 'trial_message' => 'Vous allez bénéficier d\'un essai gratuit de 2 semaines au Plan Pro.', @@ -1011,7 +1011,7 @@ $LANG = array( 'trial_footer_last_day' => 'C\'est le dernier jour de votre essai gratuit Pro Plan, :link pour s\'inscrire.', 'trial_call_to_action' => 'Démarrez votre essai gratuit', 'trial_success' => 'Le Plan Pro, version d\'essai gratuit pour 2 semaines a été activé avec succès', - 'overdue' => 'En souffrance', + 'overdue' => 'En retard', 'white_label_text' => 'Achetez une licence sans marque d\'UN AN au coût de $:price pour retirer la marque de Invoice Ninja des factures et du portail client.', @@ -1041,7 +1041,7 @@ $LANG = array( 'navigation' => 'Navigation', 'list_invoices' => 'Liste des factures', 'list_clients' => 'Liste des clients', - 'list_quotes' => 'Liste des soumissions', + 'list_quotes' => 'Liste des offres', 'list_tasks' => 'Liste des interventions', 'list_expenses' => 'Liste des factures récurrentes', 'list_recurring_invoices' => 'Liste des factures récurrentes', @@ -1108,7 +1108,7 @@ $LANG = array( 'email_documents_header' => 'Documents:', 'email_documents_example_1' => 'Recu du widget.pdf', 'email_documents_example_2' => 'Livraison finale.zip', - 'quote_documents' => 'Justificatifs de soumission', + 'quote_documents' => 'Documents de l\'offre', 'invoice_documents' => 'Justificatifs de facturation', 'expense_documents' => 'Justificatifs de dépense', 'invoice_embed_documents' => 'Documents intégrés', @@ -1348,7 +1348,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'products_will_create' => 'produits seront créés', 'product_key' => 'Produit', 'created_products' => ':count produit(s) ont été crées / mis à jour avec succès', - 'export_help' => 'Utilisez JSON si vous prévoyez importer les données dans Invoice Ninja.
    Ceci inclut les clients, les produits, les factures, les soumissions et les paiements.', + 'export_help' => 'Utilisez JSON si vous prévoyez importer les données dans Invoice Ninja.
    Ceci inclut les clients, les produits, les factures, les offre et les paiements.', 'selfhost_export_help' => 'Nous recommandons de faire un mysqldump pour effectuer une sauvegarde complète.', 'JSON_file' => 'Fichier JSON', @@ -1825,7 +1825,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'list_products' => 'Liste des produits', 'include_item_taxes_inline' => 'Inclure lestaxes par ligne dans le total des lignes', - 'created_quotes' => ':count soumission(s) ont été créées avec succès', + 'created_quotes' => ':count offres ont été créés avec succès', 'limited_gateways' => 'Note: Nous supportons une passerelle de carte de crédit par entreprise', 'warning' => 'Avertissement', @@ -1844,7 +1844,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'unassigned' => 'Non assigné', 'task' => 'Intervention', 'contact_name' => 'Nom du contact', - 'city_state_postal' => 'Ville/Prov/CP', + 'city_state_postal' => 'Ville/Canton/CP', 'postal_city' => 'Code postal/Ville', 'custom_field' => 'Champ personnalisé', 'account_fields' => 'Champs pour entreprise', @@ -1860,7 +1860,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'reports' => 'Rapports', 'total_profit' => 'Total des profits', 'total_expenses' => 'Dépenses', - 'quote_to' => 'Soumission pour', + 'quote_to' => 'Offre pour', // Limits 'limit' => 'Limite', @@ -1921,11 +1921,11 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'invoice_signature' => 'Signature', 'show_accept_invoice_terms' => 'Case à cocher pour les conditions de facturation', 'show_accept_invoice_terms_help' => 'Requiert du client qu\'il confirme et accepte les conditions de facturation', - 'show_accept_quote_terms' => 'Case à cocher pour les conditions de soumssion', - 'show_accept_quote_terms_help' => 'Requiert du client qu\'il confirme et accepte les conditions de soumission', + 'show_accept_quote_terms' => 'Case à cocher pour les conditions de l\'offre', + 'show_accept_quote_terms_help' => 'Requiert du client qu\'il confirme et accepte les conditions de l\'offre', 'require_invoice_signature' => 'Signature de facture', 'require_invoice_signature_help' => 'Requiert une signature du client', - 'require_quote_signature' => 'Signature de soumission', + 'require_quote_signature' => 'Signature de l\'offre', 'require_quote_signature_help' => 'Requiert une signature du client', 'i_agree' => 'J\'accepte les conditions', 'sign_here' => 'Veuillez signer ici:', @@ -2008,7 +2008,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'switch_to_primary' => 'Veuillez basculer vers votre entreprise initiale (:name) pour gérer votre plan d\'abonnement.', 'inclusive' => 'Inclusif', 'exclusive' => 'Exclusif', - 'postal_city_state' => 'Ville/Province/Code postal', + 'postal_city_state' => 'Ville/Canton/Code postal', 'phantomjs_help' => 'Dans certains cas, l\'application utilise :link_phantom pour générer le PDF. Installez :link_docs pour le générer localement.', 'phantomjs_local' => 'Utilise PhantomJS local', 'client_number' => 'Numéro de client', @@ -2020,10 +2020,10 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'notes_reminder3' => 'Troisième rappel', 'notes_reminder4' => 'Rappel', 'bcc_email' => 'Courriel CCI', - 'tax_quote' => 'Taxe de soumission', + 'tax_quote' => 'Taxe de l\'offre', 'tax_invoice' => 'Taxe de facture', 'emailed_invoices' => 'Les factures ont été envoyées par courriel avec succès', - 'emailed_quotes' => 'Les soumissions ont été envoyées par courriel avec succès', + 'emailed_quotes' => 'Les offre ont été envoyées par courriel avec succès', 'website_url' => 'URL du site web', 'domain' => 'Domaine', 'domain_help' => 'Utilisé sur le portail du client lors de l\'envoi des courriels.', @@ -2059,7 +2059,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'send_automatically' => 'Envoyer automatiquement', 'initial_email' => 'Courriel initial', 'invoice_not_emailed' => 'Cette facture n\'a pas été envoyé par courriel.', - 'quote_not_emailed' => 'Cette soumission n\'a pas été envoyé par courriel.', + 'quote_not_emailed' => 'Cette offre n\'a pas été envoyé par courriel.', 'sent_by' => 'Envoyé par :user', 'recipients' => 'destinataires', 'save_as_default' => 'Sauvegarder comme valeur par défaut', @@ -2140,7 +2140,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'imported_settings' => 'Les paramètres ont été inmportés avec succès', 'reset_counter' => 'Remettre à zéro le compteur', 'next_reset' => 'Prochaine remise à zéro', - 'reset_counter_help' => 'Remettre automatiquement à zéro les compteurs de facture et de soumission.', + 'reset_counter_help' => 'Remettre automatiquement à zéro les compteurs de facture et de l\'offre.', 'auto_bill_failed' => 'La facturation automatique de :invoice_number a échouée.', 'online_payment_discount' => 'Remise de paiement en ligne', 'created_new_company' => 'La nouvelle entreprise a été créée avec succès', @@ -2208,7 +2208,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'expense_link' => 'dépense', 'resume_task' => 'Poursuivre l\'intervention', 'resumed_task' => 'L\'intervention a été reprise avec succès', - 'quote_design' => 'Design de soumission', + 'quote_design' => 'Design de l\'offre', 'default_design' => 'Design standard', 'custom_design1' => 'Design personnalisé 1', 'custom_design2' => 'Design personnalisé 2', @@ -2271,12 +2271,12 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'late_fee_percent' => 'Pourcentage de frais de retard', 'late_fee_added' => 'Les frais de retard ont été ajouté le :date', 'download_invoice' => 'Télécharger la facture', - 'download_quote' => 'Télécharger la soumission', + 'download_quote' => 'Télécharger l\'offre', 'invoices_are_attached' => 'Les factures PDF sont jointes.', 'downloaded_invoice' => 'Un courriel sera envoyé avec la facture PDF', - 'downloaded_quote' => 'Un courriel sera envoyé avec la soumission PDF', + 'downloaded_quote' => 'Un courriel sera envoyé avec l\'offre PDF', 'downloaded_invoices' => 'Un courriel sera envoyé avec les factures PDF', - 'downloaded_quotes' => 'Un courriel sera envoyé avec les soumissions PDF', + 'downloaded_quotes' => 'Un courriel sera envoyé avec les offres PDF', 'clone_expense' => 'Dupliquer la dépense', 'default_documents' => 'Documents par défaut', 'send_email_to_client' => 'Envoyer un courriel au client', @@ -2396,6 +2396,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Nous espérons que votre utilisation de cette application vous est agréable.
    Un commentaire de votre part serait grandement apprécié!', 'writing_a_review' => 'rédiger un commentaire', @@ -2487,7 +2490,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'warn_payment_gateway' => 'Note: pour accepter un paiement en ligne, il faut une passerelle de paiements, :link pour en ajouter une.', 'task_rate' => 'Taux d\'intervention', 'task_rate_help' => 'Définit le taux par défaut pour les interventions facturées.', - 'past_due' => 'En souffrance', + 'past_due' => 'En retard', 'document' => 'Justificatifs', 'invoice_or_expense' => 'Facture / dépense', 'invoice_pdfs' => 'Facture en PDF', @@ -2532,13 +2535,13 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'billing_address1' => 'Rue de facturation', 'billing_address2' => 'App. de facturation', 'billing_city' => 'Ville de facturation', - 'billing_state' => 'Province de facturation', + 'billing_state' => 'Canton de facturation', 'billing_postal_code' => 'Code postal de facturation', 'billing_country' => 'Pays de facturation', 'shipping_address1' => 'Rue de livraison', 'shipping_address2' => 'App. de livraison', 'shipping_city' => 'Ville de livraison', - 'shipping_state' => 'Province de livraison', + 'shipping_state' => 'Canton de livraison', 'shipping_postal_code' => 'Code postal de livraison', 'shipping_country' => 'Pays de livraison', 'classify' => 'Classer', @@ -2569,11 +2572,11 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'event' => 'Événement', 'subscription_event_1' => 'Client créé', 'subscription_event_2' => 'Facture créée', - 'subscription_event_3' => 'Soumission créée', + 'subscription_event_3' => 'Offre créé', 'subscription_event_4' => 'Paiement créé', 'subscription_event_5' => 'Fournisseur créé', - 'subscription_event_6' => 'Soumission mise à jour', - 'subscription_event_7' => 'Soumission supprimée', + 'subscription_event_6' => 'Offre mise à jour', + 'subscription_event_7' => 'Offre supprimée', 'subscription_event_8' => 'Facture mise à jour', 'subscription_event_9' => 'Facture supprimée', 'subscription_event_10' => 'Client mis à jour', @@ -2587,7 +2590,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'subscription_event_18' => 'Intervention créée', 'subscription_event_19' => 'Intervention mise à jour', 'subscription_event_20' => 'Intervention supprimée', - 'subscription_event_21' => 'Soumission approuvée', + 'subscription_event_21' => 'Offre approuvée', 'subscriptions' => 'Abonnements', 'updated_subscription' => 'Abonnement mis à jour avec succès', 'created_subscription' => 'Abonnement créé avec succès', @@ -2598,7 +2601,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'invoice_project' => 'Facturer le projet', 'module_recurring_invoice' => 'Factures récurrentes', 'module_credit' => 'Crédits', - 'module_quote' => 'Soumission et propositions', + 'module_quote' => 'Offres et propositions', 'module_task' => 'Interventions et projets', 'module_expense' => 'Dépenses et fournisseurs', 'module_ticket' => 'Billets', @@ -2617,13 +2620,13 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'inclusive_taxes_warning' => 'Avertissement: les factures existantes devront être sauvegardées à nouveau', 'copy_shipping' => 'Copier livraison', 'copy_billing' => 'Copier facturation', - 'quote_has_expired' => 'La soumission est expirée. Veuillez contacter le commerçant.', + 'quote_has_expired' => 'L\'offre est expiré. Veuillez contacter le commerçant.', 'empty_table_footer' => '0 entrées sur 0', 'do_not_trust' => 'Ne pas ce souvenir de cet appaeil', 'trust_for_30_days' => 'Faire confiance pour 30 jours', 'trust_forever' => 'Toujours faire confiance', 'kanban' => 'Kanban', - 'backlog' => 'En retard', + 'backlog' => 'À rattraper', 'ready_to_do' => 'Prêt à exécuter', 'in_progress' => 'En cours', 'add_status' => 'Ajouter un statut', @@ -2639,7 +2642,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'endless_reminder' => 'Rappel perpétuel', 'signature_on_invoice_help' => 'Ajoutez le code suivant pour afficher la signature du client sur le PDF.', 'signature_on_pdf' => 'Afficher sur le PDF', - 'signature_on_pdf_help' => 'Afficher la signature du client sur la facture/soumission PDF.', + 'signature_on_pdf_help' => 'Afficher la signature du client sur la facture/offre PDF.', 'expired_white_label' => 'La licence sans marque a expirée', 'return_to_login' => 'Retour à la connexion', 'convert_products_tip' => 'Note: ajouter un :link intitulé ":name" pour voir le taux de change.', @@ -2774,13 +2777,13 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'auto_archive_invoice' => 'Autoarchivage', 'auto_archive_invoice_help' => 'Archiver automatiquement les factures lorsqu\'elles sont payées.', 'auto_archive_quote' => 'Autoarchivage', - 'auto_archive_quote_help' => 'Archiver automatiquement les soumissions lorsque converti en facture', - 'require_approve_quote' => 'Approbation de soumission requise', - 'require_approve_quote_help' => 'Soumissions approuvées par le client requise.', - 'allow_approve_expired_quote' => 'Autoriser l\'approbation de soumissions expirées', - 'allow_approve_expired_quote_help' => 'Autoriser les clients à approuver les soumissions expirées', + 'auto_archive_quote_help' => 'Archiver automatiquement les offre lorsque converti en facture', + 'require_approve_quote' => 'Approbation de l\'offre requise', + 'require_approve_quote_help' => 'Offres approuvées par le client requise.', + 'allow_approve_expired_quote' => 'Autoriser l\'approbation de l\'offre expirés', + 'allow_approve_expired_quote_help' => 'Autoriser les clients à approuver les offre expirées', 'invoice_workflow' => 'Flux de facturation', - 'quote_workflow' => 'Flux de soumission', + 'quote_workflow' => 'Flux de l\'offre', 'client_must_be_active' => 'Erreur : le client doit être actif', 'purge_client' => 'Purger client', 'purged_client' => 'Le client a été purgé avec succès', @@ -2814,9 +2817,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'messages' => 'Messages', 'unpaid_invoice' => 'Facture impayée', 'paid_invoice' => 'Facture payée', - 'unapproved_quote' => 'Soumission non approuvée', + 'unapproved_quote' => 'Offre non approuvé', 'unapproved_proposal' => 'Proposition non approuvée', - 'autofills_city_state' => 'Autoremplissage ville/prov', + 'autofills_city_state' => 'Autoremplissage ville/canton', 'no_match_found' => 'Aucun résultat', 'password_strength' => 'Force du mot de passe', 'strength_weak' => 'Faible', @@ -2869,7 +2872,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'language' => 'Langue', 'updated_at' => 'Mis à jour', 'please_enter_an_invoice_number' => 'Veuillez saisir un numéro de facture', - 'please_enter_a_quote_number' => 'Veuillez saisir un numéro de soumission', + 'please_enter_a_quote_number' => 'Veuillez saisir un numéro de l\'offre', 'clients_invoices' => 'Factures de :client\'s', 'viewed' => 'Vue', 'approved' => 'Approuvée', @@ -2898,8 +2901,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'button' => 'Bouton', 'more' => 'Plus', 'edit_recurring_invoice' => 'Éditer la facture récurrente', - 'edit_recurring_quote' => 'Éditer la soumission récurrente', - 'quote_status' => 'État de la soumission', + 'edit_recurring_quote' => 'Éditer l\'offre récurrente', + 'quote_status' => 'État de l\'offre', 'please_select_an_invoice' => 'Veuillez sélectionner une facture', 'filtered_by' => 'Filtrée par', 'payment_status' => 'État du paiement', @@ -2911,7 +2914,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'payment_status_6' => 'Remboursée', 'send_receipt_to_client' => 'Envoyer un reçu au client', 'refunded' => 'Remboursée', - 'marked_quote_as_sent' => 'La soumission a été marquée comme envoyée avec succès', + 'marked_quote_as_sent' => 'L\'offre a été marqué comme envoyé avec succès', 'custom_module_settings' => 'Paramètres personnalisés de modules', 'ticket' => 'Billet', 'tickets' => 'Billets', @@ -3055,7 +3058,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'compare_to' => 'Comparer à', 'last_week' => 'Dernière semaine', 'clone_to_invoice' => 'Cloner en facture', - 'clone_to_quote' => 'Cloner en soumission', + 'clone_to_quote' => 'Cloner en offre', 'convert' => 'Convertir', 'last7_days' => '7 derniers jours', 'last30_days' => '30 derniers jours', @@ -3082,7 +3085,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'password_is_too_short' => 'Le mot de passe est trop court', 'failed_to_find_record' => 'Enregistrement introuvable', 'valid_until_days' => 'Valable jusque', - 'valid_until_days_help' => 'Définit automatiquement la valeur Valable jusque sur les soumissions pour autant de jours à venir. Laissez vide pour désactiver.', + 'valid_until_days_help' => 'Définit automatiquement la valeur Valable jusque sur les offre pour autant de jours à venir. Laissez vide pour désactiver.', 'usually_pays_in_days' => 'Jours', 'requires_an_enterprise_plan' => 'Le plan Entreprise est requis', 'take_picture' => 'Prendre un photo', @@ -3331,9 +3334,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'freq_three_years' => 'Trois ans', 'military_time_help' => 'Affichage 24h', 'click_here_capital' => 'Cliquez ici', - 'marked_invoice_as_paid' => 'La facture a été marquée comme envoyée avec succès', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Les factures ont été marquées comme envoyées avec succès', - 'marked_invoices_as_paid' => 'Les factures ont été marquées comme envoyées avec succès', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Le système n\'a pas pu envoyer le courriel de la facture :invoice', 'custom_value3' => 'Valeur personnalisée 3', 'custom_value4' => 'Valeur personnalisée 4', @@ -3341,7 +3344,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'custom_message_dashboard' => 'Message personnalisé du tableau de bord', 'custom_message_unpaid_invoice' => 'Message personnalisé pour facture impayée', 'custom_message_paid_invoice' => 'Message personnalisé pour facture payée', - 'custom_message_unapproved_quote' => 'Message personnalisé pour soumission non approuvée', + 'custom_message_unapproved_quote' => 'Message personnalisé pour offre non approuvé', 'lock_sent_invoices' => 'Verrouiller les factures envoyées', 'translations' => 'Traductions', 'task_number_pattern' => 'Modèle du numéro d\'intervention ', @@ -3355,14 +3358,14 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'payment_number_pattern' => 'Modèle du numéro de paiement', 'payment_number_counter' => 'Compteur du numéro de paiement', 'invoice_number_pattern' => 'Modèle du numéro de facture', - 'quote_number_pattern' => 'Modèle du numéro de soumission', + 'quote_number_pattern' => 'Modèle du numéro de l\'offre', 'client_number_pattern' => 'Modèle du numéro de crédit', 'client_number_counter' => 'Compteur du numéro de crédit', 'credit_number_pattern' => 'Modèle du numéro de crédit', 'credit_number_counter' => 'Compteur du numéro de crédit', 'reset_counter_date' => 'Remise à zéro du compteur de date', 'counter_padding' => 'Espacement du compteur', - 'shared_invoice_quote_counter' => 'Compteur partagé pour les factures et les soumissions', + 'shared_invoice_quote_counter' => 'Compteur partagé pour les factures et les offre', 'default_tax_name_1' => 'Nom de taxe par défaut 1', 'default_tax_rate_1' => 'Taux de taxe par défaut 1', 'default_tax_name_2' => 'Nom de taxe par défaut 2', @@ -3370,11 +3373,11 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'default_tax_name_3' => 'Nom de taxe par défaut 3', 'default_tax_rate_3' => 'Taux de taxe par défaut 3', 'email_subject_invoice' => 'Objet du courriel de facture', - 'email_subject_quote' => 'Objet du courriel de soumission', + 'email_subject_quote' => 'Objet du courriel de l\'offre', 'email_subject_payment' => 'Objet du courriel de paiement', 'switch_list_table' => 'Basculer à table de liste', 'client_city' => 'Ville du client', - 'client_state' => 'Province du client', + 'client_state' => 'Canton du client', 'client_country' => 'Pays du client', 'client_is_active' => 'Client actif', 'client_balance' => 'Solde du client', @@ -3397,7 +3400,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'custom_surcharge4' => 'Surcharge personnalisée 4', 'is_deleted' => 'Est supprimé', 'vendor_city' => 'Ville du fournisseur', - 'vendor_state' => 'Province du fournisseur', + 'vendor_state' => 'Canton du fournisseur', 'vendor_country' => 'Pays du fournisseur', 'credit_footer' => 'Pied de page pour crédit', 'credit_terms' => 'Conditions d\'utilisation pour crédit', @@ -3412,7 +3415,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'saved_design' => 'Le modèle a été sauvegardé avec succès', 'client_details' => 'Informations du client', 'company_address' => 'Adresse de l\'entreprise', - 'quote_details' => 'Informations de la soumission', + 'quote_details' => 'Informations de l\'offre', 'credit_details' => 'Informations de crédit', 'product_columns' => 'Colonnes produit', 'task_columns' => 'Colonnes d\'intervention', @@ -3421,16 +3424,16 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'owned' => 'Propriétaire', 'payment_success' => 'Paiement réussi', 'payment_failure' => 'Le paiement a échoué', - 'quote_sent' => 'Soumission envoyée', + 'quote_sent' => 'Offre envoyé', 'credit_sent' => 'Crédit envoyé', 'invoice_viewed' => 'Facture visualisée', - 'quote_viewed' => 'Soumission visualisée', + 'quote_viewed' => 'Offre visualisée', 'credit_viewed' => 'Crédit visualisé', - 'quote_approved' => 'Soumission approuvée', + 'quote_approved' => 'Offre approuvée', 'receive_all_notifications' => 'Recevoir toutes les notifications', 'purchase_license' => 'Acheter une licence', 'enable_modules' => 'Activer les modules', - 'converted_quote' => 'La soumission a été convertie avec succès', + 'converted_quote' => 'L\'offre a été converti avec succès', 'credit_design' => 'Design de crédit', 'includes' => 'Inclusions', 'css_framework' => 'Framework CSS', @@ -3488,7 +3491,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'send_from_gmail' => 'Envoyer avec Gmail', 'reversed' => 'Inversé', 'cancelled' => 'Annulé', - 'quote_amount' => 'Montant de la soumission', + 'quote_amount' => 'Montant de l\'offre', 'hosted' => 'Hébergé', 'selfhosted' => 'Auto-hébergé', 'hide_menu' => 'Masquer le menu', @@ -3499,7 +3502,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'search_invoices' => 'Recherche de factures', 'search_clients' => 'Recherche de clients', 'search_products' => 'Recherche de produits', - 'search_quotes' => 'Recherche de soumissions', + 'search_quotes' => 'Recherche des offres', 'search_credits' => 'Recherche de crédits', 'search_vendors' => 'Recherche de fournisseurs', 'search_users' => 'Recherche d\'utilisateurs', @@ -3569,19 +3572,19 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'client_settings' => 'Paramètres clients', 'selected_invoices' => 'Factures sélectionnées', 'selected_payments' => 'Paiements sélectionnés', - 'selected_quotes' => 'Soumissions sélectionnées', + 'selected_quotes' => 'Offres sélectionnées', 'selected_tasks' => 'Interventions sélectionnées', 'selected_expenses' => 'Dépenses sélectionnées', 'past_due_invoices' => 'Factures impayées', 'create_payment' => 'Créer un paiement', - 'update_quote' => 'Mettre à jour la soumission', + 'update_quote' => 'Mettre à jour l\'offre', 'update_invoice' => 'Mettre à jour la facture', 'update_client' => 'Mettre à jour le client', 'update_vendor' => 'Mettre à jour le fournisseur', 'create_expense' => 'Créer une dépense', 'update_expense' => 'Mettre à jour la dépense', 'update_task' => 'Mettre à jour l\'intervention', - 'approve_quote' => 'Approuver la tâche', + 'approve_quote' => 'Approuver l\'offre', 'when_paid' => 'Lors du paiement', 'expires_on' => 'Expiration le', 'show_sidebar' => 'Afficher la barre latérale', @@ -3616,9 +3619,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'search_invoice' => 'Recherche de 1 facture', 'search_client' => 'Recherche de 1 client', 'search_product' => 'Recherche de 1 produit', - 'search_quote' => 'Recherche de 1 soumission', + 'search_quote' => 'Recherche de 1 offre', 'search_credit' => 'Recherche de 1 crédit', - 'search_vendor' => 'Recherche de 1 entreprise', + 'search_vendor' => 'Recherche de 1 fournisseur', 'search_user' => 'Recherche de 1 utilisateur', 'search_tax_rate' => 'Recherche de 1 taux de taxe', 'search_task' => 'Recherche de 1 intervention', @@ -3717,7 +3720,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'tax_name2' => 'Nom de la taxe 2', 'transaction_id' => 'ID de transaction', 'invoice_late' => 'facture en retard', - 'quote_expired' => 'Soumission expirée', + 'quote_expired' => 'Offre expirée', 'recurring_invoice_total' => 'Total de facture', 'actions' => 'Actions', 'expense_number' => 'Numéro de dépense', @@ -3726,12 +3729,12 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'view_settings' => 'Voir les paramètres', 'company_disabled_warning' => 'Avertissement: Cette entreprise n\'a pas encore été activée', 'late_invoice' => 'Facture en retard', - 'expired_quote' => 'Soumission expirée', + 'expired_quote' => 'Offre expirée', 'remind_invoice' => 'Rappeler la facture', 'client_phone' => 'Téléphone du client', 'required_fields' => 'Champs requis', 'enabled_modules' => 'Modules activés', - 'activity_60' => ':contact a vu la soumission :quote', + 'activity_60' => ':contact a vu l\'offre :quote', 'activity_61' => ':user a mis à jour le client :client', 'activity_62' => ':user a mis à jour le fournisseur :vendor', 'activity_63' => ':user a envoyé le premier rappel pour la facture :invoice de :contact', @@ -3801,7 +3804,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'restored_clients' => 'Les :value clients ont été restaurés avec succès', 'restored_invoices' => 'Les :value factures ont été restaurées avec succès', 'restored_payments' => 'Les :value paiements ont été restaurés avec succès', - 'restored_quotes' => 'Les :value soumissions ont été restaurées avec succès', + 'restored_quotes' => 'Les :value offres ont été restaurées avec succès', 'update_app' => 'Mettre à jour l\'App', 'started_import' => 'L\'importation a démarré avec succès', 'duplicate_column_mapping' => 'Dupliquer le mappage de colonnes', @@ -3855,7 +3858,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'notification_credit_viewed' => 'Un crédit de :amount a été vu par le client :client.', 'reset_password_text' => 'Saisissez votre adresse courriel pour réinitialiser votre mot de passe.', 'password_reset' => 'Réinitialisation du mot de passe', - 'account_login_text' => 'Accueillir! Content de te voir.', + 'account_login_text' => 'Bienvenue ! Content de vous voir.', 'request_cancellation' => 'Annuler la demande', 'delete_payment_method' => 'Supprimer le mode de paiement', 'about_to_delete_payment_method' => 'Le mode de paiement sera supprimé', @@ -3908,9 +3911,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'permanently_remove_payment_method' => 'Supprimer de façon définitive ce mode de paiement', 'warning_action_cannot_be_reversed' => 'Avertissement! Cette action ne peut être annulée!', 'confirmation' => 'Confirmation', - 'list_of_quotes' => 'Soumissions', + 'list_of_quotes' => 'Offres', 'waiting_for_approval' => 'En attente d\'approbation', - 'quote_still_not_approved' => 'Cette soumission n\'a pas encore été approuvée', + 'quote_still_not_approved' => 'Cette offre n\'a pas encore été approuvée', 'list_of_credits' => 'Crédits', 'required_extensions' => 'Extensions requises', 'php_version' => 'Version PHP', @@ -4030,7 +4033,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'refund_without_credits' => 'Essai de remboursement d\'un paiement avec crédits jointes. Veuillez spécifier un ou des crédits valides à rembourser.', 'max_refundable_credit' => 'Essai de remboursement plus élevé que permis pour le crédit :credit. Le maximum remboursable est :amount.', 'project_client_do_not_match' => 'Partiellement non-appliquée', - 'quote_number_taken' => 'Ce numéro de soumission est déjà pris', + 'quote_number_taken' => 'Ce numéro de offre est déjà pris', 'recurring_invoice_number_taken' => 'Le numéro de facture récurrente :number est déjà pris', 'user_not_associated_with_account' => 'L\'utilisateur n\'est pas associé à ce compte', 'amounts_do_not_balance' => 'Les montants ne balancent pas correctement.', @@ -4055,8 +4058,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'invoice_license_or_environment' => 'License invalide, ou environnement :environment invalide', 'route_not_available' => 'La route n\'est pas disponible', 'invalid_design_object' => 'Objet design personnalisé invalide', - 'quote_not_found' => 'Soumission(s) introuvable(s)', - 'quote_unapprovable' => 'L\'approbation de cette soumission ne peut se faire puisqu\'elle est expirée.', + 'quote_not_found' => 'Offre(s) introuvable(s)', + 'quote_unapprovable' => 'L\'approbation de cette offre ne peut se faire puisqu\'elle est expirée.', 'scheduler_has_run' => 'Le planificateur a démarré', 'scheduler_has_never_run' => 'Le planificateur n\'a jamais démarré', 'self_update_not_available' => 'La mise à jour manuelle n\'est pas disponible sur ce système', @@ -4084,7 +4087,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'recurring_cancellation_request_body' => ':contact du client :client a demandé l\'annulation de la facture récurrente : invoice', 'hello' => 'Bonjour', 'group_documents' => 'Grouper les documents', - 'quote_approval_confirmation_label' => 'Êtes-vous certain de vouloir approuver cette soumission ?', + 'quote_approval_confirmation_label' => 'Êtes-vous certain de vouloir approuver cette offre ?', 'migration_select_company_label' => 'Sélectionnez les entreprises pour la migration', 'force_migration' => 'Forcer la migration', 'require_password_with_social_login' => 'Requiert un mot de passe avec une connexion de réseau social', @@ -4158,8 +4161,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'click_to_continue' => 'Cliquez pour continuer', 'notification_invoice_created_body' => 'La facture :invoice a été créée pour le client :client au montant de :amount.', 'notification_invoice_created_subject' => 'La facture :invoice a été créée pour :client', - 'notification_quote_created_body' => 'La soumission :invoice a été créée pour le client :client au montant de :amount.', - 'notification_quote_created_subject' => 'La soumission :invoice a été créée pour :client', + 'notification_quote_created_body' => 'L\'offre :invoice a été créée pour le client :client au montant de :amount.', + 'notification_quote_created_subject' => 'L\'offre :invoice a été créée pour :client', 'notification_credit_created_body' => 'Le crédit :invoice a été créé pour le client :client au montant de :amount.', 'notification_credit_created_subject' => 'Le crédit :invoice a été créé pour :client', 'max_companies' => 'Nombre maximum d\'entreprises migrées', @@ -4188,8 +4191,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'migration_failed_label' => 'La migration a échoué', 'migration_failed' => 'Il semble qu\'un problème se soit produit lors de la migration pour l\'entreprise suivante :', 'client_email_company_contact_label' => 'Si vous avez des questions, contactez-nous, nous sommes là pour vous aider !', - 'quote_was_approved_label' => 'Soumission approuvée', - 'quote_was_approved' => 'Nous désirons vous informer que la soumission a été approuvée.', + 'quote_was_approved_label' => 'Offre approuvée', + 'quote_was_approved' => 'Nous désirons vous informer que l\'offre a été approuvée.', 'company_import_failure_subject' => 'Erreur lors de l\'importation de :company', 'company_import_failure_body' => 'Il y a eu une erreur lors de l\'importation des données de l\'entreprise. Le message d\'erreur était:', 'recurring_invoice_due_date' => 'Date d\'échéance', @@ -4205,7 +4208,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'recurring_purchases' => 'Achat récurrent', 'you_might_be_interested_in_following' => 'Ceci pourrait vous intéresser', 'quotes_with_status_sent_can_be_approved' => 'Seulement les soumissions avant la mention envoyé peuvent être approuvé.', - 'no_quotes_available_for_download' => 'Aucune soumission disponible pour le téléchargement.', + 'no_quotes_available_for_download' => 'Aucune offre disponible pour le téléchargement.', 'copyright' => 'Droits d\'auteur', 'user_created_user' => ':user a créé :created_user à :time', 'company_deleted' => 'Entreprise supprimée', @@ -4221,7 +4224,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'lang_Latvian' => 'Letton', 'expiry_date' => 'Date d\'expiration', 'cardholder_name' => 'Nom du détenteur', - 'recurring_quote_number_taken' => 'Le numéro de soumission :number est déjà pris', + 'recurring_quote_number_taken' => 'Le numéro de offre :number est déjà pris', 'account_type' => 'Type de compte', 'locality' => 'Locality', 'checking' => 'Checking', @@ -4310,7 +4313,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'app' => 'App', 'for_best_performance' => 'For the best performance download the :app app', 'bulk_email_invoice' => 'Envoyer la facture par courriel', - 'bulk_email_quote' => 'Envoyer la soumission par courriel', + 'bulk_email_quote' => 'Envoyer l\'offre par courriel', 'bulk_email_credit' => 'Envoyer le crédit par courriel', 'removed_recurring_expense' => 'Successfully removed recurring expense', 'search_recurring_expense' => 'Search Recurring Expense', @@ -4389,11 +4392,11 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'count_session' => '1 Session', 'count_sessions' => ':count Sessions', 'invoice_created' => 'Invoice Created', - 'quote_created' => 'Soumission créé', + 'quote_created' => 'Offre créé', 'credit_created' => 'Credit Created', 'enterprise' => 'Enterprise', 'invoice_item' => 'Invoice Item', - 'quote_item' => 'Item de soumission', + 'quote_item' => 'Item de l\'offre', 'order' => 'Order', 'search_kanban' => 'Search Kanban', 'search_kanbans' => 'Search Kanban', @@ -4413,7 +4416,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'owner_upgrade_to_paid_plan' => 'The account owner can upgrade to a paid plan to enable the advanced advanced settings', 'upgrade_to_paid_plan' => 'Upgrade to a paid plan to enable the advanced settings', 'invoice_payment_terms' => 'Conditions de paiement des factures', - 'quote_valid_until' => 'Soumission valide jusqu\'au', + 'quote_valid_until' => 'Offre valide jusqu\'au', 'no_headers' => 'No Headers', 'add_header' => 'Add Header', 'remove_header' => 'Remove Header', @@ -4465,7 +4468,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'unsubscribe' => 'Unsubscribe', 'unsubscribed' => 'Unsubscribed', 'unsubscribed_text' => 'You have been removed from notifications for this document', - 'client_shipping_state' => 'Client Shipping State', + 'client_shipping_state' => 'Canton du client pour la livraison', 'client_shipping_city' => 'Client Shipping City', 'client_shipping_postal_code' => 'Client Shipping Postal Code', 'client_shipping_country' => 'Client Shipping Country', @@ -4483,7 +4486,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'upgrade_to_add_company' => 'Upgrade your plan to add companies', 'file_saved_in_downloads_folder' => 'The file has been saved in the downloads folder', 'small' => 'Small', - 'quotes_backup_subject' => 'Vos soumissions sont prêtes pour le téléchargement', + 'quotes_backup_subject' => 'Vos offres sont prêtes pour le téléchargement', 'credits_backup_subject' => 'Your credits are ready for download', 'document_download_subject' => 'Your documents are ready for download', 'reminder_message' => 'Reminder for invoice :number for :balance', @@ -4506,8 +4509,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'upgrade_to_view_reports' => 'Upgrade your plan to view reports', 'started_tasks' => ':value interventions ont été démarrées avec succès', 'stopped_tasks' => ':value interventions ont été arretées avec succès', - 'approved_quote' => 'Soumission approuvé avec succès', - 'approved_quotes' => ':value soumissions approuvé avec succès', + 'approved_quote' => 'Offre approuvé avec succès', + 'approved_quotes' => ':value offres approuvés avec succès', 'client_website' => 'Client Website', 'invalid_time' => 'Invalid Time', 'signed_in_as' => 'Signed in as', @@ -4541,15 +4544,15 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'show_product_description' => 'Show Product Description', 'show_product_description_help' => 'Include the description in the product dropdown', 'invoice_items' => 'Invoice Items', - 'quote_items' => 'Items de soumission', + 'quote_items' => 'Items de offre', 'profitloss' => 'Profit and Loss', 'import_format' => 'Import Format', 'export_format' => 'Export Format', 'export_type' => 'Export Type', 'stop_on_unpaid' => 'Stop On Unpaid', 'stop_on_unpaid_help' => 'Stop creating recurring invoices if the last invoice is unpaid.', - 'use_quote_terms' => 'Utiliser les termes de la soumission', - 'use_quote_terms_help' => 'Lors de la conversion d\'une soumission en facture', + 'use_quote_terms' => 'Utiliser les termes de l\'offre', + 'use_quote_terms_help' => 'Lors de la conversion d\'une offre en facture', 'add_country' => 'Add Country', 'enable_tooltips' => 'Enable Tooltips', 'enable_tooltips_help' => 'Show tooltips when hovering the mouse', @@ -4578,7 +4581,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'purchase_order_number_placeholder' => 'Bon de commande # :purchase_order', 'accepted' => 'Accepted', 'activity_137' => ':contact a accepté le bon de commande :purchase_order', - 'vendor_information' => 'Vendor Information', + 'vendor_information' => 'Information du fournisseur', 'notification_purchase_order_accepted_subject' => 'Le bon de commande :purchase_order a été accepté par :vendor', 'notification_purchase_order_accepted' => 'Le fournisseur :vendor a accepté le bon de commande :purchase_order au montant de :amount.', 'amount_received' => 'Amount received', @@ -4588,25 +4591,25 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'added_purchase_order_to_inventory' => 'Le bon de commande a été ajouté à l\'inventaire', 'added_purchase_orders_to_inventory' => 'Les bons de commande ont été ajoutés à l\'inventaire', 'client_document_upload' => 'Client Document Upload', - 'vendor_document_upload' => 'Vendor Document Upload', - 'vendor_document_upload_help' => 'Enable vendors to upload documents', + 'vendor_document_upload' => 'Téléchargement du document du fournisseur', + 'vendor_document_upload_help' => 'Activer l\'envoi de documents par les fournisseurs', 'are_you_enjoying_the_app' => 'Are you enjoying the app?', 'yes_its_great' => 'Oui c'est super!', 'not_so_much' => 'Not so much', 'would_you_rate_it' => 'Great to hear! Would you like to rate it?', 'would_you_tell_us_more' => 'Sorry to hear it! Would you like to tell us more?', - 'sure_happy_to' => 'Sure, happy to', + 'sure_happy_to' => 'Bien sûr, avec joie', 'no_not_now' => 'No, not now', 'add' => 'Add', 'last_sent_template' => 'Last Sent Template', 'enable_flexible_search' => 'Enable Flexible Search', 'enable_flexible_search_help' => 'Match non-contiguous characters, ie. "ct" matches "cat"', - 'vendor_details' => 'Vendor Details', + 'vendor_details' => 'Détails du fournisseur', 'purchase_order_details' => 'Détails du bon de commande', 'qr_iban' => 'QR IBAN', 'besr_id' => 'BESR ID', 'clone_to_purchase_order' => 'Clone to PO', - 'vendor_email_not_set' => 'Vendor does not have an email address set', + 'vendor_email_not_set' => 'Le fournisseur n\'a pas d\'adresse courriel', 'bulk_send_email' => 'Send Email', 'marked_purchase_order_as_sent' => 'Le bon de commande a été marqué comme envoyé', 'marked_purchase_orders_as_sent' => 'Les bons de commande ont été marqués comme envoyés', @@ -4614,7 +4617,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'accepted_purchase_orders' => 'Les bons de commande ont été acceptés', 'cancelled_purchase_order' => 'Le bon de commande a été annulé', 'cancelled_purchase_orders' => 'Les bons de commande ont été annulés', - 'please_select_a_vendor' => 'Please select a vendor', + 'please_select_a_vendor' => 'Veuillez sélectionner un fournisseur', 'purchase_order_total' => 'Total du bon de commande', 'email_purchase_order' => 'Envoyer le bon de commande par courriel', 'bulk_email_purchase_order' => 'Envoyer le bon de commande par courriel', @@ -4636,7 +4639,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'purchase_order_terms' => 'Conditions du bon de commande', 'purchase_order_footer' => 'Pied de page du bon de commande', 'require_purchase_order_signature' => 'Signature du bon de commande', - 'require_purchase_order_signature_help' => 'Require vendor to provide their signature.', + 'require_purchase_order_signature_help' => 'Requiert une signature du fournisseur.', 'new_purchase_order' => 'Nouveau bon de commande', 'edit_purchase_order' => 'Éditer le bon de commande', 'created_purchase_order' => 'Bon de commande créé', @@ -4675,7 +4678,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'received' => 'Reçu', 'converted_to_expense' => 'Successfully converted to expense', 'converted_to_expenses' => 'Successfully converted to expenses', - 'entity_removed' => 'This document has been removed, please contact the vendor for further information', + 'entity_removed' => 'Ce document a été retiré. Veuille contacter le fournisseur pour plus d\'information', 'entity_removed_title' => 'Document no longer available', 'field' => 'Champ', 'period' => 'Period', @@ -4684,9 +4687,9 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'total_outstanding_invoices' => 'Factures impayées', 'total_completed_payments' => 'Paiements reçus', 'total_refunded_payments' => 'Paiements remboursés', - 'total_active_quotes' => 'Soumissions en cours', - 'total_approved_quotes' => 'Soumissions approuvées', - 'total_unapproved_quotes' => 'Soumissions non approuvées', + 'total_active_quotes' => 'Offres en cours', + 'total_approved_quotes' => 'Offres approuvées', + 'total_unapproved_quotes' => 'Offres non approuvées', 'total_logged_tasks' => 'Interventions enregistrées', 'total_invoiced_tasks' => 'Interventions facturées', 'total_paid_tasks' => 'Interventions payées', @@ -4712,7 +4715,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'php81_required' => 'Note: v5.5 requiert PHP 8.1', 'bulk_email_purchase_orders' => 'Envoyer les bons de commande par courriel', 'bulk_email_invoices' => 'Envoyer les factures par courriel', - 'bulk_email_quotes' => 'Envoyer les soumissions par courriel', + 'bulk_email_quotes' => 'Envoyer les offres par courriel', 'bulk_email_credits' => 'Envoyer les crédits par courriel', 'archive_purchase_order' => 'Archiver le bon de commande', 'restore_purchase_order' => 'Restaurer le bon de commande', @@ -4733,7 +4736,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'category_type' => 'Category Type', 'bank_transaction' => 'Transaction', 'bulk_print' => 'Print PDF', - 'vendor_postal_code' => 'Vendor Postal Code', + 'vendor_postal_code' => 'Code postal du fournisseur', 'preview_location' => 'Preview Location', 'bottom' => 'Bottom', 'side' => 'Side', @@ -4743,7 +4746,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'would_you_rate_the_app' => 'Would you like to rate the app?', 'include_deleted' => 'Include Deleted', 'include_deleted_help' => 'Include deleted records in reports', - 'due_on' => 'Due On', + 'due_on' => 'Due le', 'browser_pdf_viewer' => 'Use Browser PDF Viewer', 'browser_pdf_viewer_help' => 'Warning: Prevents interacting with app over the PDF', 'converted_transactions' => 'Successfully converted transactions', @@ -4784,8 +4787,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'enable_applying_payments_later' => 'Activer la fonction \'Appliquer les paiements plus tard\'', 'line_item_tax_rates' => 'Line Item Tax Rates', 'show_tasks_in_client_portal' => 'Montrer les interventions sur l\'epace client', - 'notification_quote_expired_subject' => 'La soumission :invoice a expiré pour :client', - 'notification_quote_expired' => 'La soumission :invoice pour le client :client au montant de :amount est expirée', + 'notification_quote_expired_subject' => 'L\'offre :invoice a expiré pour :client', + 'notification_quote_expired' => 'L\'offre :invoice pour le client :client au montant de :amount est expirée', 'auto_sync' => 'Auto Sync', 'refresh_accounts' => 'Refresh Accounts', 'upgrade_to_connect_bank_account' => 'Upgrade to Enterprise to connect your bank account', @@ -4854,7 +4857,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'notification_purchase_order_created_subject' => 'Le bon de commande :purchase_order a été créé pour :vendor', 'notification_purchase_order_sent_subject' => 'Le bon de commande :purchase_order a été envoyé à :vendor', 'notification_purchase_order_sent' => 'Le bon de commande :purchase_order au montant de :amount a été envoyé par courriel à :vendor', - 'subscription_blocked' => 'This product is a restricted item, please contact the vendor for further information.', + 'subscription_blocked' => 'Ce produit est un article réservé. Veuillez contacter le fournisseur pour plus d\'information.', 'subscription_blocked_title' => 'Produit non disponible.', 'purchase_order_created' => 'Bon de commande créé', 'purchase_order_sent' => 'Bon de commande envoyé', @@ -4918,7 +4921,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'create_purchase_order' => 'Créer un bon de commande', 'update_purchase_order' => 'Modifier le bon de commande', 'sent_invoice' => 'Sent Invoice', - 'sent_quote' => 'Sent Quote', + 'sent_quote' => 'Offre envoyée', 'sent_credit' => 'Sent Credit', 'sent_purchase_order' => 'Envoyer le bon de commande', 'image_url' => 'Image URL', @@ -4931,7 +4934,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'view_all' => 'View All', 'edit_all' => 'Edit All', 'accept_purchase_order_number' => 'Accepter le numéro de bon de commande', - 'accept_purchase_order_number_help' => 'Enable clients to provide a PO number when approving a quote', + 'accept_purchase_order_number_help' => 'Autorise les clients à fournir un numéro de bon de commande lors de l\'approbation d\'une offre', 'from_email' => 'From Email', 'show_preview' => 'Show Preview', 'show_paid_stamp' => 'Show Paid Stamp', @@ -4944,7 +4947,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Paiement sans facture d\'un montant de :amount pour le client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -4975,7 +4978,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'minimum_payment_amount' => 'Montant minimum de paiement', 'client_initiated_payments' => 'Paiements initiés par le client', 'client_initiated_payments_help' => 'Assistance pour effectuer un paiement dans le portail client sans facture', - 'share_invoice_quote_columns' => 'Share Invoice/Quote Columns', + 'share_invoice_quote_columns' => 'Partager les colonnes facture/offre', 'cc_email' => 'CC Email', 'payment_balance' => 'Solde de paiement', 'view_report_permission' => 'Allow user to access the reports, data is limited to available permissions', @@ -5010,8 +5013,8 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'show_task_item_description_help' => 'Activer les descriptions pour les éléments d\'intervention', 'email_record' => 'Email Record', 'invoice_product_columns' => 'Invoice Product Columns', - 'quote_product_columns' => 'Quote Product Columns', - 'vendors' => 'Vendors', + 'quote_product_columns' => 'Colonnes de produits pour offre', + 'vendors' => 'Fournisseurs', 'product_sales' => 'Product Sales', 'user_sales_report_header' => 'Rapport sur les ventes des utilisateurs pour le ou les clients :client de :start_date à :end_date', 'client_balance_report' => 'Rapport sur le solde du client', @@ -5090,7 +5093,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'certificate_passphrase' => 'Phrase de passe du certificat', 'valid_vat_number' => 'Numéro de TVA valide', 'react_notification_link' => 'Liens de notification de réaction', - 'react_notification_link_help' => 'Les e-mails d'administration contiendront des liens vers l'application de réaction', + 'react_notification_link_help' => 'Les e-mails d'administration contiendront des liens vers l'application de réaction', 'show_task_billable' => 'Afficher la tâche facturable', 'credit_item' => 'Article de crédit', 'drop_file_here' => 'Déposez le fichier ici', @@ -5098,7 +5101,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'camera' => 'Caméra', 'gallery' => 'Galerie', 'project_location' => 'Emplacement du projet', - 'add_gateway_help_message' => 'Ajoutez une passerelle de paiement (c.-à-d. Stripe, WePay ou PayPal) pour accepter les paiements en ligne', + 'add_gateway_help_message' => 'Ajoutez une passerelle de paiement (c.-à-d. Stripe, WePay ou PayPal) pour accepter les paiements en ligne', 'lang_Hungarian' => 'hongrois', 'use_mobile_to_manage_plan' => 'Utilisez les paramètres de votre abonnement téléphonique pour gérer votre forfait', 'item_tax3' => 'Taxe sur les articles3', @@ -5111,10 +5114,45 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'admin_initiated_payments_help' => 'Prise en charge de la saisie d'un paiement dans le portail d'administration sans facture', 'paid_date' => 'La date de paiement', 'downloaded_entities' => 'Un email sera envoyé avec les PDF', + 'lang_French - Swiss' => 'Français - Suisse', + 'currency_swazi_lilangeni' => 'Lilangeni Eswatinien', + 'income' => 'Revenu', + 'amount_received_help' => 'Saisissez une valeur si le montant total reçu été PLUS élevé que le montant de la facture, ou lors de l\'enregistrement d\'un paiement sans factures. Sinon, ce champ devrait rester vide.', + 'vendor_phone' => 'Téléphone du fournisseur', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'La date de paiement', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', ); - return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/he/texts.php b/lang/he/texts.php index efbff82e753a..7e9191dbd26e 100644 --- a/lang/he/texts.php +++ b/lang/he/texts.php @@ -2396,6 +2396,9 @@ $LANG = array( 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'דולר בליזי', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'We hope you\'re enjoying using the app.
    If you\'d consider :link we\'d greatly appreciate it!', 'writing_a_review' => 'writing a review', @@ -3331,9 +3334,9 @@ $LANG = array( 'freq_three_years' => 'שלוש שנים', 'military_time_help' => 'תצוגה של 24 שעות', 'click_here_capital' => 'לחץ כאן', - 'marked_invoice_as_paid' => 'חשבונית סומנה כנשלחה בהצלחה', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'חשבוניות סומנו כנשלחה בהצלחה', - 'marked_invoices_as_paid' => 'חשבוניות סומנו כנשלחה בהצלחה', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'שליחת חשבונית בדוא"ל נכשלה :invoice', 'custom_value3' => 'ערך מותאם אישית 3', 'custom_value4' => 'ערך מותאם אישית 4', @@ -4944,7 +4947,7 @@ $LANG = array( 'sync_from' => 'סנכרון מאת', 'gateway_payment_text' => 'חשבוניות: :invoices עבור :amount עבור הלקוח :client', 'gateway_payment_text_no_invoice' => 'תשלום ללא חשבונית עבור סכום :amount עבור הלקוח :client', - 'click_to_variables' => 'לקוח כאן כדי לראות את כל המשתנים.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'לשלוח ל', 'stripe_direct_debit_details' => 'נא להעביר לחשבון הבנק הנקוב לעיל.', 'branch_name' => 'שם הסניף', @@ -5090,7 +5093,7 @@ $LANG = array( 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5098,7 +5101,7 @@ $LANG = array( 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5106,9 +5109,50 @@ $LANG = array( 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/hu/texts.php b/lang/hu/texts.php index e2d99dfe025c..73def072d667 100644 --- a/lang/hu/texts.php +++ b/lang/hu/texts.php @@ -2381,6 +2381,9 @@ adva :date', 'currency_cuban_peso' => 'Kubai peso', 'currency_bz_dollar' => 'Beliz-i dollár', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Segítség az értékeléshez', 'writing_a_review' => 'Értékelés írása', @@ -3316,9 +3319,9 @@ adva :date', 'freq_three_years' => '3 év', 'military_time_help' => 'Ha engedélyezve van, a rendszer a katonai időformátumot használja (óra:perc helyett óra:perc am/pm formátumban).', 'click_here_capital' => 'KATTINTSON IDE', - 'marked_invoice_as_paid' => 'Számla fizetettként jelölve', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Számlák elküldöttként jelölve', - 'marked_invoices_as_paid' => 'Számlák fizetettként jelölve', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => '57. tevékenység', 'custom_value3' => 'Egyéni érték 3', 'custom_value4' => 'Egyéni érték 4', @@ -4929,7 +4932,7 @@ adva :date', 'sync_from' => 'szinkronizálás forrásából', 'gateway_payment_text' => 'fizetési szöveg a fizetési átjárón keresztül', 'gateway_payment_text_no_invoice' => 'fizetési szöveg a fizetési átjárón keresztül (nincs számla)', - 'click_to_variables' => 'kattintson a változókhoz', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'szállítási cím', 'stripe_direct_debit_details' => 'Stripe közvetlen terhelés részletei', 'branch_name' => 'fiók neve', @@ -5075,7 +5078,7 @@ adva :date', 'certificate_passphrase' => 'tanúsítvány jelszava', 'valid_vat_number' => 'érvényes ÁFA-szám', 'react_notification_link' => 'React értesítési link', - 'react_notification_link_help' => 'segítség a React értesítési linkhez', + 'react_notification_link_help' => 'segítség a React értesítési linkhez', 'show_task_billable' => 'feladatok díjkötelesek megjelenítése', 'credit_item' => 'hitel tétel', 'drop_file_here' => 'dobd ide a fájlt', @@ -5083,7 +5086,7 @@ adva :date', 'camera' => 'kamera', 'gallery' => 'galéria', 'project_location' => 'projekt helyszíne', - 'add_gateway_help_message' => 'segítség az átjáró hozzáadásához', + 'add_gateway_help_message' => 'segítség az átjáró hozzáadásához', 'lang_Hungarian' => 'Magyar', 'use_mobile_to_manage_plan' => 'Használja telefonos előfizetési beállításait a csomag kezeléséhez', 'item_tax3' => 'Item Tax3', @@ -5091,9 +5094,50 @@ adva :date', 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/it/texts.php b/lang/it/texts.php index 13eeaefb98ee..c8f85207593b 100644 --- a/lang/it/texts.php +++ b/lang/it/texts.php @@ -2389,6 +2389,9 @@ $LANG = array( 'currency_cuban_peso' => 'peso cubano', 'currency_bz_dollar' => 'Dollaro BZ', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Ci auguriamo che ti piaccia usare l'app.
    Se prendessi in considerazione :link lo apprezzeremmo molto!', 'writing_a_review' => 'scrivendo una recensione', @@ -3324,9 +3327,9 @@ $LANG = array( 'freq_three_years' => 'Tre anni', 'military_time_help' => 'Formato 24 ore', 'click_here_capital' => 'Clicca qui', - 'marked_invoice_as_paid' => 'Fattura contrassegnata con successo come inviata', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Fatture contrassegnate con successo come inviate', - 'marked_invoices_as_paid' => 'Fatture contrassegnate con successo come inviate', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Il sistema non è riuscito a inviare la fattura :invoice via e-mail', 'custom_value3' => 'Valore Personalizzato 3', 'custom_value4' => 'Valore Personalizzato 4', @@ -4937,7 +4940,7 @@ $LANG = array( 'sync_from' => 'Sincronizza da', 'gateway_payment_text' => 'Fatture: :invoices per :amount per cliente :client', 'gateway_payment_text_no_invoice' => 'Pagamento senza fattura per importo :amount per cliente :client', - 'click_to_variables' => 'Cliente qui per vedere tutte le variabili.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Spedire a', 'stripe_direct_debit_details' => 'Si prega di trasferire sul conto bancario indicato sopra.', 'branch_name' => 'Nome ramo', @@ -5083,7 +5086,7 @@ $LANG = array( 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5091,7 +5094,7 @@ $LANG = array( 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5099,9 +5102,50 @@ $LANG = array( 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/km_KH/texts.php b/lang/km_KH/texts.php index 34cb9aa3f483..6de510f5e6c5 100644 --- a/lang/km_KH/texts.php +++ b/lang/km_KH/texts.php @@ -2377,6 +2377,9 @@ $LANG = array( 'currency_cuban_peso' => 'ប្រាក់ប៉េសូគុយបា', 'currency_bz_dollar' => 'ដុល្លារ BZ', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'យើងសង្ឃឹមថាអ្នករីករាយនឹងការប្រើប្រាស់កម្មវិធី។
    ប្រសិនបើអ្នកនឹងពិចារណា :link យើងនឹងកោតសរសើរវាយ៉ាងខ្លាំង!', 'writing_a_review' => 'សរសេរការពិនិត្យឡើងវិញ', @@ -3312,9 +3315,9 @@ $LANG = array( 'freq_three_years' => 'បី​ឆ្នាំ', 'military_time_help' => 'ការបង្ហាញ 24 ម៉ោង។', 'click_here_capital' => 'ចុច​ទីនេះ', - 'marked_invoice_as_paid' => 'បានសម្គាល់វិក្កយបត្រដោយជោគជ័យថាបានផ្ញើ', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'បានសម្គាល់វិក្កយបត្រដោយជោគជ័យថាបានផ្ញើ', - 'marked_invoices_as_paid' => 'បានសម្គាល់វិក្កយបត្រដោយជោគជ័យថាបានផ្ញើ', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'ប្រព័ន្ធបានបរាជ័យក្នុងការផ្ញើអ៊ីមែលវិក្កយបត្រ :invoice', 'custom_value3' => 'តម្លៃផ្ទាល់ខ្លួន 3', 'custom_value4' => 'តម្លៃផ្ទាល់ខ្លួន ៤', @@ -4925,7 +4928,7 @@ $LANG = array( 'sync_from' => 'ធ្វើសមកាលកម្មពី', 'gateway_payment_text' => 'វិក្កយបត្រ៖ :invoices សម្រាប់ :amount សម្រាប់អតិថិជន :client', 'gateway_payment_text_no_invoice' => 'ការទូទាត់ដោយគ្មានវិក្កយបត្រសម្រាប់ចំនួនទឹកប្រាក់ :amount សម្រាប់អតិថិជន :client', - 'click_to_variables' => 'អតិថិជននៅទីនេះដើម្បីមើលអថេរទាំងអស់។', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'ផ្ញើ​ទៅ', 'stripe_direct_debit_details' => 'សូមផ្ទេរទៅគណនីធនាគារដែលបានតែងតាំងខាងលើ។', 'branch_name' => 'ឈ្មោះសាខា', @@ -5071,7 +5074,7 @@ $LANG = array( 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5079,7 +5082,7 @@ $LANG = array( 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5087,9 +5090,50 @@ $LANG = array( 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/nb_NO/texts.php b/lang/nb_NO/texts.php index c74cc5ae23c2..2fa4f19a9000 100644 --- a/lang/nb_NO/texts.php +++ b/lang/nb_NO/texts.php @@ -33,8 +33,8 @@ $LANG = array( 'po_number_short' => 'Ordre #', 'frequency_id' => 'Frekvens', 'discount' => 'Rabatter:', - 'taxes' => 'Skatter', - 'tax' => 'Skatt', + 'taxes' => 'Mva.', + 'tax' => 'Mva.', 'item' => 'Produkt', 'description' => 'Beskrivelse', 'unit_cost' => 'Stykkpris', @@ -47,7 +47,7 @@ $LANG = array( 'invoice_design_id' => 'Design', 'terms' => 'Vilkår', 'your_invoice' => 'Din faktura', - 'remove_contact' => 'Fjern kontakt', + 'remove_contact' => 'Slett kontakt', 'add_contact' => 'Legg til kontakt', 'create_new_client' => 'Opprett ny kunde', 'edit_client_details' => 'Endre kundedetaljer', @@ -253,7 +253,7 @@ $LANG = array( 'notification_invoice_paid' => 'En betaling pålydende :amount ble gjort av :client for faktura :invoice.', 'notification_invoice_sent' => 'E-post har blitt sendt til :client - Faktura :invoice pålydende :amount.', 'notification_invoice_viewed' => ':client har nå sett faktura :invoice pålydende :amount.', - 'stripe_payment_text' => 'Invoice :invoicenumber for :amount for client :client', + 'stripe_payment_text' => 'Faktura :invoice nummer for :amountfor kunde :client', 'stripe_payment_text_without_invoice' => 'Payment with no invoice for amount :amount for client :client', 'reset_password' => 'Du kan nullstille ditt passord ved å besøke følgende lenke:', 'secure_payment' => 'Sikker betaling', @@ -754,7 +754,7 @@ $LANG = array( 'activity_7' => ':contact har sett fakturaen :invoice for :client', 'activity_8' => ':user arkiverte faktura :invoice', 'activity_9' => ':user slettet faktura :invoice', - 'activity_10' => ':user la inn betaling :payment på :payment_amount', + 'activity_10' => ':user entered payment :payment for :payment_amount on invoice :invoice for :client', 'activity_11' => ':user oppdaterte betaling :payment', 'activity_12' => ':user arkiverte betaling :payment', 'activity_13' => ':user slettet betaling :payment', @@ -1067,7 +1067,7 @@ $LANG = array( 'invoice_item_fields' => 'Invoice Item Fields', 'custom_invoice_item_fields_help' => 'Add a field when creating an invoice item and display the label and value on the PDF.', 'recurring_invoice_number' => 'Gjentakende nummer', - 'recurring_invoice_number_prefix_help' => 'Specify a prefix to be added to the invoice number for recurring invoices.', + 'recurring_invoice_number_prefix_help' => 'Angi et prefiks som skal legges til fakturanummeret for gjentagende fakturaer.', // Client Passwords 'enable_portal_password' => 'Passord-beskytt fakturaer', @@ -1249,7 +1249,7 @@ $LANG = array( 'country_not_supported' => 'Landet er ikke støttet.', 'invalid_routing_number' => 'Rutingsnummeret er ikke gyldig.', 'invalid_account_number' => 'Kontonummeret er ikke gyldig.', - 'account_number_mismatch' => 'The account numbers do not match.', + 'account_number_mismatch' => 'Kontonumrene stemmer ikke overens.', 'missing_account_holder_type' => 'Please select an individual or company account.', 'missing_account_holder_name' => 'Please enter the account holder\'s name.', 'routing_number' => 'Routing Number', @@ -1806,7 +1806,7 @@ $LANG = array( 'limit_import_rows' => 'Data needs to be imported in batches of :count rows or less', 'error_title' => 'Noe gikk galt', 'error_contact_text' => 'If you\'d like help please email us at :mailaddress', - 'no_undo' => 'Warning: this can\'t be undone.', + 'no_undo' => 'Advarsel: Dette kan ikke angres', 'no_contact_selected' => 'Vennligst velg en kontakt', 'no_client_selected' => 'Vennligst velg en klient', @@ -2000,6 +2000,7 @@ $LANG = array( 'current_quarter' => 'Current Quarter', 'last_quarter' => 'Last Quarter', 'last_year' => 'Siste år', + 'all_time' => 'All Time', 'custom_range' => 'Tilpass Utvalg', 'url' => 'URL', 'debug' => 'Debug', @@ -2259,7 +2260,7 @@ $LANG = array( 'restore_recurring_expense' => 'Restore Recurring Expense', 'restored_recurring_expense' => 'Successfully restored recurring expense', 'delete_recurring_expense' => 'Delete Recurring Expense', - 'deleted_recurring_expense' => 'Successfully deleted project', + 'deleted_recurring_expense' => 'Successfully deleted recurring expense', 'view_recurring_expense' => 'Vis Gjentakende Utgift', 'taxes_and_fees' => 'Skatt og avgifter', 'import_failed' => 'Import Failed', @@ -2403,6 +2404,9 @@ $LANG = array( 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'We hope you\'re enjoying using the app.
    If you\'d consider :link we\'d greatly appreciate it!', 'writing_a_review' => 'skriv tilbakemelding', @@ -2514,8 +2518,8 @@ $LANG = array( 'partial_due_date' => 'Partial Due Date', 'task_fields' => 'Task Fields', 'product_fields_help' => 'Drag and drop fields to change their order', - 'custom_value1' => 'Custom Value', - 'custom_value2' => 'Custom Value', + 'custom_value1' => 'Custom Value 1', + 'custom_value2' => 'Custom Value 2', 'enable_two_factor' => 'To-faktor-autentisering', 'enable_two_factor_help' => 'Bruk telefonen til å bekrefte identiteten din når du logger inn', 'two_factor_setup' => 'Two-Factor Setup', @@ -2639,7 +2643,7 @@ $LANG = array( 'convert_products' => 'Convert Products', 'convert_products_help' => 'Automatically convert product prices to the client\'s currency', 'improve_client_portal_link' => 'Set a subdomain to shorten the client portal link.', - 'budgeted_hours' => 'Budgeted Hours', + 'budgeted_hours' => 'Utbetalte timer', 'progress' => 'Progress', 'view_project' => 'Vis Prosjekt', 'summary' => 'Summary', @@ -2855,7 +2859,7 @@ $LANG = array( 'please_enter_your_url' => 'Please enter your URL', 'please_enter_a_product_key' => 'Please enter a product key', 'an_error_occurred' => 'An error occurred', - 'overview' => 'Overview', + 'overview' => 'Oversikt', 'copied_to_clipboard' => 'Copied :value to the clipboard', 'error' => 'Error', 'could_not_launch' => 'Could not launch', @@ -3260,7 +3264,7 @@ $LANG = array( 'group2' => 'Custom Group 2', 'group3' => 'Custom Group 3', 'group4' => 'Custom Group 4', - 'number' => 'Number', + 'number' => 'Nummer', 'count' => 'Count', 'is_active' => 'Is Active', 'contact_last_login' => 'Contact Last Login', @@ -3338,9 +3342,9 @@ $LANG = array( 'freq_three_years' => 'Three Years', 'military_time_help' => '24 Hour Display', 'click_here_capital' => 'Click here', - 'marked_invoice_as_paid' => 'Successfully marked invoice as sent', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Successfully marked invoices as sent', - 'marked_invoices_as_paid' => 'Successfully marked invoices as sent', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'System failed to email invoice :invoice', 'custom_value3' => 'Custom Value 3', 'custom_value4' => 'Custom Value 4', @@ -3501,23 +3505,23 @@ $LANG = array( 'hide_menu' => 'Hide Menu', 'show_menu' => 'Show Menu', 'partially_refunded' => 'Partially Refunded', - 'search_documents' => 'Search Documents', - 'search_designs' => 'Search Designs', - 'search_invoices' => 'Search Invoices', - 'search_clients' => 'Search Clients', - 'search_products' => 'Search Products', - 'search_quotes' => 'Search Quotes', + 'search_documents' => 'Søk i Dokumenter', + 'search_designs' => 'Søk i Designs', + 'search_invoices' => 'Søk i Fakturaer', + 'search_clients' => 'Søk i Kunder', + 'search_products' => 'Søk i Produkter', + 'search_quotes' => 'Søk i Pristilbuder', 'search_credits' => 'Search Credits', - 'search_vendors' => 'Search Vendors', - 'search_users' => 'Search Users', - 'search_tax_rates' => 'Search Tax Rates', - 'search_tasks' => 'Search Tasks', - 'search_settings' => 'Search Settings', - 'search_projects' => 'Search Projects', - 'search_expenses' => 'Search Expenses', - 'search_payments' => 'Search Payments', - 'search_groups' => 'Search Groups', - 'search_company' => 'Search Company', + 'search_vendors' => 'Søk i Leverandører', + 'search_users' => 'Søk i Brukere', + 'search_tax_rates' => 'Søk i Mva. Satser', + 'search_tasks' => 'Søk i Oppgaver', + 'search_settings' => 'Søk i Instillinger', + 'search_projects' => 'Søk i Prosjekter', + 'search_expenses' => 'Søk i Utgifter', + 'search_payments' => 'Søk i Betalinger', + 'search_groups' => 'Søk i Grupper', + 'search_company' => 'Søk i Selskaper', 'cancelled_invoice' => 'Successfully cancelled invoice', 'cancelled_invoices' => 'Successfully cancelled invoices', 'reversed_invoice' => 'Successfully reversed invoice', @@ -3862,7 +3866,7 @@ $LANG = array( 'notification_credit_viewed' => 'The following client :client viewed Credit :credit for :amount.', 'reset_password_text' => 'Enter your email to reset your password.', 'password_reset' => 'Password reset', - 'account_login_text' => 'Welcome back! Glad to see you.', + 'account_login_text' => 'Welcome! Glad to see you.', 'request_cancellation' => 'Request cancellation', 'delete_payment_method' => 'Delete Payment Method', 'about_to_delete_payment_method' => 'You are about to delete the payment method.', @@ -3976,7 +3980,7 @@ $LANG = array( 'add_payment_method_first' => 'add payment method', 'no_items_selected' => 'No items selected.', 'payment_due' => 'Payment due', - 'account_balance' => 'Account balance', + 'account_balance' => 'Account Balance', 'thanks' => 'Thanks', 'minimum_required_payment' => 'Minimum required payment is :amount', 'under_payments_disabled' => 'Company doesn\'t support under payments.', @@ -4460,7 +4464,7 @@ $LANG = array( 'wait_for_loading' => 'Data loading - please wait for it to complete', 'wait_for_saving' => 'Data saving - please wait for it to complete', 'html_preview_warning' => 'Note: changes made here are only previewed, they must be applied in the tabs above to be saved', - 'remaining' => 'Remaining', + 'remaining' => 'Gjenstår', 'invoice_paid' => 'Invoice Paid', 'activity_120' => ':user created recurring expense :recurring_expense', 'activity_121' => ':user updated recurring expense :recurring_expense', @@ -4907,6 +4911,7 @@ $LANG = array( 'all_clients' => 'All Clients', 'show_aging_table' => 'Show Aging Table', 'show_payments_table' => 'Show Payments Table', + 'only_clients_with_invoices' => 'Only Clients with Invoices', 'email_statement' => 'Email Statement', 'once' => 'Once', 'schedules' => 'Schedules', @@ -4950,7 +4955,7 @@ $LANG = array( 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5040,7 +5045,7 @@ $LANG = array( 'link_expenses' => 'Link Expenses', 'converted_client_balance' => 'Converted Client Balance', 'converted_payment_balance' => 'Converted Payment Balance', - 'total_hours' => 'Total Hours', + 'total_hours' => 'Totalt antall timer', 'date_picker_hint' => 'Use +days to set the date in the future', 'app_help_link' => 'More information ', 'here' => 'here', @@ -5095,9 +5100,67 @@ $LANG = array( 'upload_certificate' => 'Upload Certificate', 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', -); + 'react_notification_link' => 'React Notification Links', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'show_task_billable' => 'Show Task Billable', + 'credit_item' => 'Credit Item', + 'drop_file_here' => 'Drop file here', + 'files' => 'Files', + 'camera' => 'Camera', + 'gallery' => 'Gallery', + 'project_location' => 'Project Location', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'lang_Hungarian' => 'Hungarian', + 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', + 'item_tax3' => 'Item Tax3', + 'item_tax_rate1' => 'Item Tax Rate 1', + 'item_tax_rate2' => 'Item Tax Rate 2', + 'item_tax_rate3' => 'Item Tax Rate 3', + 'buy_price' => 'Buy Price', + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/nl/texts.php b/lang/nl/texts.php index c85440951e89..9bd77a2de0fc 100644 --- a/lang/nl/texts.php +++ b/lang/nl/texts.php @@ -2395,6 +2395,9 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'currency_cuban_peso' => 'Cubaanse Peso', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'We hopen dat je het leuk vindt om de app te gebruiken.
    Als je zou overwegen :link, zouden we dat zeer op prijs stellen!', 'writing_a_review' => 'een recensie schrijven', @@ -3330,9 +3333,9 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen 'freq_three_years' => 'Drie jaar', 'military_time_help' => '24-uurs weergave', 'click_here_capital' => 'Klik hier', - 'marked_invoice_as_paid' => 'Factuur succesvol gemarkeerd als verzonden', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Facturen gemarkeerd als verzonden', - 'marked_invoices_as_paid' => 'Facturen succesvol gemarkeerd als verzonden', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Systeem kon de factuur niet mailen :invoice', 'custom_value3' => 'Aangepaste waarde 3', 'custom_value4' => 'Aangepaste waarde 4', @@ -4946,7 +4949,7 @@ Email: :email
    ', 'sync_from' => 'Synchroniseren van', 'gateway_payment_text' => 'Facturen: :invoices voor :amount voor opdrachtgever :client', 'gateway_payment_text_no_invoice' => 'Betaling zonder factuur voor bedrag :amount voor opdrachtgever :client', - 'click_to_variables' => 'Client hier om alle variabelen te zien.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Verzend naar', 'stripe_direct_debit_details' => 'Gelieve over te maken op de genoemde bankrekening hierboven.', 'branch_name' => 'Filiaal naam', @@ -5092,7 +5095,7 @@ Email: :email
    ', 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5100,7 +5103,7 @@ Email: :email
    ', 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5108,9 +5111,50 @@ Email: :email
    ', 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/pt_BR/texts.php b/lang/pt_BR/texts.php index 4585f228c220..a44df7909d4a 100644 --- a/lang/pt_BR/texts.php +++ b/lang/pt_BR/texts.php @@ -2398,6 +2398,9 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'currency_cuban_peso' => 'Peso Cubano', 'currency_bz_dollar' => 'BZ Dólar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Esperamos que esteja aproveitando o app.
    Se você considerar :link agradeceríamos bastante!', 'writing_a_review' => 'Escrevendo uma avaliação', @@ -3333,9 +3336,9 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'freq_three_years' => 'Três Anos', 'military_time_help' => 'Formato de Hora 24h', 'click_here_capital' => 'Clique aqui', - 'marked_invoice_as_paid' => 'Sucesso! A fatura foi marcada como enviada.', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Faturas marcadas como enviadas com sucesso', - 'marked_invoices_as_paid' => 'Sucesso! As faturas foram marcadas como enviada.', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'O sistema falhou ao enviar a fatura :invoice', 'custom_value3' => 'Valor Personalizado 3', 'custom_value4' => 'Valor Personalizado 4', @@ -4946,7 +4949,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5092,7 +5095,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5100,7 +5103,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5116,11 +5119,42 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique " 'lang_French - Swiss' => 'French - Swiss', 'currency_swazi_lilangeni' => 'Swazi Lilangeni', 'income' => 'Income', - 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', 'vendor_phone' => 'Vendor Phone', -); + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/pt_PT/texts.php b/lang/pt_PT/texts.php index d2739f0760d1..e066f8d15dbf 100644 --- a/lang/pt_PT/texts.php +++ b/lang/pt_PT/texts.php @@ -2399,6 +2399,9 @@ Quando tiver os valores dos depósitos, volte a esta página e conclua a verific 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'BZ Dólar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Esperamos que esteja a gostar da aplicação.
    Se eventualmente considerar :link agradecíamos muito!', 'writing_a_review' => 'escrever uma avaliação', @@ -3335,9 +3338,9 @@ debitar da sua conta de acordo com essas instruções. Está elegível a um reem 'freq_three_years' => 'Três Anos', 'military_time_help' => 'Formato de Hora 24h', 'click_here_capital' => 'Clique aqui', - 'marked_invoice_as_paid' => 'Excelente! A nota de pagamento foi marcada como enviada.', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Excelente! As notas de pagamento foram marcadas como enviada.', - 'marked_invoices_as_paid' => 'Excelente! As notas de pagamento foram marcadas como enviada.', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'O sistema falhou ao enviar a nota de pagamento :invoice', 'custom_value3' => 'Valor Personalizado 3', 'custom_value4' => 'Valor Personalizado 4', @@ -4949,7 +4952,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.', 'sync_from' => 'Sincronizar de', 'gateway_payment_text' => 'Faturas: :invoices para :amount para cliente :client', 'gateway_payment_text_no_invoice' => 'Pagamento sem fatura no valor :amount para cliente :client', - 'click_to_variables' => 'Cliente aqui para ver todas as variáveis.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Enviar para', 'stripe_direct_debit_details' => 'Por favor, transfira para a conta bancária indicada acima.', 'branch_name' => 'Nome da filial', @@ -5095,7 +5098,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.', 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5103,7 +5106,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.', 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5111,9 +5114,50 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.', 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/ro/texts.php b/lang/ro/texts.php index a4da32aa8af0..874f91603bac 100644 --- a/lang/ro/texts.php +++ b/lang/ro/texts.php @@ -2406,6 +2406,9 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl 'currency_cuban_peso' => 'Peso cubanez', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Sperăm că vă place aplicația.
    Am aprecia dacă :link!', 'writing_a_review' => 'părerea dumneavoastră', @@ -3342,9 +3345,9 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl 'freq_three_years' => 'Trei ani', 'military_time_help' => 'Afișare 24 de ore', 'click_here_capital' => 'Click aici', - 'marked_invoice_as_paid' => 'Factura a fost marcată ca trimisă cu succes', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Facturile au fost marcate ca trimise cu succes', - 'marked_invoices_as_paid' => 'Facturile au fost marcate ca trimise cu succes', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Factura :invoice nu a putut fi trimisă', 'custom_value3' => 'Valoare personalizată 3', 'custom_value4' => 'Valoare personalizată 4', @@ -4955,7 +4958,7 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5101,7 +5104,7 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5109,7 +5112,7 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5117,9 +5120,50 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/sk/texts.php b/lang/sk/texts.php index 91b58b25045c..455151b9e67f 100644 --- a/lang/sk/texts.php +++ b/lang/sk/texts.php @@ -2387,6 +2387,9 @@ Nemôžete nájsť faktúru? Potrebujete poradiť? Radi Vám pomôžeme 'currency_cuban_peso' => 'Kubánske Peso', 'currency_bz_dollar' => 'BZ dolár', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Dúfame, že sa vám používanie aplikácie páči.
    Ak by ste zvážili :link, veľmi by sme to ocenili!', 'writing_a_review' => 'písanie recenzie', @@ -3322,9 +3325,9 @@ Nemôžete nájsť faktúru? Potrebujete poradiť? Radi Vám pomôžeme 'freq_three_years' => 'Tri roky', 'military_time_help' => '24-hodinové zobrazenie', 'click_here_capital' => 'Kliknite tu', - 'marked_invoice_as_paid' => 'Faktúra bola úspešne označená ako odoslaná', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Faktúry boli úspešne označené ako odoslané', - 'marked_invoices_as_paid' => 'Faktúry boli úspešne označené ako odoslané', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Systému sa nepodarilo odoslať e-mailom faktúru :invoice', 'custom_value3' => 'Vlastná hodnota 3', 'custom_value4' => 'Vlastná hodnota 4', @@ -4935,7 +4938,7 @@ Nemôžete nájsť faktúru? Potrebujete poradiť? Radi Vám pomôžeme 'sync_from' => 'Synchronizovať z', 'gateway_payment_text' => 'Faktúry: :invoices pre :amount pre klienta :client', 'gateway_payment_text_no_invoice' => 'Platba bez faktúry za sumu :amount pre klienta :client', - 'click_to_variables' => 'Klient tu zobrazí všetky premenné.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Odoslať do', 'stripe_direct_debit_details' => 'Preveďte prosím na vyššie uvedený bankový účet.', 'branch_name' => 'Meno pobočky', @@ -5081,7 +5084,7 @@ Nemôžete nájsť faktúru? Potrebujete poradiť? Radi Vám pomôžeme 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5089,7 +5092,7 @@ Nemôžete nájsť faktúru? Potrebujete poradiť? Radi Vám pomôžeme 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5097,9 +5100,50 @@ Nemôžete nájsť faktúru? Potrebujete poradiť? Radi Vám pomôžeme 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/sr/texts.php b/lang/sr/texts.php index c8d7357bd494..5cb50478aa89 100644 --- a/lang/sr/texts.php +++ b/lang/sr/texts.php @@ -2404,6 +2404,9 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k 'currency_cuban_peso' => 'Kubanski pezos', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'Nadamo se da uživate u korišćenju aplikacije.
    Bili bismo veoma zahvalni ako biste razmotrili :link.', 'writing_a_review' => 'pisanje recenzije', @@ -3339,9 +3342,9 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k 'freq_three_years' => 'Tri godine', 'military_time_help' => '24-časovni prikaz', 'click_here_capital' => 'Kliknite ovde', - 'marked_invoice_as_paid' => 'Račun je uspešno označen kao poslat', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Računi su uspešno označeni kao poslati', - 'marked_invoices_as_paid' => 'Računi su uspešno označeni kao poslati', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Sistem nije uspeo da pošalje račun e-poštom :invoice', 'custom_value3' => 'Prilagođena Vrednost 3', 'custom_value4' => 'Prilagođena Vrednost 4', @@ -4952,7 +4955,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5098,7 +5101,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5106,7 +5109,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5114,9 +5117,50 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/lang/sv/texts.php b/lang/sv/texts.php index 0daec1985485..024ac7b64273 100644 --- a/lang/sv/texts.php +++ b/lang/sv/texts.php @@ -2411,6 +2411,9 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k 'currency_cuban_peso' => 'Cuban Peso', 'currency_bz_dollar' => 'BZ Dollar', + 'currency_libyan_dinar' => 'Libyan Dinar', + 'currency_silver_troy_ounce' => 'Silver Troy Ounce', + 'currency_gold_troy_ounce' => 'Gold Troy Ounce', 'review_app_help' => 'We hope you\'re enjoying using the app.
    If you\'d consider :link we\'d greatly appreciate it!', 'writing_a_review' => 'writing a review', @@ -3346,9 +3349,9 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k 'freq_three_years' => 'Tre år', 'military_time_help' => '24-timmarsvisning', 'click_here_capital' => 'Klicka här', - 'marked_invoice_as_paid' => 'Fakturan har markerats som betalad', + 'marked_invoice_as_paid' => 'Successfully marked invoice as paid', 'marked_invoices_as_sent' => 'Fakturorna har markerats som skickade', - 'marked_invoices_as_paid' => 'Fakturorna har markerats som betalade', + 'marked_invoices_as_paid' => 'Successfully marked invoices as paid', 'activity_57' => 'Systemet kunde inte skicka fakturan via e-post :invoice', 'custom_value3' => 'Anpassat värde 3', 'custom_value4' => 'Anpassat värde 4', @@ -4959,7 +4962,7 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k 'sync_from' => 'Sync From', 'gateway_payment_text' => 'Invoices: :invoices for :amount for client :client', 'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client', - 'click_to_variables' => 'Client here to see all variables.', + 'click_to_variables' => 'Click here to see all variables.', 'ship_to' => 'Ship to', 'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.', 'branch_name' => 'Branch Name', @@ -5105,7 +5108,7 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k 'certificate_passphrase' => 'Certificate Passphrase', 'valid_vat_number' => 'Valid VAT Number', 'react_notification_link' => 'React Notification Links', - 'react_notification_link_help' => 'Admin emails will contain links to the react application', + 'react_notification_link_help' => 'Admin emails will contain links to the react application', 'show_task_billable' => 'Show Task Billable', 'credit_item' => 'Credit Item', 'drop_file_here' => 'Drop file here', @@ -5113,7 +5116,7 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k 'camera' => 'Camera', 'gallery' => 'Gallery', 'project_location' => 'Project Location', - 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', + 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments', 'lang_Hungarian' => 'Hungarian', 'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan', 'item_tax3' => 'Item Tax3', @@ -5121,9 +5124,50 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k 'item_tax_rate2' => 'Item Tax Rate 2', 'item_tax_rate3' => 'Item Tax Rate 3', 'buy_price' => 'Buy Price', -); + 'country_Macedonia' => 'Macedonia', + 'admin_initiated_payments' => 'Admin Initiated Payments', + 'admin_initiated_payments_help' => 'Support entering a payment in the admin portal without an invoice', + 'paid_date' => 'Paid Date', + 'downloaded_entities' => 'An email will be sent with the PDFs', + 'lang_French - Swiss' => 'French - Swiss', + 'currency_swazi_lilangeni' => 'Swazi Lilangeni', + 'income' => 'Income', + 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.', + 'vendor_phone' => 'Vendor Phone', + 'mercado_pago' => 'Mercado Pago', + 'mybank' => 'MyBank', + 'paypal_paylater' => 'Pay in 4', + 'paid_date' => 'Paid Date', + 'district' => 'District', + 'region' => 'Region', + 'county' => 'County', + 'tax_details' => 'Tax Details', + 'activity_10_online' => ':contact entered payment :payment for invoice :invoice for :client', + 'activity_10_manual' => ':user entered payment :payment for invoice :invoice for :client', + 'default_payment_type' => 'Default Payment Type', + 'number_precision' => 'Number precision', + 'number_precision_help' => 'Controls the number of decimals supported in the interface', + 'is_tax_exempt' => 'Tax Exempt', + 'drop_files_here' => 'Drop files here', + 'upload_files' => 'Upload Files', + 'download_e_invoice' => 'Download E-Invoice', + 'triangular_tax_info' => 'Intra-community triangular transaction', + 'intracommunity_tax_info' => 'Tax-free intra-community delivery', + 'reverse_tax_info' => 'Please note that this supply is subject to reverse charge', + 'currency_nicaraguan_cordoba' => 'Nicaraguan Córdoba', + 'public' => 'Public', + 'private' => 'Private', + 'image' => 'Image', + 'other' => 'Other', + 'linked_to' => 'Linked To', + 'file_saved_in_path' => 'The file has been saved in :path', + 'unlinked_transactions' => 'Successfully unlinked :count transactions', + 'unlinked_transaction' => 'Successfully unlinked transaction', + 'view_dashboard_permission' => 'Allow user to access the dashboard, data is limited to available permissions', + 'marked_sent_credits' => 'Successfully marked credits sent', +); return $LANG; -?> \ No newline at end of file +?> diff --git a/phpstan.neon b/phpstan.neon index 6bc4f9205594..fffe8123c3fd 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,19 +1,23 @@ includes: - ./vendor/nunomaduro/larastan/extension.neon - ./vendor/spaze/phpstan-stripe/extension.neon + - phpstan-baseline.neon parameters: level: 2 paths: - - 'app/' + - app excludePaths: - - 'vendor/' + - 'vendor/*' + - '../resources/*' + - resources/ + - resources/* - 'app/Jobs/Ninja/*' - 'app/Models/Presenters/*' - 'app/Console/Commands/*' - 'app/DataMapper/Analytics/*' - 'app/PaymentDrivers/Authorize/*' + - 'app/PaymentDrivers/AuthorizePaymentDriver.php' - 'app/Utils/Traits/*' - - 'resources/views/*' universalObjectCratesClasses: - App\DataMapper\Tax\RuleInterface - App\DataMapper\FeesAndLimits diff --git a/routes/api.php b/routes/api.php index 93a84ea8f65d..34e6c57c308b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -92,6 +92,7 @@ use App\Http\Controllers\Reports\InvoiceReportController; use App\Http\Controllers\Reports\PaymentReportController; use App\Http\Controllers\Reports\ProductReportController; use App\Http\Controllers\Reports\ProfitAndLossController; +use App\Http\Controllers\Reports\ReportPreviewController; use App\Http\Controllers\Reports\ActivityReportController; use App\Http\Controllers\Reports\ARDetailReportController; use App\Http\Controllers\Reports\DocumentReportController; @@ -312,7 +313,9 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale'] Route::post('reports/client_sales_report', ClientSalesReportController::class); Route::post('reports/tax_summary_report', TaxSummaryReportController::class); Route::post('reports/user_sales_report', UserSalesReportController::class); - + Route::post('reports/preview/{hash}', ReportPreviewController::class); + + Route::resource('task_schedulers', TaskSchedulerController::class); Route::post('task_schedulers/bulk', [TaskSchedulerController::class, 'bulk'])->name('task_schedulers.bulk'); diff --git a/tests/Feature/CompanyGatewayTest.php b/tests/Feature/CompanyGatewayTest.php index 4547ffbbc9af..cefb2baeaf97 100644 --- a/tests/Feature/CompanyGatewayTest.php +++ b/tests/Feature/CompanyGatewayTest.php @@ -47,6 +47,22 @@ class CompanyGatewayTest extends TestCase $this->assertNotNull($company_gateway); } + public function testSetConfigFields() + { + $company_gateway = CompanyGateway::first(); + + $this->assertNotNull($company_gateway->getConfig()); + + $company_gateway->setConfigField('test', 'test'); + + $this->assertEquals('test', $company_gateway->getConfigField('test')); + + $company_gateway->setConfigField('signatureKey', 'hero'); + + $this->assertEquals('hero', $company_gateway->getConfigField('signatureKey')); + + } + public function testFeesAndLimitsExists() { $data = []; diff --git a/tests/Feature/DocumentsApiTest.php b/tests/Feature/DocumentsApiTest.php index a7ad93e5a67b..6d474df51c45 100644 --- a/tests/Feature/DocumentsApiTest.php +++ b/tests/Feature/DocumentsApiTest.php @@ -11,12 +11,13 @@ namespace Tests\Feature; +use Tests\TestCase; +use App\Models\Document; +use Tests\MockAccountData; use App\Utils\Traits\MakesHash; use Illuminate\Database\Eloquent\Model; -use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Support\Facades\Session; -use Tests\MockAccountData; -use Tests\TestCase; +use Illuminate\Foundation\Testing\DatabaseTransactions; /** * @test @@ -28,6 +29,8 @@ class DocumentsApiTest extends TestCase use DatabaseTransactions; use MockAccountData; + protected $faker; + protected function setUp() :void { parent::setUp(); @@ -41,6 +44,126 @@ class DocumentsApiTest extends TestCase Model::reguard(); } + public function testIsPublicTypesForDocumentRequest() + { + $d = Document::factory()->create([ + 'company_id' => $this->company->id, + 'user_id' => $this->user->id, + ]); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->get("/api/v1/documents/{$d->hashed_id}"); + + $response->assertStatus(200); + + $update = [ + 'is_public' => false, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertFalse($arr['data']['is_public']); + + $update = [ + 'is_public' => true, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertTrue($arr['data']['is_public']); + + $update = [ + 'is_public' => 'true', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertTrue($arr['data']['is_public']); + + $update = [ + 'is_public' => '1', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertTrue($arr['data']['is_public']); + + $update = [ + 'is_public' => 1, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertTrue($arr['data']['is_public']); + + $update = [ + 'is_public' => 'false', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertFalse($arr['data']['is_public']); + + $update = [ + 'is_public' => '0', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertFalse($arr['data']['is_public']); + + $update = [ + 'is_public' => 0, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->putJson("/api/v1/documents/{$d->hashed_id}", $update); + + $response->assertStatus(200); + $arr = $response->json(); + $this->assertFalse($arr['data']['is_public']); + + } + public function testClientDocuments() { $response = $this->withHeaders([ diff --git a/tests/Feature/Export/ReportCsvGenerationTest.php b/tests/Feature/Export/ReportCsvGenerationTest.php index 4ae21985a610..a0ead0a357f2 100644 --- a/tests/Feature/Export/ReportCsvGenerationTest.php +++ b/tests/Feature/Export/ReportCsvGenerationTest.php @@ -70,7 +70,47 @@ class ReportCsvGenerationTest extends TestCase public $cu; - private $all_client_report_keys = ["client.name","client.user","client.assigned_user","client.balance","client.paid_to_date","client.currency_id","client.website","client.private_notes","client.industry_id","client.size_id","client.address1","client.address2","client.city","client.state","client.postal_code","client.country_id","contact.custom_value4","client.shipping_address1","client.shipping_address2","client.shipping_city","client.shipping_state","client.shipping_postal_code","client.shipping_country_id","client.payment_terms","client.vat_number","client.id_number","client.public_notes","client.phone","contact.first_name","contact.last_name","contact.email","contact.phone"]; + private $all_client_report_keys = [ + "client.name", + "client.user", + "client.assigned_user", + "client.balance", + "client.address1", + "client.address2", + "client.city", + "client.country_id", + "client.currency_id", + "client.custom_value1", + "client.custom_value2", + "client.custom_value3", + "client.custom_value4", + "client.industry_id", + "client.id_number", + "client.paid_to_date", + "client.payment_terms", + "client.phone", + "client.postal_code", + "client.private_notes", + "client.public_notes", + "client.size_id", + "client.shipping_address1", + "client.shipping_address2", + "client.shipping_city", + "client.shipping_state", + "client.shipping_postal_code", + "client.shipping_country_id", + "client.state", + "client.vat_number", + "client.website", + "contact.first_name", + "contact.last_name", + "contact.email", + "contact.phone", + "contact.custom_value1", + "contact.custom_value2", + "contact.custom_value3", + "contact.custom_value4", + ]; private $all_payment_report_keys = [ 'payment.date', @@ -674,6 +714,62 @@ class ReportCsvGenerationTest extends TestCase } + public function testCreditJsonReport() + { + + Credit::factory()->create([ + 'user_id' => $this->user->id, + 'company_id' => $this->company->id, + 'client_id' => $this->client->id, + 'amount' => 100, + 'balance' => 50, + 'number' => '1234', + 'status_id' => 2, + 'discount' => 10, + 'po_number' => '1234', + 'public_notes' => 'Public', + 'private_notes' => 'Private', + 'terms' => 'Terms', + ]); + + $data = [ + 'date_range' => 'all', + 'report_keys' => ["client.name","credit.number","credit.amount","payment.date", "payment.amount"], + 'send_email' => false, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson('/api/v1/reports/credits?output=json', $data); + + + $response->assertStatus(200); + + $arr = $response->json(); + + nlog($arr['message']); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson('/api/v1/reports/preview/'.$arr['message']); + + $response->assertStatus(409); + + // sleep(1); + + // $response = $this->withHeaders([ + // 'X-API-SECRET' => config('ninja.api_secret'), + // 'X-API-TOKEN' => $this->token, + // ])->postJson('/api/v1/reports/preview/'.$arr['message']); + + // $response->assertStatus(200); + + // nlog($response->json()); + + } + public function testCreditCustomColumnsCsvGeneration() { @@ -1310,7 +1406,7 @@ class ReportCsvGenerationTest extends TestCase $response->assertStatus(200); $csv = $response->streamedContent(); - +nlog($csv); $this->assertEquals('100', $this->getFirstValueByColumn($csv, 'Amount')); $this->assertEquals('50', $this->getFirstValueByColumn($csv, 'Balance')); $this->assertEquals('10', $this->getFirstValueByColumn($csv, 'Discount')); diff --git a/tests/Feature/Export/ReportPreviewTest.php b/tests/Feature/Export/ReportPreviewTest.php new file mode 100644 index 000000000000..75516cea6e58 --- /dev/null +++ b/tests/Feature/Export/ReportPreviewTest.php @@ -0,0 +1,77 @@ +faker = \Faker\Factory::create(); + + $this->withoutMiddleware( + ThrottleRequests::class + ); + + $this->withoutExceptionHandling(); + + $this->makeTestData(); + + } + + public function testCreditExportPreview() + { + + $data = [ + 'send_email' => false, + 'date_range' => 'all', + 'report_keys' => [], + ]; + + $p = (new PreviewReport($this->company, $data, CreditExport::class, '123'))->handle(); + + $this->assertNull($p); + + } + + public function testCreditPreview() + { + $data = [ + 'send_email' => false, + 'date_range' => 'all', + 'report_keys' => [], + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson('/api/v1/reports/credits?output=json', $data) + ->assertStatus(200); + + } +} \ No newline at end of file diff --git a/tests/Feature/RecurringInvoicesCronTest.php b/tests/Feature/RecurringInvoicesCronTest.php index 5a62db9a5dd7..0e446febfe0e 100644 --- a/tests/Feature/RecurringInvoicesCronTest.php +++ b/tests/Feature/RecurringInvoicesCronTest.php @@ -46,6 +46,6 @@ class RecurringInvoicesCronTest extends TestCase $this->assertEquals(5, $recurring_invoices->count()); - $this->assertEquals(6, $recurring_all->count()); + $this->assertEquals(7, $recurring_all->count()); } } diff --git a/tests/Integration/FileUploadValidationTest.php b/tests/Integration/FileUploadValidationTest.php new file mode 100644 index 000000000000..68cd436739ec --- /dev/null +++ b/tests/Integration/FileUploadValidationTest.php @@ -0,0 +1,151 @@ +makeTestData(); + + } + + public function testIteratingThroughAllEntities() + { + + Storage::fake('local'); + + $file = UploadedFile::fake()->image('avatar.jpg'); + + $data = [ + 'documents' => [$file], + 'is_public' => false, + '_method' => 'PUT', + ]; + + $entities = [ + 'invoice' => 'invoices', + 'quote' => 'quotes', + 'payment' => 'payments', + 'credit' => 'credits', + 'expense' => 'expenses', + 'project' => 'projects', + 'task' => 'tasks', + 'vendor' => 'vendors', + 'product' => 'products', + 'client' => 'clients', + 'recurring_invoice' => 'recurring_invoices', + 'recurring_expense' => 'recurring_expenses', + ]; + + foreach($entities as $key => $value) { + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson("/api/v1/{$value}/{$this->{$key}->hashed_id}/upload", $data); + + $acc = $response->json(); + $response->assertStatus(200); + + $this->assertCount(1, $acc['data']['documents']); + $this->assertFalse($acc['data']['documents'][0]['is_public']); + } + + } + + public function testFileUploadIsPublicSetsAppropriately() + { + Storage::fake('local'); + + $file = UploadedFile::fake()->image('avatar.jpg'); + + $data = [ + 'documents' => [$file], + 'is_public' => false, + '_method' => 'PUT', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson("/api/v1/invoices/{$this->invoice->hashed_id}/upload", $data); + + $response->assertStatus(200); + $acc = $response->json(); + + $this->assertCount(1, $acc['data']['documents']); + $this->assertFalse($acc['data']['documents'][0]['is_public']); + + $data = [ + 'documents' => [$file], + 'is_public' => true, + '_method' => 'PUT', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson("/api/v1/invoices/{$this->invoice->hashed_id}/upload", $data); + + $response->assertStatus(200); + $acc = $response->json(); + + $this->assertCount(2, $acc['data']['documents']); + $this->assertTrue($acc['data']['documents'][1]['is_public']); + + } + + public function testMultiFileUploadIsPublicSetsAppropriately() + { + Storage::fake('local'); + + $file = UploadedFile::fake()->image('avatar.jpg'); + + $data = [ + 'documents' => [$file, $file], + 'is_public' => false, + '_method' => 'PUT', + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson("/api/v1/invoices/{$this->invoice->hashed_id}/upload", $data); + + $response->assertStatus(200); + $acc = $response->json(); + + $this->assertCount(2, $acc['data']['documents']); + $this->assertFalse($acc['data']['documents'][0]['is_public']); + $this->assertFalse($acc['data']['documents'][1]['is_public']); + + } + +} \ No newline at end of file diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php index 86b039bfcdd3..3d780ea1fad3 100644 --- a/tests/MockAccountData.php +++ b/tests/MockAccountData.php @@ -109,12 +109,12 @@ trait MockAccountData public $recurring_quote; /** - * @var + * @var \App\Models\Credit */ public $credit; /** - * @var + * @var \App\Models\Invoice */ public $invoice; @@ -186,6 +186,10 @@ trait MockAccountData public $contact; + public $product; + + public $recurring_invoice; + public function makeTestData() { config(['database.default' => config('ninja.db.default')]); @@ -371,6 +375,17 @@ trait MockAccountData 'client_id' => $this->client->id, ]); + $this->product = Product::factory()->create([ + 'user_id' => $user_id, + 'company_id' => $this->company->id, + ]); + + $this->recurring_invoice = RecurringInvoice::factory()->create([ + 'user_id' => $user_id, + 'company_id' => $this->company->id, + 'client_id' => $this->client->id, + ]); + $this->expense = Expense::factory()->create([ 'user_id' => $user_id, 'company_id' => $this->company->id,