mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-09 20:52:56 +01:00
Merge remote-tracking branch 'upstream/v5-develop' into 1314-subscriptions-v3
This commit is contained in:
commit
fa5827eb44
@ -1 +1 @@
|
||||
5.8.37
|
||||
5.8.39
|
@ -169,26 +169,21 @@ class CheckData extends Command
|
||||
|
||||
private function checkCompanyTokens()
|
||||
{
|
||||
// CompanyUser::whereDoesntHave('token', function ($query){
|
||||
// return $query->where('is_system', 1);
|
||||
// })->cursor()->each(function ($cu){
|
||||
// if ($cu->user) {
|
||||
// $this->logMessage("Creating missing company token for user # {$cu->user->id} for company id # {$cu->company->id}");
|
||||
// (new CreateCompanyToken($cu->company, $cu->user, 'System'))->handle();
|
||||
// } else {
|
||||
// $this->logMessage("Dangling User ID # {$cu->id}");
|
||||
// }
|
||||
// });
|
||||
|
||||
CompanyUser::query()->cursor()->each(function ($cu) {
|
||||
|
||||
if (CompanyToken::where('user_id', $cu->user_id)->where('company_id', $cu->company_id)->where('is_system', 1)->doesntExist()) {
|
||||
$this->logMessage("Creating missing company token for user # {$cu->user_id} for company id # {$cu->company_id}");
|
||||
|
||||
|
||||
if ($cu->company && $cu->user) {
|
||||
$this->logMessage("Creating missing company token for user # {$cu->user_id} for company id # {$cu->company_id}");
|
||||
(new CreateCompanyToken($cu->company, $cu->user, 'System'))->handle();
|
||||
} else {
|
||||
// $cu->forceDelete();
|
||||
}
|
||||
|
||||
if (!$cu->user) {
|
||||
$this->logMessage("No user found for company user - removing company user");
|
||||
$cu->forceDelete();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -482,6 +477,14 @@ class CheckData extends Command
|
||||
}
|
||||
} else {
|
||||
$this->logMessage("No contact present, so cannot add invitation for {$entity_key} - {$entity->id}");
|
||||
|
||||
try{
|
||||
$entity->service()->createInvitations()->save();
|
||||
}
|
||||
catch(\Exception $e){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -168,7 +168,6 @@ class BaseRule implements RuleInterface
|
||||
/* We should only apply taxes for configured states */
|
||||
if(!array_key_exists($this->client->country->iso_3166_2, $this->region_codes)) {
|
||||
nlog('Automatic tax calculations not supported for this country - defaulting to company country');
|
||||
nlog("With new logic, we should never see this");
|
||||
}
|
||||
|
||||
/** Harvest the client_region */
|
||||
|
@ -12,6 +12,9 @@
|
||||
|
||||
namespace App\DataProviders;
|
||||
|
||||
/**
|
||||
* Class Domain.
|
||||
*/
|
||||
class Domains
|
||||
{
|
||||
private static array $verify_domains = [
|
||||
|
@ -134,6 +134,7 @@ class BaseExport
|
||||
|
||||
protected array $invoice_report_keys = [
|
||||
'name' => 'client.name',
|
||||
"currency" => "client.currency_id",
|
||||
"invoice_number" => "invoice.number",
|
||||
"amount" => "invoice.amount",
|
||||
"balance" => "invoice.balance",
|
||||
@ -174,6 +175,8 @@ class BaseExport
|
||||
];
|
||||
|
||||
protected array $recurring_invoice_report_keys = [
|
||||
'name' => 'client.name',
|
||||
"currency" => "client.currency_id",
|
||||
"invoice_number" => "recurring_invoice.number",
|
||||
"amount" => "recurring_invoice.amount",
|
||||
"balance" => "recurring_invoice.balance",
|
||||
@ -298,6 +301,8 @@ class BaseExport
|
||||
];
|
||||
|
||||
protected array $quote_report_keys = [
|
||||
'name' => 'client.name',
|
||||
"currency" => "client.currency_id",
|
||||
'custom_value1' => 'quote.custom_value1',
|
||||
'custom_value2' => 'quote.custom_value2',
|
||||
'custom_value3' => 'quote.custom_value3',
|
||||
@ -336,6 +341,8 @@ class BaseExport
|
||||
];
|
||||
|
||||
protected array $credit_report_keys = [
|
||||
'name' => 'client.name',
|
||||
"currency" => "client.currency_id",
|
||||
"credit_number" => "credit.number",
|
||||
"amount" => "credit.amount",
|
||||
"balance" => "credit.balance",
|
||||
@ -368,6 +375,7 @@ class BaseExport
|
||||
];
|
||||
|
||||
protected array $payment_report_keys = [
|
||||
'name' => 'client.name',
|
||||
"date" => "payment.date",
|
||||
"amount" => "payment.amount",
|
||||
"refunded" => "payment.refunded",
|
||||
@ -385,7 +393,6 @@ class BaseExport
|
||||
"custom_value4" => "payment.custom_value4",
|
||||
"user" => "payment.user_id",
|
||||
"assigned_user" => "payment.assigned_user_id",
|
||||
|
||||
];
|
||||
|
||||
protected array $expense_report_keys = [
|
||||
@ -867,15 +874,15 @@ class BaseExport
|
||||
protected function addClientFilter(Builder $query, $clients): Builder
|
||||
{
|
||||
if(is_string($clients)) {
|
||||
$clients = explode(',', $clients);
|
||||
$clients = explode(',', $clients);
|
||||
}
|
||||
|
||||
$transformed_clients = $this->transformKeys($clients);
|
||||
|
||||
nlog($clients);
|
||||
nlog($transformed_clients);
|
||||
|
||||
if(count($transformed_clients) > 0) {
|
||||
nlog("yus");
|
||||
$query->whereIn('client_id', $transformed_clients);
|
||||
}
|
||||
|
||||
@ -1573,7 +1580,7 @@ class BaseExport
|
||||
|
||||
public function queueDocuments(Builder $query)
|
||||
{
|
||||
nlog("queue docs pls");
|
||||
|
||||
if($query->getModel() instanceof Document) {
|
||||
$documents = $query->pluck('id')->toArray();
|
||||
} else {
|
||||
@ -1584,8 +1591,6 @@ class BaseExport
|
||||
->toArray();
|
||||
}
|
||||
|
||||
nlog($documents);
|
||||
|
||||
if(count($documents) > 0) {
|
||||
|
||||
$user = $this->company->owner();
|
||||
|
@ -107,6 +107,12 @@ class CreditExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
if($this->input['status'] ?? false) {
|
||||
$query = $this->addCreditStatusFilter($query, $this->input['status']);
|
||||
}
|
||||
|
@ -62,6 +62,12 @@ class InvoiceExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
if($this->input['status'] ?? false) {
|
||||
$query = $this->addInvoiceStatusFilter($query, $this->input['status']);
|
||||
}
|
||||
|
@ -75,6 +75,12 @@ class InvoiceItemExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
if($this->input['status'] ?? false) {
|
||||
$query = $this->addInvoiceStatusFilter($query, $this->input['status']);
|
||||
}
|
||||
|
@ -61,6 +61,12 @@ class PaymentExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
$query = $this->addPaymentStatusFilters($query, $this->input['status'] ?? '');
|
||||
|
||||
if($this->input['document_email_attachment'] ?? false) {
|
||||
|
@ -63,6 +63,12 @@ class PurchaseOrderExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients)
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
|
||||
$query = $this->addPurchaseOrderStatusFilter($query, $this->input['status'] ?? '');
|
||||
|
||||
if($this->input['document_email_attachment'] ?? false) {
|
||||
|
@ -67,6 +67,12 @@ class PurchaseOrderItemExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
$query = $this->addPurchaseOrderStatusFilter($query, $this->input['status'] ?? '');
|
||||
|
||||
if($this->input['document_email_attachment'] ?? false) {
|
||||
|
@ -69,6 +69,12 @@ class QuoteExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
$query = $this->addQuoteStatusFilter($query, $this->input['status'] ?? '');
|
||||
|
||||
if($this->input['document_email_attachment'] ?? false) {
|
||||
|
@ -70,6 +70,12 @@ class QuoteItemExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
$query = $this->addQuoteStatusFilter($query, $this->input['status'] ?? '');
|
||||
|
||||
if($this->input['document_email_attachment'] ?? false) {
|
||||
|
@ -61,6 +61,12 @@ class RecurringInvoiceExport extends BaseExport
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($clients) {
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
}
|
||||
|
||||
$query = $this->addRecurringInvoiceStatusFilter($query, $this->input['status'] ?? '');
|
||||
|
||||
return $query;
|
||||
|
@ -72,10 +72,16 @@ class TaskExport extends BaseExport
|
||||
->where('is_deleted', $this->input['include_deleted'] ?? false);
|
||||
|
||||
$query = $this->addDateRange($query);
|
||||
|
||||
$clients = &$this->input['client_id'];
|
||||
|
||||
if($this->input['document_email_attachment'] ?? false) {
|
||||
if($clients)
|
||||
$query = $this->addClientFilter($query, $clients);
|
||||
|
||||
$document_attachments = &$this->input['document_email_attachment'];
|
||||
|
||||
if($document_attachments)
|
||||
$this->queueDocuments($query);
|
||||
}
|
||||
|
||||
return $query;
|
||||
|
||||
@ -197,7 +203,7 @@ class TaskExport extends BaseExport
|
||||
if (in_array('task.duration', $this->input['report_keys']) || in_array('duration', $this->input['report_keys'])) {
|
||||
$seconds = $task->calcDuration();
|
||||
$entity['task.duration'] = $seconds;
|
||||
$entity['task.duration_words'] = CarbonInterval::seconds($seconds)->locale($this->company->locale())->cascade()->forHumans();
|
||||
$entity['task.duration_words'] = $seconds > 86400 ? CarbonInterval::seconds($seconds)->locale($this->company->locale())->cascade()->forHumans() : now()->startOfDay()->addSeconds($seconds)->format('H:i:s');
|
||||
}
|
||||
|
||||
$entity = $this->decorateAdvancedFields($task, $entity);
|
||||
|
@ -42,6 +42,7 @@ class ExpenseFactory
|
||||
$expense->tax_amount1 = 0;
|
||||
$expense->tax_amount2 = 0;
|
||||
$expense->tax_amount3 = 0;
|
||||
$expense->uses_inclusive_taxes = false;
|
||||
|
||||
return $expense;
|
||||
}
|
||||
|
@ -51,7 +51,8 @@ class PurchaseOrderFactory
|
||||
$purchase_order->recurring_id = null;
|
||||
$purchase_order->exchange_rate = 1;
|
||||
$purchase_order->total_taxes = 0;
|
||||
|
||||
$purchase_order->uses_inclusive_taxes = false;
|
||||
|
||||
return $purchase_order;
|
||||
}
|
||||
}
|
||||
|
@ -137,6 +137,7 @@ class ClientFilters extends QueryFilters
|
||||
$query->where('first_name', 'like', '%'.$filter.'%');
|
||||
$query->orWhere('last_name', 'like', '%'.$filter.'%');
|
||||
$query->orWhere('email', 'like', '%'.$filter.'%');
|
||||
$query->orWhere('phone', 'like', '%'.$filter.'%');
|
||||
})
|
||||
->orWhere('custom_value1', 'like', '%'.$filter.'%')
|
||||
->orWhere('custom_value2', 'like', '%'.$filter.'%')
|
||||
@ -166,7 +167,7 @@ class ClientFilters extends QueryFilters
|
||||
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc';
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -148,7 +148,7 @@ class CreditFilters extends QueryFilters
|
||||
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -197,7 +197,7 @@ class ExpenseFilters extends QueryFilters
|
||||
}
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
if (is_array($sort_col) && in_array($sort_col[1], ['asc', 'desc']) && in_array($sort_col[0], ['public_notes', 'date', 'id_number', 'custom_value1', 'custom_value2', 'custom_value3', 'custom_value4'])) {
|
||||
|
@ -176,7 +176,7 @@ class PaymentFilters extends QueryFilters
|
||||
}
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -72,7 +72,7 @@ class ProjectFilters extends QueryFilters
|
||||
}
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -131,7 +131,7 @@ class PurchaseOrderFilters extends QueryFilters
|
||||
}
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -156,7 +156,7 @@ class QuoteFilters extends QueryFilters
|
||||
}
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
if ($sort_col[0] == 'valid_until') {
|
||||
|
@ -130,7 +130,7 @@ class RecurringInvoiceFilters extends QueryFilters
|
||||
}
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw("ABS(number) {$dir}");
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -144,7 +144,7 @@ class TaskFilters extends QueryFilters
|
||||
}
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -72,7 +72,7 @@ class VendorFilters extends QueryFilters
|
||||
$dir = ($sort_col[1] == 'asc') ? 'asc' : 'desc';
|
||||
|
||||
if($sort_col[0] == 'number') {
|
||||
return $this->builder->orderByRaw('ABS(number) ' . $dir);
|
||||
return $this->builder->orderByRaw("REGEXP_REPLACE(number,'[^0-9]+','')+0 " . $dir);
|
||||
}
|
||||
|
||||
return $this->builder->orderBy($sort_col[0], $dir);
|
||||
|
@ -246,6 +246,8 @@ class InvoiceSum
|
||||
|
||||
if ($this->invoice->status_id != Invoice::STATUS_DRAFT) {
|
||||
if ($this->invoice->amount != $this->invoice->balance) {
|
||||
// $paid_to_date = $this->invoice->amount - $this->invoice->balance;
|
||||
|
||||
$this->invoice->balance = Number::roundValue($this->getTotal(), $this->precision) - $this->invoice->paid_to_date; //21-02-2024 cannot use the calculated $paid_to_date here as it could send the balance backward.
|
||||
} else {
|
||||
$this->invoice->balance = Number::roundValue($this->getTotal(), $this->precision);
|
||||
|
@ -271,11 +271,14 @@ class BankIntegrationController extends BaseController
|
||||
$nordigen = new Nordigen();
|
||||
|
||||
BankIntegration::where("integration_type", BankIntegration::INTEGRATION_TYPE_NORDIGEN)->whereNotNull('nordigen_account_id')->each(function (BankIntegration $bank_integration) use ($nordigen) {
|
||||
$is_account_active = $nordigen->isAccountActive($bank_integration->nordigen_account_id);
|
||||
$account = $nordigen->getAccount($bank_integration->nordigen_account_id);
|
||||
if (!$account) {
|
||||
$bank_integration->disabled_upstream = true;
|
||||
|
||||
if (!$is_account_active || !$account) {
|
||||
$bank_integration->disabled_upstream = true;
|
||||
$bank_integration->save();
|
||||
|
||||
$nordigen->disabledAccountEmail($bank_integration);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -304,10 +307,10 @@ class BankIntegrationController extends BaseController
|
||||
$account = $user->account;
|
||||
|
||||
$bank_integration = BankIntegration::withTrashed()
|
||||
->where('bank_account_id', $acc_id)
|
||||
->orWhere('nordigen_account_id', $acc_id)
|
||||
->company()
|
||||
->firstOrFail();
|
||||
->where('bank_account_id', $acc_id)
|
||||
->orWhere('nordigen_account_id', $acc_id)
|
||||
->company()
|
||||
->firstOrFail();
|
||||
|
||||
if ($bank_integration->integration_type == BankIntegration::INTEGRATION_TYPE_YODLEE) {
|
||||
$this->removeAccountYodlee($account, $bank_integration);
|
||||
|
@ -328,9 +328,12 @@ class ClientController extends BaseController
|
||||
->first();
|
||||
|
||||
if (!$m_client) {
|
||||
return response()->json(['message' => "Client not found"]);
|
||||
return response()->json(['message' => "Client not found"], 400);
|
||||
}
|
||||
|
||||
if($m_client->id == $client->id)
|
||||
return response()->json(['message' => "Attempting to merge the same client is not possible."], 400);
|
||||
|
||||
$merged_client = $client->service()->merge($m_client)->save();
|
||||
|
||||
return $this->itemResponse($merged_client);
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
@ -12,17 +13,24 @@
|
||||
namespace App\Http\Controllers\ClientPortal;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\View\View;
|
||||
use App\Models\Invoice;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
/**
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function index()
|
||||
public function index(): \Illuminate\View\View|\Illuminate\Http\RedirectResponse
|
||||
{
|
||||
return redirect()->route('client.invoices.index');
|
||||
//return $this->render('dashboard.index');
|
||||
if (auth()->guard('contact')->user()->client->getSetting('enable_client_portal_dashboard') === false) {
|
||||
return redirect()->route('client.invoices.index');
|
||||
}
|
||||
|
||||
$total_invoices = Invoice::withTrashed()
|
||||
->where('client_id', auth()->guard('contact')->user()->client_id)
|
||||
->where('is_deleted', 0)
|
||||
->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL, Invoice::STATUS_PAID])
|
||||
->sum('amount');
|
||||
|
||||
return $this->render('dashboard.index', [
|
||||
'total_invoices' => $total_invoices,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ class InvitationController extends Controller
|
||||
->firstOrFail();
|
||||
|
||||
if ($invitation->trashed() || $invitation->{$entity}->is_deleted) {
|
||||
return $this->render('generic.not_available', ['account' => $invitation->company->account, 'company' => $invitation->company]);
|
||||
return $this->render('generic.not_available', ['passed_account' => $invitation->company->account, 'passed_company' => $invitation->company]);
|
||||
}
|
||||
|
||||
if ($invitation->contact->trashed()) {
|
||||
@ -138,11 +138,10 @@ class InvitationController extends Controller
|
||||
|
||||
return redirect()->route('client.'.$entity.'.show', [$entity => $this->encodePrimaryKey($invitation->{$key}), 'silent' => $is_silent]);
|
||||
|
||||
return redirect()->route('client.'.$entity.'.show', [$entity => $this->encodePrimaryKey($invitation->{$key}), 'silent' => $is_silent])->header('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
|
||||
}
|
||||
|
||||
return redirect()->route('client.'.$entity.'.show', [$entity => $this->encodePrimaryKey($invitation->{$key})]);
|
||||
|
||||
return redirect()->route('client.'.$entity.'.show', [$entity => $this->encodePrimaryKey($invitation->{$key})])->header('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
|
||||
}
|
||||
|
||||
private function fireEntityViewedEvent($invitation, $entity_string)
|
||||
@ -278,7 +277,7 @@ class InvitationController extends Controller
|
||||
|
||||
auth()->guard('contact')->loginUsingId($invitation->contact->id, true);
|
||||
|
||||
$invoice = $invitation->invoice;
|
||||
$invoice = $invitation->invoice->service()->removeUnpaidGatewayFees()->save();
|
||||
|
||||
if ($invoice->partial > 0) {
|
||||
$amount = round($invoice->partial, (int)$invoice->client->currency()->precision);
|
||||
|
@ -72,7 +72,7 @@ class InvoiceController extends Controller
|
||||
$variables = ($invitation && auth()->guard('contact')->user()->client->getSetting('show_accept_invoice_terms')) ? (new HtmlEngine($invitation))->generateLabelsAndValues() : false;
|
||||
|
||||
$data = [
|
||||
'invoice' => $invoice,
|
||||
'invoice' => $invoice->service()->removeUnpaidGatewayFees()->save(),
|
||||
'invitation' => $invitation ?: $invoice->invitations->first(),
|
||||
'key' => $invitation ? $invitation->key : false,
|
||||
'hash' => $hash,
|
||||
|
@ -26,7 +26,7 @@ class SubscriptionPurchaseController extends Controller
|
||||
App::setLocale($subscription->company->locale());
|
||||
|
||||
if ($subscription->trashed()) {
|
||||
return $this->render('generic.not_available', ['account' => $subscription->company->account, 'company' => $subscription->company]);
|
||||
return $this->render('generic.not_available', ['passed_account' => $subscription->company->account, 'passed_company' => $subscription->company]);
|
||||
}
|
||||
|
||||
/* Make sure the contact is logged into the correct company for this subscription */
|
||||
|
@ -14,6 +14,7 @@ namespace App\Http\Controllers;
|
||||
use App\DataMapper\Analytics\LivePreview;
|
||||
use App\Http\Requests\Preview\DesignPreviewRequest;
|
||||
use App\Http\Requests\Preview\PreviewInvoiceRequest;
|
||||
use App\Http\Requests\Preview\ShowPreviewRequest;
|
||||
use App\Jobs\Util\PreviewPdf;
|
||||
use App\Models\Client;
|
||||
use App\Models\ClientContact;
|
||||
@ -131,9 +132,9 @@ class PreviewController extends BaseController
|
||||
* Used in the Custom Designer to preview design changes
|
||||
* @return mixed
|
||||
*/
|
||||
public function show()
|
||||
public function show(ShowPreviewRequest $request)
|
||||
{
|
||||
if(request()->has('template')) {
|
||||
if($request->input('design.is_template')) {
|
||||
return $this->template();
|
||||
}
|
||||
|
||||
@ -238,7 +239,6 @@ class PreviewController extends BaseController
|
||||
|
||||
private function liveTemplate(array $request_data)
|
||||
{
|
||||
nlog($request_data['entity_type']);
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
@ -292,8 +292,6 @@ class PreviewController extends BaseController
|
||||
->setTemplate($design_object)
|
||||
->mock();
|
||||
} catch(SyntaxError $e) {
|
||||
|
||||
// return response()->json(['message' => 'Twig syntax is invalid.', 'errors' => new \stdClass], 422);
|
||||
}
|
||||
|
||||
if (request()->query('html') == 'true') {
|
||||
|
@ -914,7 +914,7 @@ class QuoteController extends BaseController
|
||||
$contact = $invitation->contact;
|
||||
$quote = $invitation->quote;
|
||||
|
||||
$file = $quote->service()->getEInvoice($contact);
|
||||
$file = $quote->service()->getEQuote($contact);
|
||||
$file_name = $quote->getFileName("xml");
|
||||
|
||||
$headers = ['Content-Type' => 'application/xml'];
|
||||
|
@ -66,7 +66,7 @@ class ARDetailReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ARDetailReport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -65,7 +65,7 @@ class ARSummaryReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ARSummaryReport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -36,7 +36,7 @@ class ActivityReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ActivityExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -65,7 +65,7 @@ class ClientBalanceReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ClientBalanceReport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,7 @@ class ClientContactReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ContactExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -67,7 +67,7 @@ class ClientReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ClientExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -65,7 +65,7 @@ class ClientSalesReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ClientSalesReport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,7 @@ class CreditReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), CreditExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -67,7 +67,7 @@ class DocumentReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), DocumentExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -68,7 +68,7 @@ class ExpenseReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ExpenseExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,7 @@ class InvoiceItemReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), InvoiceItemExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,7 @@ class InvoiceReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), InvoiceExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -67,7 +67,7 @@ class PaymentReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), PaymentExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -68,7 +68,7 @@ class ProductReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ProductExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -67,7 +67,7 @@ class ProductSalesReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ProductSalesExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -67,7 +67,7 @@ class ProfitAndLossController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), ProfitLoss::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -34,7 +34,7 @@ class PurchaseOrderItemReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), PurchaseOrderItemExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -36,7 +36,7 @@ class PurchaseOrderReportController extends BaseController
|
||||
$user = auth()->user();
|
||||
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), PurchaseOrderExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,7 @@ class QuoteItemReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), QuoteItemExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,7 @@ class QuoteReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), QuoteExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -34,7 +34,7 @@ class RecurringInvoiceReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), RecurringInvoiceExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,8 @@ class TaskReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output'))
|
||||
{
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), TaskExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -66,7 +66,7 @@ class TaxSummaryReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), TaxSummaryReport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -65,7 +65,7 @@ class UserSalesReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), UserSalesReport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -34,7 +34,7 @@ class VendorReportController extends BaseController
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if ($request->has('send_email') && $request->get('send_email')) {
|
||||
if ($request->has('send_email') && $request->get('send_email') && $request->missing('output')) {
|
||||
SendToAdmin::dispatch($user->company(), $request->all(), VendorExport::class, $this->filename);
|
||||
|
||||
return response()->json(['message' => 'working...'], 200);
|
||||
|
@ -59,6 +59,7 @@ class ShowChartRequest extends Request
|
||||
}
|
||||
|
||||
if (! isset($input['end_date'])) {
|
||||
// $input['end_date'] = now()->lastOfMonth()->format('Y-m-d');
|
||||
$input['end_date'] = now()->format('Y-m-d');
|
||||
}
|
||||
|
||||
|
@ -116,7 +116,9 @@ class StoreInvoiceRequest extends Request
|
||||
//handles edge case where we need for force set the due date of the invoice.
|
||||
if((isset($input['partial_due_date']) && strlen($input['partial_due_date']) > 1) && (!array_key_exists('due_date', $input) || (empty($input['due_date']) && empty($this->invoice->due_date)))) {
|
||||
$client = \App\Models\Client::withTrashed()->find($input['client_id']);
|
||||
$input['due_date'] = \Illuminate\Support\Carbon::parse($input['date'])->addDays($client->getSetting('payment_terms'))->format('Y-m-d');
|
||||
|
||||
if($client)
|
||||
$input['due_date'] = \Illuminate\Support\Carbon::parse($input['date'])->addDays($client->getSetting('payment_terms'))->format('Y-m-d');
|
||||
}
|
||||
|
||||
$this->replace($input);
|
||||
|
45
app/Http/Requests/Preview/ShowPreviewRequest.php
Normal file
45
app/Http/Requests/Preview/ShowPreviewRequest.php
Normal file
@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* Invoice Ninja (https://invoiceninja.com).
|
||||
*
|
||||
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||
*
|
||||
* @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
|
||||
*
|
||||
* @license https://www.elastic.co/licensing/elastic-license
|
||||
*/
|
||||
|
||||
namespace App\Http\Requests\Preview;
|
||||
|
||||
use App\Http\Requests\Request;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
|
||||
class ShowPreviewRequest extends Request
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
$rules = [
|
||||
];
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function prepareForValidation()
|
||||
{
|
||||
$input = $this->all();
|
||||
|
||||
$this->replace($input);
|
||||
}
|
||||
}
|
@ -11,10 +11,14 @@
|
||||
|
||||
namespace App\Http\Requests\Report;
|
||||
|
||||
use App\Utils\Ninja;
|
||||
use App\Http\Requests\Request;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
|
||||
class GenericReportRequest extends Request
|
||||
{
|
||||
private string $error_message = '';
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
@ -22,11 +26,7 @@ class GenericReportRequest extends Request
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->isAdmin() || $user->hasPermission('view_reports');
|
||||
|
||||
return $this->checkAuthority();
|
||||
}
|
||||
|
||||
public function rules()
|
||||
@ -70,4 +70,25 @@ class GenericReportRequest extends Request
|
||||
|
||||
$this->replace($input);
|
||||
}
|
||||
|
||||
private function checkAuthority()
|
||||
{
|
||||
$this->error_message = ctrans('texts.authorization_failure');
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if(Ninja::isHosted() && $user->account->isFreeHostedClient()){
|
||||
$this->error_message = ctrans('texts.upgrade_to_view_reports');
|
||||
return false;
|
||||
}
|
||||
|
||||
return $user->isAdmin() || $user->hasPermission('view_reports');
|
||||
|
||||
}
|
||||
|
||||
protected function failedAuthorization()
|
||||
{
|
||||
throw new AuthorizationException($this->error_message);
|
||||
}
|
||||
}
|
||||
|
@ -11,13 +11,17 @@
|
||||
|
||||
namespace App\Http\Requests\Report;
|
||||
|
||||
use App\Utils\Ninja;
|
||||
use App\Http\Requests\Request;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
|
||||
class ProductSalesReportRequest extends Request
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
private string $error_message = '';
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
@ -25,18 +29,22 @@ class ProductSalesReportRequest extends Request
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return auth()->user()->isAdmin();
|
||||
return $this->checkAuthority();
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return [
|
||||
'date_range' => 'bail|required|string',
|
||||
'end_date' => 'bail|required_if:date_range,custom|nullable|date',
|
||||
'start_date' => 'bail|required_if:date_range,custom|nullable|date',
|
||||
'report_keys' => 'bail|present|array',
|
||||
'send_email' => 'bail|required|bool',
|
||||
'client_id' => 'bail|nullable|sometimes|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0',
|
||||
'client_id' => 'bail|nullable|sometimes|exists:clients,id,company_id,'.$user->company()->id.',is_deleted,0',
|
||||
];
|
||||
}
|
||||
|
||||
@ -67,4 +75,26 @@ class ProductSalesReportRequest extends Request
|
||||
|
||||
$this->replace($input);
|
||||
}
|
||||
|
||||
private function checkAuthority()
|
||||
{
|
||||
$this->error_message = ctrans('texts.authorization_failure');
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if(Ninja::isHosted() && $user->account->isFreeHostedClient()){
|
||||
$this->error_message = ctrans('texts.upgrade_to_view_reports');
|
||||
return false;
|
||||
}
|
||||
|
||||
return $user->isAdmin() || $user->hasPermission('view_reports');
|
||||
|
||||
}
|
||||
|
||||
protected function failedAuthorization()
|
||||
{
|
||||
throw new AuthorizationException($this->error_message);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,10 +11,15 @@
|
||||
|
||||
namespace App\Http\Requests\Report;
|
||||
|
||||
use App\Utils\Ninja;
|
||||
use App\Http\Requests\Request;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
|
||||
class ProfitLossRequest extends Request
|
||||
{
|
||||
|
||||
private string $error_message = '';
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
@ -22,10 +27,7 @@ class ProfitLossRequest extends Request
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->isAdmin();
|
||||
return $this->checkAuthority();
|
||||
}
|
||||
|
||||
public function rules()
|
||||
@ -51,4 +53,26 @@ class ProfitLossRequest extends Request
|
||||
|
||||
$this->replace($input);
|
||||
}
|
||||
|
||||
private function checkAuthority()
|
||||
{
|
||||
$this->error_message = ctrans('texts.authorization_failure');
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if(Ninja::isHosted() && $user->account->isFreeHostedClient()){
|
||||
$this->error_message = ctrans('texts.upgrade_to_view_reports');
|
||||
return false;
|
||||
}
|
||||
|
||||
return $user->isAdmin() || $user->hasPermission('view_reports');
|
||||
|
||||
}
|
||||
|
||||
protected function failedAuthorization()
|
||||
{
|
||||
throw new AuthorizationException($this->error_message);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,10 +11,14 @@
|
||||
|
||||
namespace App\Http\Requests\Report;
|
||||
|
||||
use App\Utils\Ninja;
|
||||
use App\Http\Requests\Request;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
|
||||
class ReportPreviewRequest extends Request
|
||||
{
|
||||
private string $error_message = '';
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
@ -22,11 +26,7 @@ class ReportPreviewRequest extends Request
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
return $user->isAdmin() || $user->hasPermission('view_reports');
|
||||
|
||||
return $this->checkAuthority();
|
||||
}
|
||||
|
||||
public function rules()
|
||||
@ -38,4 +38,26 @@ class ReportPreviewRequest extends Request
|
||||
public function prepareForValidation()
|
||||
{
|
||||
}
|
||||
|
||||
private function checkAuthority()
|
||||
{
|
||||
$this->error_message = ctrans('texts.authorization_failure');
|
||||
|
||||
/** @var \App\Models\User $user */
|
||||
$user = auth()->user();
|
||||
|
||||
if(Ninja::isHosted() && $user->account->isFreeHostedClient()){
|
||||
$this->error_message = ctrans('texts.upgrade_to_view_reports');
|
||||
return false;
|
||||
}
|
||||
|
||||
return $user->isAdmin() || $user->hasPermission('view_reports');
|
||||
|
||||
}
|
||||
|
||||
protected function failedAuthorization()
|
||||
{
|
||||
throw new AuthorizationException($this->error_message);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -101,9 +101,9 @@ class PortalComposer
|
||||
$enabled_modules = auth()->guard('contact')->user()->company->enabled_modules;
|
||||
$data = [];
|
||||
|
||||
// TODO: Enable dashboard once it's completed.
|
||||
// $this->settings->enable_client_portal_dashboard
|
||||
// $data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'activity'];
|
||||
if ($this->settings->enable_client_portal_dashboard) {
|
||||
$data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'activity'];
|
||||
}
|
||||
|
||||
if (self::MODULE_INVOICES & $enabled_modules) {
|
||||
$data[] = ['title' => ctrans('texts.invoices'), 'url' => 'client.invoices.index', 'icon' => 'file-text'];
|
||||
|
@ -11,11 +11,12 @@
|
||||
|
||||
namespace App\Jobs\Cron;
|
||||
|
||||
use App\Libraries\MultiDB;
|
||||
use App\Models\Company;
|
||||
use App\Models\Invoice;
|
||||
use App\Libraries\MultiDB;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Utils\Traits\SubscriptionHooker;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class SubscriptionCron
|
||||
{
|
||||
@ -97,4 +98,61 @@ class SubscriptionCron
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Requires the crons to be updated and set to hourly @ 00:01
|
||||
private function timezoneAware()
|
||||
{
|
||||
$grouped_company_ids =
|
||||
|
||||
Invoice::select('company_id')
|
||||
->where('is_deleted', 0)
|
||||
->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL])
|
||||
->where('balance', '>', 0)
|
||||
->where('is_proforma', 0)
|
||||
->whereDate('due_date', '<=', now()->addDay()->startOfDay())
|
||||
->whereNull('deleted_at')
|
||||
->whereNotNull('subscription_id')
|
||||
->groupBy('company_id')
|
||||
->cursor()
|
||||
->each(function ($company_id){
|
||||
|
||||
$company = Company::find($company_id);
|
||||
|
||||
$timezone_now = now()->setTimezone($company->timezone()->name);
|
||||
|
||||
//Capture companies within the window of 00:00 and 00:30
|
||||
if($timezone_now->gt($timezone_now->copy()->startOfDay()) && $timezone_now->lt($timezone_now->copy()->startOfDay()->addMinutes(30))) {
|
||||
|
||||
Invoice::query()
|
||||
->where('company_id', $company->id)
|
||||
->whereNull('deleted_at')
|
||||
->where('is_deleted', 0)
|
||||
->whereIn('status_id', [Invoice::STATUS_SENT, Invoice::STATUS_PARTIAL])
|
||||
->where('is_proforma', 0)
|
||||
->whereNotNull('subscription_id')
|
||||
->where('balance', '>', 0)
|
||||
->whereDate('due_date', '<=', now()->setTimezone($company->timezone()->name)->addDay()->startOfDay())
|
||||
->cursor()
|
||||
->each(function (Invoice $invoice) {
|
||||
|
||||
$subscription = $invoice->subscription;
|
||||
|
||||
$body = [
|
||||
'context' => 'plan_expired',
|
||||
'client' => $invoice->client->hashed_id,
|
||||
'invoice' => $invoice->hashed_id,
|
||||
'subscription' => $subscription->hashed_id,
|
||||
];
|
||||
|
||||
$this->sendLoad($subscription, $body);
|
||||
//This will send the notification daily.
|
||||
//We'll need to handle this by performing some action on the invoice to either archive it or delete it?
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -359,6 +359,17 @@ class ProcessPostmarkWebhook implements ShouldQueue
|
||||
|
||||
$postmark = new PostmarkClient($postmark_secret);
|
||||
$messageDetail = $postmark->getOutboundMessageDetails($message_id);
|
||||
|
||||
try {
|
||||
$messageDetail = $postmark->getOutboundMessageDetails($message_id);
|
||||
} catch(\Exception $e) {
|
||||
|
||||
$postmark_secret = config('services.postmark-outlook.token');
|
||||
$postmark = new PostmarkClient($postmark_secret);
|
||||
$messageDetail = $postmark->getOutboundMessageDetails($message_id);
|
||||
|
||||
}
|
||||
|
||||
return $messageDetail;
|
||||
|
||||
}
|
||||
@ -391,7 +402,17 @@ class ProcessPostmarkWebhook implements ShouldQueue
|
||||
$postmark_secret = !empty($this->company->settings->postmark_secret) ? $this->company->settings->postmark_secret : config('services.postmark.token');
|
||||
|
||||
$postmark = new PostmarkClient($postmark_secret);
|
||||
$messageDetail = $postmark->getOutboundMessageDetails($this->request['MessageID']);
|
||||
|
||||
try {
|
||||
$messageDetail = $postmark->getOutboundMessageDetails($this->request['MessageID']);
|
||||
}
|
||||
catch(\Exception $e){
|
||||
|
||||
$postmark_secret = config('services.postmark-outlook.token');
|
||||
$postmark = new PostmarkClient($postmark_secret);
|
||||
$messageDetail = $postmark->getOutboundMessageDetails($this->request['MessageID']);
|
||||
|
||||
}
|
||||
|
||||
$recipients = collect($messageDetail['recipients'])->flatten()->implode(',');
|
||||
$subject = $messageDetail->subject ?? '';
|
||||
|
@ -59,15 +59,12 @@ class CleanStaleInvoiceOrder implements ShouldQueue
|
||||
Invoice::query()
|
||||
->withTrashed()
|
||||
->where('status_id', Invoice::STATUS_SENT)
|
||||
->whereBetween('created_at', [now()->subHours(1), now()->subMinutes(30)])
|
||||
->where('created_at', '<', now()->subMinutes(30))
|
||||
->where('balance', '>', 0)
|
||||
->whereJsonContains('line_items', ['type_id' => '3'])
|
||||
->cursor()
|
||||
->each(function ($invoice) {
|
||||
|
||||
if (collect($invoice->line_items)->contains('type_id', 3)) {
|
||||
$invoice->service()->removeUnpaidGatewayFees();
|
||||
}
|
||||
|
||||
$invoice->service()->removeUnpaidGatewayFees();
|
||||
});
|
||||
|
||||
return;
|
||||
@ -86,6 +83,18 @@ class CleanStaleInvoiceOrder implements ShouldQueue
|
||||
$invoice->is_proforma = false;
|
||||
$repo->delete($invoice);
|
||||
});
|
||||
|
||||
Invoice::query()
|
||||
->withTrashed()
|
||||
->where('status_id', Invoice::STATUS_SENT)
|
||||
->where('created_at', '<', now()->subMinutes(30))
|
||||
->where('balance', '>', 0)
|
||||
->whereJsonContains('line_items', ['type_id' => '3'])
|
||||
->cursor()
|
||||
->each(function ($invoice) {
|
||||
$invoice->service()->removeUnpaidGatewayFees();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1144,8 +1144,6 @@ class Import implements ShouldQueue
|
||||
|
||||
$key = "invoices_{$resource['id']}";
|
||||
|
||||
nlog($invoice->id);
|
||||
|
||||
$this->ids['invoices'][$key] = [
|
||||
'old' => $resource['id'],
|
||||
'new' => $invoice->id,
|
||||
@ -1527,10 +1525,11 @@ class Import implements ShouldQueue
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// throw new Exception("Resource invoice/quote document not available.");
|
||||
}
|
||||
|
||||
$entity = false;
|
||||
|
||||
if (array_key_exists('expense_id', $resource) && $resource['expense_id'] && array_key_exists('expenses', $this->ids)) {
|
||||
$expense_id = $this->transformId('expenses', $resource['expense_id']);
|
||||
$entity = Expense::query()->where('id', $expense_id)->withTrashed()->first();
|
||||
|
@ -108,7 +108,7 @@ class PdfSlot extends Component
|
||||
|
||||
}
|
||||
|
||||
public function downloadEInvoice()
|
||||
public function downloadEDocument()
|
||||
{
|
||||
|
||||
$file_name = $this->entity->numberFormatter().'.xml';
|
||||
|
@ -796,15 +796,18 @@ class Client extends BaseModel implements HasLocalePreference
|
||||
{
|
||||
$defaults = [];
|
||||
|
||||
if (! (array_key_exists('terms', $data) && is_string($data['terms']) && strlen($data['terms']) > 1)) {
|
||||
$terms = &$data['terms'];
|
||||
$footer = &$data['footer'];
|
||||
|
||||
if (!$terms || ($terms && strlen((string)$terms) == 0)) {
|
||||
$defaults['terms'] = $this->getSetting($entity_name.'_terms');
|
||||
} elseif (array_key_exists('terms', $data)) {
|
||||
} elseif ($terms) {
|
||||
$defaults['terms'] = $data['terms'];
|
||||
}
|
||||
|
||||
if (! (array_key_exists('footer', $data) && is_string($data['footer']) && strlen($data['footer']) > 1)) {
|
||||
if (!$footer || ($footer && strlen((string)$footer) == 0)) {
|
||||
$defaults['footer'] = $this->getSetting($entity_name.'_footer');
|
||||
} elseif (array_key_exists('footer', $data)) {
|
||||
} elseif ($footer) {
|
||||
$defaults['footer'] = $data['footer'];
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Laracasts\Presenter\PresentableTrait;
|
||||
|
||||
@ -121,6 +122,22 @@ class Project extends BaseModel
|
||||
return $this->hasMany(Task::class);
|
||||
}
|
||||
|
||||
public function expenses(): HasMany
|
||||
{
|
||||
return $this->hasMany(Expense::class);
|
||||
}
|
||||
|
||||
public function invoices(): HasMany
|
||||
{
|
||||
return $this->hasMany(Invoice::class);
|
||||
}
|
||||
|
||||
public function quotes(): HasMany
|
||||
{
|
||||
return $this->hasMany(Quote::class);
|
||||
}
|
||||
|
||||
|
||||
public function translate_entity()
|
||||
{
|
||||
return ctrans('texts.project');
|
||||
|
@ -126,14 +126,9 @@ class BaseDriver extends AbstractPaymentDriver
|
||||
$fields[] = ['name' => 'client_name', 'label' => ctrans('texts.client_name'), 'type' => 'text', 'validation' => 'required'];
|
||||
}
|
||||
|
||||
// if ($this->company_gateway->require_contact_name) {
|
||||
$fields[] = ['name' => 'contact_first_name', 'label' => ctrans('texts.first_name'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'contact_last_name', 'label' => ctrans('texts.last_name'), 'type' => 'text', 'validation' => 'required'];
|
||||
// }
|
||||
|
||||
// if ($this->company_gateway->require_contact_email) {
|
||||
$fields[] = ['name' => 'contact_email', 'label' => ctrans('texts.email'), 'type' => 'text', 'validation' => 'required,email:rfc'];
|
||||
// }
|
||||
$fields[] = ['name' => 'contact_first_name', 'label' => ctrans('texts.first_name'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'contact_last_name', 'label' => ctrans('texts.last_name'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'contact_email', 'label' => ctrans('texts.email'), 'type' => 'text', 'validation' => 'required,email:rfc'];
|
||||
|
||||
if ($this->company_gateway->require_client_phone) {
|
||||
$fields[] = ['name' => 'client_phone', 'label' => ctrans('texts.client_phone'), 'type' => 'tel', 'validation' => 'required'];
|
||||
@ -166,12 +161,10 @@ class BaseDriver extends AbstractPaymentDriver
|
||||
$fields[] = ['name' => 'client_custom_value2', 'label' => $this->helpers->makeCustomField($this->client->company->custom_fields, 'client2'), 'type' => 'text', 'validation' => 'required'];
|
||||
}
|
||||
|
||||
|
||||
if ($this->company_gateway->require_custom_value3) {
|
||||
$fields[] = ['name' => 'client_custom_value3', 'label' => $this->helpers->makeCustomField($this->client->company->custom_fields, 'client3'), 'type' => 'text', 'validation' => 'required'];
|
||||
}
|
||||
|
||||
|
||||
if ($this->company_gateway->require_custom_value4) {
|
||||
$fields[] = ['name' => 'client_custom_value4', 'label' => $this->helpers->makeCustomField($this->client->company->custom_fields, 'client4'), 'type' => 'text', 'validation' => 'required'];
|
||||
}
|
||||
@ -797,19 +790,24 @@ class BaseDriver extends AbstractPaymentDriver
|
||||
'client' => $this->client->present()->name(),
|
||||
]);
|
||||
|
||||
return sprintf('%s: %s', ctrans('texts.invoices'), \implode(', ', collect($this->payment_hash->invoices())->pluck('invoice_number')->toArray()));
|
||||
// return sprintf('%s: %s', ctrans('texts.invoices'), \implode(', ', collect($this->payment_hash->invoices())->pluck('invoice_number')->toArray()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub for disconnecting from the gateway.
|
||||
*
|
||||
* @return void
|
||||
* @return bool
|
||||
*/
|
||||
public function disconnect()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub for checking authentication.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function auth(): bool
|
||||
{
|
||||
return true;
|
||||
|
@ -287,6 +287,27 @@ class BraintreePaymentDriver extends BaseDriver
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Required fields for client to fill, to proceed with gateway actions.
|
||||
*
|
||||
* @return array[]
|
||||
*/
|
||||
public function getClientRequiredFields(): array
|
||||
{
|
||||
$fields = [];
|
||||
|
||||
$fields[] = ['name' => 'contact_first_name', 'label' => ctrans('texts.first_name'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'contact_last_name', 'label' => ctrans('texts.last_name'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'contact_email', 'label' => ctrans('texts.email'), 'type' => 'text', 'validation' => 'required,email:rfc'];
|
||||
$fields[] = ['name' => 'client_address_line_1', 'label' => ctrans('texts.address1'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'client_city', 'label' => ctrans('texts.city'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'client_state', 'label' => ctrans('texts.state'), 'type' => 'text', 'validation' => 'required'];
|
||||
$fields[] = ['name' => 'client_country_id', 'label' => ctrans('texts.country'), 'type' => 'text', 'validation' => 'required'];
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function processWebhookRequest($request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
|
@ -61,9 +61,9 @@ class CreditCard
|
||||
'State' => $this->eway_driver->client->state,
|
||||
'PostalCode' => $this->eway_driver->client->postal_code,
|
||||
'Country' => $this->eway_driver->client->country->iso_3166_2,
|
||||
'Phone' => $this->eway_driver->client->phone,
|
||||
'Email' => $this->eway_driver->client->contacts()->first()->email,
|
||||
'Url' => $this->eway_driver->client->website,
|
||||
'Phone' => $this->eway_driver->client->phone ?? '',
|
||||
'Email' => $this->eway_driver->client->contacts()->first()->email ?? '',
|
||||
'Url' => $this->eway_driver->client->website ?? '',
|
||||
'Method' => \Eway\Rapid\Enum\PaymentMethod::CREATE_TOKEN_CUSTOMER,
|
||||
'SecuredCardData' => $securefieldcode,
|
||||
];
|
||||
|
@ -165,8 +165,10 @@ class StripePaymentDriver extends BaseDriver
|
||||
}
|
||||
|
||||
if ($this->client
|
||||
&& isset($this->client->country)
|
||||
&& in_array($this->client->country->iso_3166_3, ['AUS', 'DNK', 'DEU', 'ITA', 'LUX', 'NOR', 'SVN', 'GBR', 'AUT', 'EST', 'GRC', 'JPN', 'MYS', 'PRT', 'ESP', 'USA', 'BEL', 'FIN', 'HKG', 'LVA', 'NLD', 'SGP', 'SWE', 'CAN', 'FRA', 'IRL', 'LTU', 'NZL', 'SVK', 'CHE'])) {
|
||||
&& $this->client->currency()
|
||||
&& in_array($this->client->currency()->code, ['CNY', 'AUD', 'CAD', 'EUR', 'GBP', 'HKD', 'JPY', 'SGD', 'MYR', 'NZD', 'USD'])) {
|
||||
// && isset($this->client->country)
|
||||
// && in_array($this->client->country->iso_3166_3, ['AUS', 'DNK', 'DEU', 'ITA', 'LUX', 'NOR', 'SVN', 'GBR', 'AUT', 'EST', 'GRC', 'JPN', 'MYS', 'PRT', 'ESP', 'USA', 'BEL', 'FIN', 'HKG', 'LVA', 'NLD', 'SGP', 'SWE', 'CAN', 'FRA', 'IRL', 'LTU', 'NZL', 'SVK', 'CHE'])) {
|
||||
$types[] = GatewayType::ALIPAY;
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,8 @@ class BaseRepository
|
||||
$company_defaults = $client->setCompanyDefaults($data, lcfirst($resource));
|
||||
$data['exchange_rate'] = $company_defaults['exchange_rate'];
|
||||
$model->uses_inclusive_taxes = $client->getSetting('inclusive_taxes');
|
||||
$data = array_merge($company_defaults, $data);
|
||||
// $data = array_merge($company_defaults, $data);
|
||||
$data = array_merge($data, $company_defaults);
|
||||
}
|
||||
|
||||
$tmp_data = $data; //preserves the $data array
|
||||
|
@ -453,12 +453,6 @@ class InvoiceService
|
||||
if ((int) $pre_count != (int) $post_count) {
|
||||
$adjustment = $balance - $new_balance;
|
||||
|
||||
// $this->invoice
|
||||
// ->client
|
||||
// ->service()
|
||||
// ->updateBalance($adjustment * -1)
|
||||
// ->save();
|
||||
|
||||
$this->invoice
|
||||
->ledger()
|
||||
->updateInvoiceBalance($adjustment * -1, 'Adjustment for removing gateway fee');
|
||||
|
@ -80,18 +80,29 @@ class PdfMaker
|
||||
$replacements = [];
|
||||
$contents = $this->document->getElementsByTagName('ninja');
|
||||
|
||||
$ts = new TemplateService();
|
||||
$ts = new TemplateService();
|
||||
|
||||
if(isset($this->data['template']['entity'])) {
|
||||
if(isset($this->options['client'])) {
|
||||
$client = $this->options['client'];
|
||||
try {
|
||||
$entity = $this->data['template']['entity'];
|
||||
$ts->setCompany($entity->company);
|
||||
$ts->setCompany($client->company);
|
||||
$ts->addGlobal(['currency_code' => $client->company->currency()->code]);
|
||||
} catch(\Exception $e) {
|
||||
|
||||
nlog($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($this->options['vendor'])) {
|
||||
$vendor = $this->options['vendor'];
|
||||
try {
|
||||
$ts->setCompany($vendor->company);
|
||||
$ts->addGlobal(['currency_code' => $vendor->company->currency()->code]);
|
||||
} catch(\Exception $e) {
|
||||
nlog($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
$data = $ts->processData($this->options)->getData();
|
||||
$data = $ts->processData($this->options)->setGlobals()->getData();
|
||||
$twig = $ts->twig;
|
||||
|
||||
foreach ($contents as $content) {
|
||||
|
@ -57,6 +57,13 @@ class PurchaseOrderExpense
|
||||
|
||||
$expense->number = empty($expense->number) ? $this->getNextExpenseNumber($expense) : $expense->number;
|
||||
|
||||
if($this->purchase_order->project_id){
|
||||
$expense->project_id = $this->purchase_order->project_id;
|
||||
$expense->client_id = $this->purchase_order->project->client_id;
|
||||
}
|
||||
elseif($this->purchase_order->client_id)
|
||||
$expense->client_id = $this->purchase_order->client_id;
|
||||
|
||||
$expense->saveQuietly();
|
||||
event('eloquent.created: App\Models\Expense', $expense);
|
||||
|
||||
|
@ -79,7 +79,7 @@ class TemplateAction implements ShouldQueue
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
// nlog("inside template action");
|
||||
nlog("inside template action");
|
||||
|
||||
MultiDB::setDb($this->db);
|
||||
|
||||
@ -108,7 +108,14 @@ class TemplateAction implements ShouldQueue
|
||||
->where('company_id', $this->company->id)
|
||||
->get();
|
||||
|
||||
// nlog($result->toArray());
|
||||
/** Set a global currency_code */
|
||||
$first_entity = $result->first();
|
||||
if($first_entity->client)
|
||||
$currency_code = $first_entity->client->currency()->code;
|
||||
elseif($first_entity instanceof Client)
|
||||
$currency_code = $first_entity->currency()->code;
|
||||
else
|
||||
$currency_code = $this->company->currency()->code;
|
||||
|
||||
if($result->count() <= 1) {
|
||||
$data[$key] = collect($result);
|
||||
@ -118,10 +125,9 @@ class TemplateAction implements ShouldQueue
|
||||
|
||||
$ts = $template_service
|
||||
->setCompany($this->company)
|
||||
->addGlobal(['currency_code' => $currency_code])
|
||||
->build($data);
|
||||
|
||||
// nlog($ts->getHtml());
|
||||
|
||||
if($this->send_email) {
|
||||
$pdf = $ts->getPdf();
|
||||
$this->sendEmail($pdf, $template);
|
||||
|
@ -157,9 +157,9 @@ class TemplateService
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function setGlobals(): self
|
||||
public function setGlobals(): self
|
||||
{
|
||||
|
||||
|
||||
foreach($this->global_vars as $key => $value) {
|
||||
$this->twig->addGlobal($key, $value);
|
||||
}
|
||||
@ -241,8 +241,6 @@ class TemplateService
|
||||
public function getPdf(): string
|
||||
{
|
||||
|
||||
// nlog($this->getHtml());
|
||||
|
||||
if (config('ninja.invoiceninja_hosted_pdf_generation') || config('ninja.pdf_generator') == 'hosted_ninja') {
|
||||
$pdf = (new NinjaPdf())->build($this->compiled_html);
|
||||
} else {
|
||||
@ -273,7 +271,7 @@ class TemplateService
|
||||
{
|
||||
|
||||
$this->data = $this->preProcessDataBlocks($data);
|
||||
// nlog($this->data);
|
||||
// nlog(json_encode($this->data));
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
@ -12,10 +12,13 @@
|
||||
|
||||
namespace App\Transformers;
|
||||
|
||||
use App\Models\Client;
|
||||
use App\Models\Document;
|
||||
use App\Models\Project;
|
||||
use App\Models\Task;
|
||||
use App\Models\Quote;
|
||||
use App\Models\Client;
|
||||
use App\Models\Project;
|
||||
use App\Models\Document;
|
||||
use App\Models\Expense;
|
||||
use App\Models\Invoice;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
|
||||
/**
|
||||
@ -35,6 +38,9 @@ class ProjectTransformer extends EntityTransformer
|
||||
protected array $availableIncludes = [
|
||||
'client',
|
||||
'tasks',
|
||||
'invoices',
|
||||
'expenses',
|
||||
'quotes',
|
||||
];
|
||||
|
||||
public function includeDocuments(Project $project)
|
||||
@ -67,6 +73,27 @@ class ProjectTransformer extends EntityTransformer
|
||||
return $this->includeCollection($project->tasks, $transformer, Task::class);
|
||||
}
|
||||
|
||||
public function includeInvoices(Project $project): \League\Fractal\Resource\Collection
|
||||
{
|
||||
$transformer = new InvoiceTransformer($this->serializer);
|
||||
|
||||
return $this->includeCollection($project->invoices, $transformer, Invoice::class);
|
||||
}
|
||||
|
||||
public function includeExpenses(Project $project): \League\Fractal\Resource\Collection
|
||||
{
|
||||
$transformer = new ExpenseTransformer($this->serializer);
|
||||
|
||||
return $this->includeCollection($project->expenses, $transformer, Expense::class);
|
||||
}
|
||||
|
||||
public function includeQuotes(Project $project): \League\Fractal\Resource\Collection
|
||||
{
|
||||
$transformer = new QuoteTransformer($this->serializer);
|
||||
|
||||
return $this->includeCollection($project->quotes, $transformer, Quote::class);
|
||||
}
|
||||
|
||||
public function transform(Project $project)
|
||||
{
|
||||
return [
|
||||
|
@ -42,6 +42,7 @@ class TaskTransformer extends EntityTransformer
|
||||
'project',
|
||||
'user',
|
||||
'invoice',
|
||||
'assigned_user',
|
||||
];
|
||||
|
||||
public function includeDocuments(Task $task)
|
||||
@ -73,6 +74,16 @@ class TaskTransformer extends EntityTransformer
|
||||
return $this->includeItem($task->user, $transformer, User::class);
|
||||
}
|
||||
|
||||
public function includeAssignedUser(Task $task): ?Item
|
||||
{
|
||||
$transformer = new UserTransformer($this->serializer);
|
||||
|
||||
if (!$task->assigned_user) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->includeItem($task->assigned_user, $transformer, User::class);
|
||||
}
|
||||
|
||||
public function includeClient(Task $task): ?Item
|
||||
{
|
||||
|
@ -70,7 +70,7 @@
|
||||
"league/flysystem-aws-s3-v3": "^3.0",
|
||||
"league/fractal": "^0.20.0",
|
||||
"league/omnipay": "^3.1",
|
||||
"livewire/livewire": "^3.4",
|
||||
"livewire/livewire": "^3",
|
||||
"microsoft/microsoft-graph": "^1.69",
|
||||
"mollie/mollie-api-php": "^2.36",
|
||||
"nelexa/zip": "^4.0",
|
||||
|
270
composer.lock
generated
270
composer.lock
generated
@ -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": "b5347cd9ca42d75b5c80691e6b64dae5",
|
||||
"content-hash": "853c952c9b8cc2c562748aaaa293c3ea",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adrienrn/php-mimetyper",
|
||||
@ -409,16 +409,16 @@
|
||||
},
|
||||
{
|
||||
"name": "amphp/parallel",
|
||||
"version": "v2.2.8",
|
||||
"version": "v2.2.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/amphp/parallel.git",
|
||||
"reference": "efd71b342b64c2e46d904e4eb057ed5ab20f8e2d"
|
||||
"reference": "73d293f1fc4df1bebc3c4fce1432e82dd7032238"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/amphp/parallel/zipball/efd71b342b64c2e46d904e4eb057ed5ab20f8e2d",
|
||||
"reference": "efd71b342b64c2e46d904e4eb057ed5ab20f8e2d",
|
||||
"url": "https://api.github.com/repos/amphp/parallel/zipball/73d293f1fc4df1bebc3c4fce1432e82dd7032238",
|
||||
"reference": "73d293f1fc4df1bebc3c4fce1432e82dd7032238",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -481,7 +481,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/amphp/parallel/issues",
|
||||
"source": "https://github.com/amphp/parallel/tree/v2.2.8"
|
||||
"source": "https://github.com/amphp/parallel/tree/v2.2.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -489,20 +489,20 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-19T16:09:34+00:00"
|
||||
"time": "2024-03-24T18:27:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "amphp/parser",
|
||||
"version": "v1.1.0",
|
||||
"version": "v1.1.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/amphp/parser.git",
|
||||
"reference": "ff1de4144726c5dad5fab97f66692ebe8de3e151"
|
||||
"reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/amphp/parser/zipball/ff1de4144726c5dad5fab97f66692ebe8de3e151",
|
||||
"reference": "ff1de4144726c5dad5fab97f66692ebe8de3e151",
|
||||
"url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7",
|
||||
"reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -543,7 +543,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/amphp/parser/issues",
|
||||
"source": "https://github.com/amphp/parser/tree/v1.1.0"
|
||||
"source": "https://github.com/amphp/parser/tree/v1.1.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -551,7 +551,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-12-30T18:08:47+00:00"
|
||||
"time": "2024-03-21T19:16:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "amphp/pipeline",
|
||||
@ -1384,16 +1384,16 @@
|
||||
},
|
||||
{
|
||||
"name": "aws/aws-sdk-php",
|
||||
"version": "3.301.3",
|
||||
"version": "3.301.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||
"reference": "6b21e34d24a73ea66492869be90443069034fdb3"
|
||||
"reference": "a6ad44dd7bc4ace137d583c91439fa9c16331b01"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/6b21e34d24a73ea66492869be90443069034fdb3",
|
||||
"reference": "6b21e34d24a73ea66492869be90443069034fdb3",
|
||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a6ad44dd7bc4ace137d583c91439fa9c16331b01",
|
||||
"reference": "a6ad44dd7bc4ace137d583c91439fa9c16331b01",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1473,9 +1473,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.301.3"
|
||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.301.8"
|
||||
},
|
||||
"time": "2024-03-19T18:05:04+00:00"
|
||||
"time": "2024-03-26T18:14:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "bacon/bacon-qr-code",
|
||||
@ -1585,16 +1585,16 @@
|
||||
},
|
||||
{
|
||||
"name": "braintree/braintree_php",
|
||||
"version": "6.17.0",
|
||||
"version": "6.18.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/braintree/braintree_php.git",
|
||||
"reference": "37c187c91416003708632a58c230d03dbe88fb67"
|
||||
"reference": "8ca67004fe2405ef0b6b33a5897594fdcf417e0e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/braintree/braintree_php/zipball/37c187c91416003708632a58c230d03dbe88fb67",
|
||||
"reference": "37c187c91416003708632a58c230d03dbe88fb67",
|
||||
"url": "https://api.github.com/repos/braintree/braintree_php/zipball/8ca67004fe2405ef0b6b33a5897594fdcf417e0e",
|
||||
"reference": "8ca67004fe2405ef0b6b33a5897594fdcf417e0e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1628,9 +1628,9 @@
|
||||
"description": "Braintree PHP Client Library",
|
||||
"support": {
|
||||
"issues": "https://github.com/braintree/braintree_php/issues",
|
||||
"source": "https://github.com/braintree/braintree_php/tree/6.17.0"
|
||||
"source": "https://github.com/braintree/braintree_php/tree/6.18.0"
|
||||
},
|
||||
"time": "2024-03-06T20:01:30+00:00"
|
||||
"time": "2024-03-26T21:08:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
@ -1758,16 +1758,16 @@
|
||||
},
|
||||
{
|
||||
"name": "checkout/checkout-sdk-php",
|
||||
"version": "3.0.21",
|
||||
"version": "3.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/checkout/checkout-sdk-php.git",
|
||||
"reference": "0195aa0153b79b3f8350509e54a5654e57f62bd3"
|
||||
"reference": "dc1b71009f2456cabde720ee38d225c7e177adfb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/checkout/checkout-sdk-php/zipball/0195aa0153b79b3f8350509e54a5654e57f62bd3",
|
||||
"reference": "0195aa0153b79b3f8350509e54a5654e57f62bd3",
|
||||
"url": "https://api.github.com/repos/checkout/checkout-sdk-php/zipball/dc1b71009f2456cabde720ee38d225c7e177adfb",
|
||||
"reference": "dc1b71009f2456cabde720ee38d225c7e177adfb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -1820,9 +1820,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/checkout/checkout-sdk-php/issues",
|
||||
"source": "https://github.com/checkout/checkout-sdk-php/tree/3.0.21"
|
||||
"source": "https://github.com/checkout/checkout-sdk-php/tree/3.1.0"
|
||||
},
|
||||
"time": "2024-02-08T17:30:23+00:00"
|
||||
"time": "2024-03-26T12:27:04+00:00"
|
||||
},
|
||||
{
|
||||
"name": "clue/stream-filter",
|
||||
@ -3542,16 +3542,16 @@
|
||||
},
|
||||
{
|
||||
"name": "google/apiclient-services",
|
||||
"version": "v0.340.0",
|
||||
"version": "v0.341.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/googleapis/google-api-php-client-services.git",
|
||||
"reference": "c89999ea477da2b0803b2b4f14c9e7fc23b6344a"
|
||||
"reference": "50dad3cd4a3902bd2df0d96e7dc09cdaa2ba79b9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/c89999ea477da2b0803b2b4f14c9e7fc23b6344a",
|
||||
"reference": "c89999ea477da2b0803b2b4f14c9e7fc23b6344a",
|
||||
"url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/50dad3cd4a3902bd2df0d96e7dc09cdaa2ba79b9",
|
||||
"reference": "50dad3cd4a3902bd2df0d96e7dc09cdaa2ba79b9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -3580,9 +3580,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
|
||||
"source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.340.0"
|
||||
"source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.341.0"
|
||||
},
|
||||
"time": "2024-03-17T00:56:17+00:00"
|
||||
"time": "2024-03-24T01:08:16+00:00"
|
||||
},
|
||||
{
|
||||
"name": "google/auth",
|
||||
@ -4404,16 +4404,16 @@
|
||||
},
|
||||
{
|
||||
"name": "horstoeko/orderx",
|
||||
"version": "v1.0.19",
|
||||
"version": "v1.0.20",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/horstoeko/orderx.git",
|
||||
"reference": "7b4ed00ca98df5a88c916733d31728a16a3845b4"
|
||||
"reference": "d8957cc0fea19b098d799a0c438a73504e7b326c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/horstoeko/orderx/zipball/7b4ed00ca98df5a88c916733d31728a16a3845b4",
|
||||
"reference": "7b4ed00ca98df5a88c916733d31728a16a3845b4",
|
||||
"url": "https://api.github.com/repos/horstoeko/orderx/zipball/d8957cc0fea19b098d799a0c438a73504e7b326c",
|
||||
"reference": "d8957cc0fea19b098d799a0c438a73504e7b326c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4466,9 +4466,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/horstoeko/orderx/issues",
|
||||
"source": "https://github.com/horstoeko/orderx/tree/v1.0.19"
|
||||
"source": "https://github.com/horstoeko/orderx/tree/v1.0.20"
|
||||
},
|
||||
"time": "2024-03-20T04:07:11+00:00"
|
||||
"time": "2024-03-21T04:28:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "horstoeko/stringmanagement",
|
||||
@ -4526,16 +4526,16 @@
|
||||
},
|
||||
{
|
||||
"name": "horstoeko/zugferd",
|
||||
"version": "v1.0.36",
|
||||
"version": "v1.0.37",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/horstoeko/zugferd.git",
|
||||
"reference": "0d15c305328c137365648fe1c34a584d877127fa"
|
||||
"reference": "05f58ad4dbcc23d767fceb15f46b46097ffd43f1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/horstoeko/zugferd/zipball/0d15c305328c137365648fe1c34a584d877127fa",
|
||||
"reference": "0d15c305328c137365648fe1c34a584d877127fa",
|
||||
"url": "https://api.github.com/repos/horstoeko/zugferd/zipball/05f58ad4dbcc23d767fceb15f46b46097ffd43f1",
|
||||
"reference": "05f58ad4dbcc23d767fceb15f46b46097ffd43f1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -4553,6 +4553,7 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"goetas-webservices/xsd2php": "^0",
|
||||
"nette/php-generator": "*",
|
||||
"pdepend/pdepend": "^2",
|
||||
"phploc/phploc": "^7",
|
||||
"phpmd/phpmd": "^2",
|
||||
@ -4593,9 +4594,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/horstoeko/zugferd/issues",
|
||||
"source": "https://github.com/horstoeko/zugferd/tree/v1.0.36"
|
||||
"source": "https://github.com/horstoeko/zugferd/tree/v1.0.37"
|
||||
},
|
||||
"time": "2024-03-11T04:34:59+00:00"
|
||||
"time": "2024-03-24T11:31:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "http-interop/http-factory-guzzle",
|
||||
@ -5526,16 +5527,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/framework",
|
||||
"version": "v10.48.3",
|
||||
"version": "v10.48.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/framework.git",
|
||||
"reference": "5791c052b41c6b593556adc687076bfbdd13c501"
|
||||
"reference": "7e0701bf59cb76a51f7c1f7bea51c0c0c29c0b72"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/5791c052b41c6b593556adc687076bfbdd13c501",
|
||||
"reference": "5791c052b41c6b593556adc687076bfbdd13c501",
|
||||
"url": "https://api.github.com/repos/laravel/framework/zipball/7e0701bf59cb76a51f7c1f7bea51c0c0c29c0b72",
|
||||
"reference": "7e0701bf59cb76a51f7c1f7bea51c0c0c29c0b72",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -5640,7 +5641,7 @@
|
||||
"league/flysystem-sftp-v3": "^3.0",
|
||||
"mockery/mockery": "^1.5.1",
|
||||
"nyholm/psr7": "^1.2",
|
||||
"orchestra/testbench-core": "^8.18",
|
||||
"orchestra/testbench-core": "^8.23.4",
|
||||
"pda/pheanstalk": "^4.0",
|
||||
"phpstan/phpstan": "^1.4.7",
|
||||
"phpunit/phpunit": "^10.0.7",
|
||||
@ -5729,20 +5730,20 @@
|
||||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2024-03-15T10:17:07+00:00"
|
||||
"time": "2024-03-21T13:36:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/prompts",
|
||||
"version": "v0.1.16",
|
||||
"version": "v0.1.17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/prompts.git",
|
||||
"reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781"
|
||||
"reference": "8ee9f87f7f9eadcbe21e9e72cd4176b2f06cd5b5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
|
||||
"reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
|
||||
"url": "https://api.github.com/repos/laravel/prompts/zipball/8ee9f87f7f9eadcbe21e9e72cd4176b2f06cd5b5",
|
||||
"reference": "8ee9f87f7f9eadcbe21e9e72cd4176b2f06cd5b5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -5784,9 +5785,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/laravel/prompts/issues",
|
||||
"source": "https://github.com/laravel/prompts/tree/v0.1.16"
|
||||
"source": "https://github.com/laravel/prompts/tree/v0.1.17"
|
||||
},
|
||||
"time": "2024-02-21T19:25:27+00:00"
|
||||
"time": "2024-03-13T16:05:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/serializable-closure",
|
||||
@ -6047,16 +6048,16 @@
|
||||
},
|
||||
{
|
||||
"name": "laravel/ui",
|
||||
"version": "v4.5.0",
|
||||
"version": "v4.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/ui.git",
|
||||
"reference": "da3811f409297d13feccd5858ce748e7474b3d11"
|
||||
"reference": "a3562953123946996a503159199d6742d5534e61"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/ui/zipball/da3811f409297d13feccd5858ce748e7474b3d11",
|
||||
"reference": "da3811f409297d13feccd5858ce748e7474b3d11",
|
||||
"url": "https://api.github.com/repos/laravel/ui/zipball/a3562953123946996a503159199d6742d5534e61",
|
||||
"reference": "a3562953123946996a503159199d6742d5534e61",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -6064,7 +6065,8 @@
|
||||
"illuminate/filesystem": "^9.21|^10.0|^11.0",
|
||||
"illuminate/support": "^9.21|^10.0|^11.0",
|
||||
"illuminate/validation": "^9.21|^10.0|^11.0",
|
||||
"php": "^8.0"
|
||||
"php": "^8.0",
|
||||
"symfony/console": "^6.0|^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"orchestra/testbench": "^7.35|^8.15|^9.0",
|
||||
@ -6103,9 +6105,9 @@
|
||||
"ui"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/laravel/ui/tree/v4.5.0"
|
||||
"source": "https://github.com/laravel/ui/tree/v4.5.1"
|
||||
},
|
||||
"time": "2024-03-04T13:58:27+00:00"
|
||||
"time": "2024-03-21T18:12:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "lcobucci/clock",
|
||||
@ -6524,16 +6526,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem",
|
||||
"version": "3.25.1",
|
||||
"version": "3.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem.git",
|
||||
"reference": "abbd664eb4381102c559d358420989f835208f18"
|
||||
"reference": "072735c56cc0da00e10716dd90d5a7f7b40b36be"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/abbd664eb4381102c559d358420989f835208f18",
|
||||
"reference": "abbd664eb4381102c559d358420989f835208f18",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/072735c56cc0da00e10716dd90d5a7f7b40b36be",
|
||||
"reference": "072735c56cc0da00e10716dd90d5a7f7b40b36be",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -6598,7 +6600,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/flysystem/issues",
|
||||
"source": "https://github.com/thephpleague/flysystem/tree/3.25.1"
|
||||
"source": "https://github.com/thephpleague/flysystem/tree/3.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -6610,20 +6612,20 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-16T12:53:19+00:00"
|
||||
"time": "2024-03-25T11:49:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem-aws-s3-v3",
|
||||
"version": "3.25.1",
|
||||
"version": "3.26.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
|
||||
"reference": "6a5be0e6d6a93574e80805c9cc108a4b63c824d8"
|
||||
"reference": "885d0a758c71ae3cd6c503544573a1fdb8dc754f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/6a5be0e6d6a93574e80805c9cc108a4b63c824d8",
|
||||
"reference": "6a5be0e6d6a93574e80805c9cc108a4b63c824d8",
|
||||
"url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/885d0a758c71ae3cd6c503544573a1fdb8dc754f",
|
||||
"reference": "885d0a758c71ae3cd6c503544573a1fdb8dc754f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -6663,7 +6665,7 @@
|
||||
"storage"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.25.1"
|
||||
"source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.26.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -6675,7 +6677,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-15T19:58:44+00:00"
|
||||
"time": "2024-03-24T21:11:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/flysystem-local",
|
||||
@ -7003,16 +7005,16 @@
|
||||
},
|
||||
{
|
||||
"name": "league/uri",
|
||||
"version": "7.4.0",
|
||||
"version": "7.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/uri.git",
|
||||
"reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5"
|
||||
"reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri/zipball/bf414ba956d902f5d98bf9385fcf63954f09dce5",
|
||||
"reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4",
|
||||
"reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -7081,7 +7083,7 @@
|
||||
"docs": "https://uri.thephpleague.com",
|
||||
"forum": "https://thephpleague.slack.com",
|
||||
"issues": "https://github.com/thephpleague/uri-src/issues",
|
||||
"source": "https://github.com/thephpleague/uri/tree/7.4.0"
|
||||
"source": "https://github.com/thephpleague/uri/tree/7.4.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -7089,20 +7091,20 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-12-01T06:24:25+00:00"
|
||||
"time": "2024-03-23T07:42:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/uri-interfaces",
|
||||
"version": "7.4.0",
|
||||
"version": "7.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/uri-interfaces.git",
|
||||
"reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3"
|
||||
"reference": "8d43ef5c841032c87e2de015972c06f3865ef718"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/bd8c487ec236930f7bbc42b8d374fa882fbba0f3",
|
||||
"reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3",
|
||||
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718",
|
||||
"reference": "8d43ef5c841032c87e2de015972c06f3865ef718",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -7165,7 +7167,7 @@
|
||||
"docs": "https://uri.thephpleague.com",
|
||||
"forum": "https://thephpleague.slack.com",
|
||||
"issues": "https://github.com/thephpleague/uri-src/issues",
|
||||
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.0"
|
||||
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -7173,7 +7175,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-11-24T15:40:42+00:00"
|
||||
"time": "2024-03-23T07:42:40+00:00"
|
||||
},
|
||||
{
|
||||
"name": "livewire/livewire",
|
||||
@ -9843,16 +9845,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpdoc-parser",
|
||||
"version": "1.26.0",
|
||||
"version": "1.27.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpdoc-parser.git",
|
||||
"reference": "231e3186624c03d7e7c890ec662b81e6b0405227"
|
||||
"reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227",
|
||||
"reference": "231e3186624c03d7e7c890ec662b81e6b0405227",
|
||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/86e4d5a4b036f8f0be1464522f4c6b584c452757",
|
||||
"reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -9884,9 +9886,9 @@
|
||||
"description": "PHPDoc parser with support for nullable, intersection and generic types",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
|
||||
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0"
|
||||
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.27.0"
|
||||
},
|
||||
"time": "2024-02-23T16:05:55+00:00"
|
||||
"time": "2024-03-21T13:14:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pragmarx/google2fa",
|
||||
@ -10966,16 +10968,16 @@
|
||||
},
|
||||
{
|
||||
"name": "rmccue/requests",
|
||||
"version": "v2.0.10",
|
||||
"version": "v2.0.11",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/WordPress/Requests.git",
|
||||
"reference": "bcf1ac7fe8c0b2b18c1df6d24694cfc96b44b391"
|
||||
"reference": "31435a468e2357e68df743f2527bda32556a0818"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/WordPress/Requests/zipball/bcf1ac7fe8c0b2b18c1df6d24694cfc96b44b391",
|
||||
"reference": "bcf1ac7fe8c0b2b18c1df6d24694cfc96b44b391",
|
||||
"url": "https://api.github.com/repos/WordPress/Requests/zipball/31435a468e2357e68df743f2527bda32556a0818",
|
||||
"reference": "31435a468e2357e68df743f2527bda32556a0818",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -11049,7 +11051,7 @@
|
||||
"issues": "https://github.com/WordPress/Requests/issues",
|
||||
"source": "https://github.com/WordPress/Requests"
|
||||
},
|
||||
"time": "2024-01-08T11:14:32+00:00"
|
||||
"time": "2024-03-25T10:48:46+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sabre/uri",
|
||||
@ -16721,16 +16723,16 @@
|
||||
},
|
||||
{
|
||||
"name": "composer/xdebug-handler",
|
||||
"version": "3.0.3",
|
||||
"version": "3.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/composer/xdebug-handler.git",
|
||||
"reference": "ced299686f41dce890debac69273b47ffe98a40c"
|
||||
"reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
|
||||
"reference": "ced299686f41dce890debac69273b47ffe98a40c",
|
||||
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
|
||||
"reference": "4f988f8fdf580d53bdb2d1278fe93d1ed5462255",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -16741,7 +16743,7 @@
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^1.0",
|
||||
"phpstan/phpstan-strict-rules": "^1.1",
|
||||
"symfony/phpunit-bridge": "^6.0"
|
||||
"phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@ -16765,9 +16767,9 @@
|
||||
"performance"
|
||||
],
|
||||
"support": {
|
||||
"irc": "irc://irc.freenode.org/composer",
|
||||
"irc": "ircs://irc.libera.chat:6697/composer",
|
||||
"issues": "https://github.com/composer/xdebug-handler/issues",
|
||||
"source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
|
||||
"source": "https://github.com/composer/xdebug-handler/tree/3.0.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -16783,7 +16785,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-02-25T21:32:43+00:00"
|
||||
"time": "2024-03-26T18:29:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "fidry/cpu-core-counter",
|
||||
@ -17289,16 +17291,16 @@
|
||||
},
|
||||
{
|
||||
"name": "mockery/mockery",
|
||||
"version": "1.6.10",
|
||||
"version": "1.6.11",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mockery/mockery.git",
|
||||
"reference": "47065d1be1fa05def58dc14c03cf831d3884ef0b"
|
||||
"reference": "81a161d0b135df89951abd52296adf97deb0723d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/47065d1be1fa05def58dc14c03cf831d3884ef0b",
|
||||
"reference": "47065d1be1fa05def58dc14c03cf831d3884ef0b",
|
||||
"url": "https://api.github.com/repos/mockery/mockery/zipball/81a161d0b135df89951abd52296adf97deb0723d",
|
||||
"reference": "81a161d0b135df89951abd52296adf97deb0723d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -17368,7 +17370,7 @@
|
||||
"security": "https://github.com/mockery/mockery/security/advisories",
|
||||
"source": "https://github.com/mockery/mockery"
|
||||
},
|
||||
"time": "2024-03-19T16:15:45+00:00"
|
||||
"time": "2024-03-21T18:34:15+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
@ -17733,16 +17735,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.10.63",
|
||||
"version": "1.10.65",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "ad12836d9ca227301f5fb9960979574ed8628339"
|
||||
"reference": "3c657d057a0b7ecae19cb12db446bbc99d8839c6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/ad12836d9ca227301f5fb9960979574ed8628339",
|
||||
"reference": "ad12836d9ca227301f5fb9960979574ed8628339",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/3c657d057a0b7ecae19cb12db446bbc99d8839c6",
|
||||
"reference": "3c657d057a0b7ecae19cb12db446bbc99d8839c6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -17791,7 +17793,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-18T16:53:53+00:00"
|
||||
"time": "2024-03-23T10:30:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
@ -18116,16 +18118,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "10.5.13",
|
||||
"version": "10.5.15",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7"
|
||||
"reference": "86376e05e8745ed81d88232ff92fee868247b07b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/20a63fc1c6db29b15da3bd02d4b6cf59900088a7",
|
||||
"reference": "20a63fc1c6db29b15da3bd02d4b6cf59900088a7",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86376e05e8745ed81d88232ff92fee868247b07b",
|
||||
"reference": "86376e05e8745ed81d88232ff92fee868247b07b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -18197,7 +18199,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.13"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.15"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -18213,7 +18215,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-12T15:37:41+00:00"
|
||||
"time": "2024-03-22T04:17:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
@ -18587,16 +18589,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/environment",
|
||||
"version": "6.0.1",
|
||||
"version": "6.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/environment.git",
|
||||
"reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951"
|
||||
"reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951",
|
||||
"reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
|
||||
"reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -18611,7 +18613,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "6.0-dev"
|
||||
"dev-main": "6.1-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -18639,7 +18641,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/environment/issues",
|
||||
"security": "https://github.com/sebastianbergmann/environment/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/environment/tree/6.0.1"
|
||||
"source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -18647,7 +18649,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2023-04-11T05:39:26+00:00"
|
||||
"time": "2024-03-23T08:47:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
|
@ -17,8 +17,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.8.37'),
|
||||
'app_tag' => env('APP_TAG', '5.8.37'),
|
||||
'app_version' => env('APP_VERSION', '5.8.39'),
|
||||
'app_tag' => env('APP_TAG', '5.8.39'),
|
||||
'minimum_client_version' => '5.0.16',
|
||||
'terms_version' => '1.0.1',
|
||||
'api_secret' => env('API_SECRET', false),
|
||||
|
@ -35,6 +35,7 @@ class ExpenseFactory extends Factory
|
||||
'private_notes' => $this->faker->text(50),
|
||||
'transaction_reference' => $this->faker->text(5),
|
||||
'invoice_id' => null,
|
||||
'uses_inclusive_taxes' => false,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ class PurchaseOrderFactory extends Factory
|
||||
'due_date' => $this->faker->date(),
|
||||
'line_items' => InvoiceItemFactory::generate(5),
|
||||
'terms' => $this->faker->text(500),
|
||||
'uses_inclusive_taxes' => false,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
use App\Models\Currency;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
|
||||
$cur = Currency::find(122);
|
||||
|
||||
if(!$cur) {
|
||||
$cur = new \App\Models\Currency();
|
||||
$cur->id = 122;
|
||||
$cur->code = 'BTN';
|
||||
$cur->name = "Bhutan Ngultrum";
|
||||
$cur->symbol = 'Nu';
|
||||
$cur->thousand_separator = ',';
|
||||
$cur->decimal_separator = '.';
|
||||
$cur->precision = 2;
|
||||
$cur->save();
|
||||
}
|
||||
|
||||
$cur = Currency::find(123);
|
||||
|
||||
if(!$cur) {
|
||||
$cur = new \App\Models\Currency();
|
||||
$cur->id = 123;
|
||||
$cur->code = 'MRU';
|
||||
$cur->name = "Mauritanian Ouguiya";
|
||||
$cur->symbol = 'UM';
|
||||
$cur->thousand_separator = ',';
|
||||
$cur->decimal_separator = '.';
|
||||
$cur->precision = 2;
|
||||
$cur->save();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
};
|
@ -144,6 +144,8 @@ class CurrenciesSeeder extends Seeder
|
||||
['id' => 119, 'name' => 'Malagasy ariary', 'code' => 'MGA', 'symbol' => 'Ar', 'precision' => '0', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 120, 'name' => "Tongan Pa anga", 'code' => 'TOP', 'symbol' => 'T$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 121, 'name' => "Lao kip", 'code' => 'LAK', 'symbol' => '₭', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 122, 'name' => "Bhutan Ngultrum", 'code' => 'BTN', 'symbol' => 'Nu', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
['id' => 123, 'name' => "Mauritanian Ouguiya", 'code' => 'MRU', 'symbol' => 'UM', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
|
||||
];
|
||||
|
||||
foreach ($currencies as $currency) {
|
||||
|
@ -453,9 +453,9 @@ $lang = array(
|
||||
'edit_token' => 'تحرير الرمز',
|
||||
'delete_token' => 'حذف الرمز المميز',
|
||||
'token' => 'رمز',
|
||||
'add_gateway' => 'Add Payment Gateway',
|
||||
'delete_gateway' => 'حذف البوابة',
|
||||
'edit_gateway' => 'تحرير البوابة',
|
||||
'add_gateway' => 'اضافة بوابة الدفع',
|
||||
'delete_gateway' => 'حذف بوابة الدفع',
|
||||
'edit_gateway' => 'تحرير بوابة الدفع',
|
||||
'updated_gateway' => 'تم تحديث البوابة بنجاح',
|
||||
'created_gateway' => 'تم إنشاء البوابة بنجاح',
|
||||
'deleted_gateway' => 'تم حذف البوابة بنجاح',
|
||||
@ -2178,6 +2178,8 @@ $lang = array(
|
||||
'encryption' => 'التشفير',
|
||||
'mailgun_domain' => 'مجال Mailgun',
|
||||
'mailgun_private_key' => 'مفتاح Mailgun الخاص',
|
||||
'brevo_domain' => 'مجال بريفو',
|
||||
'brevo_private_key' => 'مفتاح بريفو الخاص',
|
||||
'send_test_email' => 'إرسال بريد إلكتروني تجريبي',
|
||||
'select_label' => 'حدد تسمية',
|
||||
'label' => 'ملصق',
|
||||
@ -4828,6 +4830,7 @@ $lang = array(
|
||||
'email_alignment' => 'محاذاة البريد الإلكتروني',
|
||||
'pdf_preview_location' => 'موقع معاينة PDF',
|
||||
'mailgun' => 'Mailgun',
|
||||
'brevo' => 'بريفو',
|
||||
'postmark' => 'ختم البريد',
|
||||
'microsoft' => 'مايكروسوفت',
|
||||
'click_plus_to_create_record' => 'انقر فوق + لإنشاء سجل',
|
||||
@ -5080,6 +5083,8 @@ $lang = array(
|
||||
'drop_files_here' => 'قم بوضع الملفات هنا',
|
||||
'upload_files' => 'تحميل الملفات',
|
||||
'download_e_invoice' => 'تحميل الفاتورة الإلكترونية',
|
||||
'download_e_credit' => 'تحميل الائتمان الالكتروني',
|
||||
'download_e_quote' => 'تحميل الاقتباس الإلكتروني',
|
||||
'triangular_tax_info' => 'المعاملات الثلاثية داخل المجتمع',
|
||||
'intracommunity_tax_info' => 'التوصيل داخل المجتمع معفي من الضرائب',
|
||||
'reverse_tax_info' => 'يرجى ملاحظة أن هذا العرض يخضع لرسوم عكسية',
|
||||
@ -5182,7 +5187,7 @@ $lang = array(
|
||||
'nordigen_handler_error_heading_requisition_invalid_status' => 'غير جاهز',
|
||||
'nordigen_handler_error_contents_requisition_invalid_status' => 'لقد اتصلت بهذا الموقع مبكرًا جدًا. الرجاء إنهاء الترخيص وتحديث هذه الصفحة. اتصل بالدعم للحصول على المساعدة، إذا استمرت هذه المشكلة.',
|
||||
'nordigen_handler_error_heading_requisition_no_accounts' => 'لم يتم تحديد أي حسابات',
|
||||
'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
|
||||
'nordigen_handler_error_contents_requisition_no_accounts' => 'لم تقم الخدمة بإرجاع أي حسابات صالحة. فكر في إعادة تشغيل التدفق.',
|
||||
'nordigen_handler_restart' => 'إعادة تشغيل التدفق.',
|
||||
'nordigen_handler_return' => 'العودة إلى التطبيق.',
|
||||
'lang_Lao' => 'لاو',
|
||||
@ -5223,18 +5228,28 @@ $lang = array(
|
||||
'gateway_type' => 'نوع البوابة',
|
||||
'save_template_body' => 'هل ترغب في حفظ تعيين الاستيراد هذا كقالب لاستخدامه في المستقبل؟',
|
||||
'save_as_template' => 'حفظ تعيين القالب',
|
||||
'auto_bill_standard_invoices_help' => 'Auto bill standard invoices on the due date',
|
||||
'auto_bill_on_help' => 'Auto bill on send date OR due date (recurring invoices)',
|
||||
'use_available_credits_help' => 'Apply any credit balances to payments prior to charging a payment method',
|
||||
'use_unapplied_payments' => 'Use unapplied payments',
|
||||
'use_unapplied_payments_help' => 'Apply any payment balances prior to charging a payment method',
|
||||
'auto_bill_standard_invoices_help' => 'فواتير تلقائية قياسية في تاريخ الاستحقاق',
|
||||
'auto_bill_on_help' => 'فاتورة تلقائية في تاريخ الإرسال أو تاريخ الاستحقاق (الفواتير المتكررة)',
|
||||
'use_available_credits_help' => 'قم بتطبيق أي أرصدة دائنة على الدفعات قبل تحصيل رسوم طريقة الدفع',
|
||||
'use_unapplied_payments' => 'استخدم الدفعات غير المطبقة',
|
||||
'use_unapplied_payments_help' => 'قم بتطبيق أي أرصدة دفع قبل فرض رسوم على طريقة الدفع',
|
||||
'payment_terms_help' => 'يضبط <b>تاريخ استحقاق الفاتورة</b> الافتراضي',
|
||||
'payment_type_help' => 'يعيّن <b>نوع الدفع اليدوي</b> الافتراضي.',
|
||||
'quote_valid_until_help' => 'The number of days that the quote is valid for',
|
||||
'expense_payment_type_help' => 'The default expense payment type to be used',
|
||||
'paylater' => 'Pay in 4',
|
||||
'payment_provider' => 'Payment Provider',
|
||||
|
||||
'quote_valid_until_help' => 'عدد الأيام التي يكون عرض الأسعار صالحًا لها',
|
||||
'expense_payment_type_help' => 'نوع دفع النفقات الافتراضي الذي سيتم استخدامه',
|
||||
'paylater' => 'الدفع في 4',
|
||||
'payment_provider' => 'مزود الدفع',
|
||||
'select_email_provider' => 'قم بتعيين بريدك الإلكتروني كمستخدم مرسل',
|
||||
'purchase_order_items' => 'عناصر أمر الشراء',
|
||||
'csv_rows_length' => 'لم يتم العثور على بيانات في ملف CSV هذا',
|
||||
'accept_payments_online' => 'قبول المدفوعات عبر الإنترنت',
|
||||
'all_payment_gateways' => 'عرض جميع بوابات الدفع',
|
||||
'product_cost' => 'تكلفة المنتج',
|
||||
'enable_rappen_roudning' => 'تمكين تقريب Rappen',
|
||||
'enable_rappen_rounding_help' => 'تقريب الإجماليات إلى أقرب 5',
|
||||
'duration_words' => 'المدة بالكلمات',
|
||||
'upcoming_recurring_invoices' => 'الفواتير المتكررة القادمة',
|
||||
'total_invoices' => 'إجمالي الفواتير',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -462,8 +462,8 @@ $lang = array(
|
||||
'delete_token' => 'Изтриване на токън',
|
||||
'token' => 'Токън',
|
||||
'add_gateway' => 'Add Payment Gateway',
|
||||
'delete_gateway' => 'Изтриване на Gateway',
|
||||
'edit_gateway' => 'Редакция на Gateway',
|
||||
'delete_gateway' => 'Delete Payment Gateway',
|
||||
'edit_gateway' => 'Edit Payment Gateway',
|
||||
'updated_gateway' => 'Успешно актуализиран Gateway',
|
||||
'created_gateway' => 'Успешно създаден Gateway',
|
||||
'deleted_gateway' => 'Успешно изтрит Gateway',
|
||||
@ -2198,6 +2198,8 @@ $lang = array(
|
||||
'encryption' => 'Криптиране',
|
||||
'mailgun_domain' => 'Mailgun домейн',
|
||||
'mailgun_private_key' => 'Mailgun частен ключ',
|
||||
'brevo_domain' => 'Brevo Domain',
|
||||
'brevo_private_key' => 'Brevo Private Key',
|
||||
'send_test_email' => 'Изпращане на тестов имейл',
|
||||
'select_label' => 'Избор на етикет',
|
||||
'label' => 'Етикет',
|
||||
@ -4848,6 +4850,7 @@ $lang = array(
|
||||
'email_alignment' => 'Email Alignment',
|
||||
'pdf_preview_location' => 'PDF Preview Location',
|
||||
'mailgun' => 'Mailgun',
|
||||
'brevo' => 'Brevo',
|
||||
'postmark' => 'Postmark',
|
||||
'microsoft' => 'Microsoft',
|
||||
'click_plus_to_create_record' => 'Click + to create a record',
|
||||
@ -5100,6 +5103,8 @@ $lang = array(
|
||||
'drop_files_here' => 'Drop files here',
|
||||
'upload_files' => 'Upload Files',
|
||||
'download_e_invoice' => 'Download E-Invoice',
|
||||
'download_e_credit' => 'Download E-Credit',
|
||||
'download_e_quote' => 'Download E-Quote',
|
||||
'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',
|
||||
@ -5254,7 +5259,17 @@ $lang = array(
|
||||
'expense_payment_type_help' => 'The default expense payment type to be used',
|
||||
'paylater' => 'Pay in 4',
|
||||
'payment_provider' => 'Payment Provider',
|
||||
|
||||
'select_email_provider' => 'Set your email as the sending user',
|
||||
'purchase_order_items' => 'Purchase Order Items',
|
||||
'csv_rows_length' => 'No data found in this CSV file',
|
||||
'accept_payments_online' => 'Accept Payments Online',
|
||||
'all_payment_gateways' => 'View all payment gateways',
|
||||
'product_cost' => 'Product cost',
|
||||
'enable_rappen_roudning' => 'Enable Rappen Rounding',
|
||||
'enable_rappen_rounding_help' => 'Rounds totals to nearest 5',
|
||||
'duration_words' => 'Duration in words',
|
||||
'upcoming_recurring_invoices' => 'Upcoming Recurring Invoices',
|
||||
'total_invoices' => 'Total Invoices',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -460,9 +460,9 @@ $lang = array(
|
||||
'edit_token' => 'Edit Token',
|
||||
'delete_token' => 'Delete Token',
|
||||
'token' => 'Token',
|
||||
'add_gateway' => 'Add Payment Gateway',
|
||||
'delete_gateway' => 'Delete Gateway',
|
||||
'edit_gateway' => 'Edit Gateway',
|
||||
'add_gateway' => 'Afegiu passarel·la de pagament',
|
||||
'delete_gateway' => 'Suprimeix la passarel·la de pagament',
|
||||
'edit_gateway' => 'Edita la passarel·la de pagament',
|
||||
'updated_gateway' => 'Successfully updated gateway',
|
||||
'created_gateway' => 'Successfully created gateway',
|
||||
'deleted_gateway' => 'Successfully deleted gateway',
|
||||
@ -506,8 +506,8 @@ $lang = array(
|
||||
'auto_wrap' => 'Auto Line Wrap',
|
||||
'duplicate_post' => 'Warning: the previous page was submitted twice. The second submission had been ignored.',
|
||||
'view_documentation' => 'View Documentation',
|
||||
'app_title' => 'Free Online Invoicing',
|
||||
'app_description' => 'Invoice Ninja is a free, open-code solution for invoicing and billing customers. With Invoice Ninja, you can easily build and send beautiful invoices from any device that has access to the web. Your clients can print your invoices, download them as pdf files, and even pay you online from within the system.',
|
||||
'app_title' => 'Facturació en línia gratuïta',
|
||||
'app_description' => 'Invoice Ninja és una solució gratuïta de codi obert per a la facturació i facturació dels clients. Amb Invoice Ninja, podeu crear i enviar factures precioses fàcilment des de qualsevol dispositiu que tingui accés al web. Els vostres clients poden imprimir les vostres factures, descarregar-les com a fitxers pdf i fins i tot pagar-vos en línia des del sistema.',
|
||||
'rows' => 'rows',
|
||||
'www' => 'www',
|
||||
'logo' => 'Logo',
|
||||
@ -693,9 +693,9 @@ $lang = array(
|
||||
'disable' => 'Disable',
|
||||
'invoice_quote_number' => 'Invoice and Quote Numbers',
|
||||
'invoice_charges' => 'Invoice Surcharges',
|
||||
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact. <br><br> :error',
|
||||
'notification_invoice_bounced' => 'No hem pogut lliurar la factura :invoice a :contact .<br><br> :error',
|
||||
'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice',
|
||||
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact. <br><br> :error',
|
||||
'notification_quote_bounced' => 'No hem pogut lliurar el pressupost :invoice a :contact .<br><br> :error',
|
||||
'notification_quote_bounced_subject' => 'Unable to deliver Quote :invoice',
|
||||
'custom_invoice_link' => 'Custom Invoice Link',
|
||||
'total_invoiced' => 'Total Invoiced',
|
||||
@ -2197,6 +2197,8 @@ $lang = array(
|
||||
'encryption' => 'Encryption',
|
||||
'mailgun_domain' => 'Mailgun Domain',
|
||||
'mailgun_private_key' => 'Mailgun Private Key',
|
||||
'brevo_domain' => 'Domini Brevo',
|
||||
'brevo_private_key' => 'Clau privada Brevo',
|
||||
'send_test_email' => 'Send test email',
|
||||
'select_label' => 'Select Label',
|
||||
'label' => 'Label',
|
||||
@ -2362,9 +2364,9 @@ $lang = array(
|
||||
'currency_libyan_dinar' => 'Dinar libi',
|
||||
'currency_silver_troy_ounce' => 'Unça Troia de plata',
|
||||
'currency_gold_troy_ounce' => 'Unça Troia d'or',
|
||||
'currency_nicaraguan_córdoba' => 'Nicaraguan Córdoba',
|
||||
'currency_malagasy_ariary' => 'Malagasy ariary',
|
||||
"currency_tongan_pa_anga" => "Tongan Pa'anga",
|
||||
'currency_nicaraguan_córdoba' => 'Còrdova nicaragüenca',
|
||||
'currency_malagasy_ariary' => 'ariary malgaix',
|
||||
"currency_tongan_pa_anga" => "Pa'anga de Tonga",
|
||||
|
||||
'review_app_help' => 'We hope you\'re enjoying using the app.<br/>If you\'d consider :link we\'d greatly appreciate it!',
|
||||
'writing_a_review' => 'escriu una ressenya',
|
||||
@ -2475,8 +2477,8 @@ $lang = array(
|
||||
'partial_due_date' => 'Data venciment parcial',
|
||||
'task_fields' => 'Task Fields',
|
||||
'product_fields_help' => 'Drag and drop fields to change their order',
|
||||
'custom_value1' => 'Custom Value 1',
|
||||
'custom_value2' => 'Custom Value 2',
|
||||
'custom_value1' => 'Valor personalitzat 1',
|
||||
'custom_value2' => 'Valor personalitzat 2',
|
||||
'enable_two_factor' => 'Two-Factor Authentication',
|
||||
'enable_two_factor_help' => 'Use your phone to confirm your identity when logging in',
|
||||
'two_factor_setup' => 'Two-Factor Setup',
|
||||
@ -3010,7 +3012,7 @@ $lang = array(
|
||||
'hosted_login' => 'Hosted Login',
|
||||
'selfhost_login' => 'Selfhost Login',
|
||||
'google_login' => 'Google Login',
|
||||
'thanks_for_patience' => 'Thank for your patience while we work to implement these features.<br><br>We hope to have them completed in the next few months.<br><br>Until then we\'ll continue to support the',
|
||||
'thanks_for_patience' => 'Gràcies per la vostra paciència mentre treballem per implementar aquestes funcions.<br><br> Esperem tenir-les enllestides en els propers mesos.<br><br> Fins aleshores continuarem donant suport a',
|
||||
'legacy_mobile_app' => 'legacy mobile app',
|
||||
'today' => 'Avui',
|
||||
'current' => 'Actual',
|
||||
@ -3297,9 +3299,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 paid',
|
||||
'marked_invoice_as_paid' => 'La factura s'ha marcat correctament com a pagada',
|
||||
'marked_invoices_as_sent' => 'Successfully marked invoices as sent',
|
||||
'marked_invoices_as_paid' => 'Successfully marked invoices as paid',
|
||||
'marked_invoices_as_paid' => 'S'han marcat correctament les factures com a pagades',
|
||||
'activity_57' => 'System failed to email invoice :invoice',
|
||||
'custom_value3' => 'Custom Value 3',
|
||||
'custom_value4' => 'Custom Value 4',
|
||||
@ -3328,7 +3330,7 @@ $lang = array(
|
||||
'credit_number_counter' => 'Credit Number Counter',
|
||||
'reset_counter_date' => 'Reset Counter Date',
|
||||
'counter_padding' => 'Counter Padding',
|
||||
'shared_invoice_quote_counter' => 'Share Invoice/Quote Counter',
|
||||
'shared_invoice_quote_counter' => 'Comparteix factura/comptador de pressupostos',
|
||||
'default_tax_name_1' => 'Default Tax Name 1',
|
||||
'default_tax_rate_1' => 'Default Tax Rate 1',
|
||||
'default_tax_name_2' => 'Default Tax Name 2',
|
||||
@ -3639,9 +3641,9 @@ $lang = array(
|
||||
'send_date' => 'Send Date',
|
||||
'auto_bill_on' => 'Auto Bill On',
|
||||
'minimum_under_payment_amount' => 'Minimum Under Payment Amount',
|
||||
'allow_over_payment' => 'Allow Overpayment',
|
||||
'allow_over_payment' => 'Permetre el pagament en excés',
|
||||
'allow_over_payment_help' => 'Support paying extra to accept tips',
|
||||
'allow_under_payment' => 'Allow Underpayment',
|
||||
'allow_under_payment' => 'Permetre el pagament insuficient',
|
||||
'allow_under_payment_help' => 'Support paying at minimum the partial/deposit amount',
|
||||
'test_mode' => 'Test Mode',
|
||||
'calculated_rate' => 'Calculated Rate',
|
||||
@ -3821,7 +3823,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! Glad to see you.',
|
||||
'account_login_text' => 'Benvingut! Content de veure't.',
|
||||
'request_cancellation' => 'Request cancellation',
|
||||
'delete_payment_method' => 'Delete Payment Method',
|
||||
'about_to_delete_payment_method' => 'You are about to delete the payment method.',
|
||||
@ -3868,7 +3870,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Cancellation pending, we\'ll be in touch!',
|
||||
'list_of_payments' => 'List of payments',
|
||||
'payment_details' => 'Details of the payment',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_invoices' => 'Factures associades',
|
||||
'list_of_payment_methods' => 'List of payment methods',
|
||||
'payment_method_details' => 'Details of payment method',
|
||||
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
|
||||
@ -3935,11 +3937,11 @@ $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' => 'Saldo del compte',
|
||||
'thanks' => 'Thanks',
|
||||
'minimum_required_payment' => 'Minimum required payment is :amount',
|
||||
'under_payments_disabled' => 'Company doesn\'t support underpayments.',
|
||||
'over_payments_disabled' => 'Company doesn\'t support overpayments.',
|
||||
'under_payments_disabled' => 'L'empresa no admet pagaments insuficients.',
|
||||
'over_payments_disabled' => 'L'empresa no admet pagaments en excés.',
|
||||
'saved_at' => 'Saved at :time',
|
||||
'credit_payment' => 'Credit applied to Invoice :invoice_number',
|
||||
'credit_subject' => 'New credit :number from :account',
|
||||
@ -3960,7 +3962,7 @@ $lang = array(
|
||||
'notification_invoice_reminder1_sent_subject' => 'Reminder 1 for Invoice :invoice was sent to :client',
|
||||
'notification_invoice_reminder2_sent_subject' => 'Reminder 2 for Invoice :invoice was sent to :client',
|
||||
'notification_invoice_reminder3_sent_subject' => 'Reminder 3 for Invoice :invoice was sent to :client',
|
||||
'notification_invoice_custom_sent_subject' => 'Custom reminder for Invoice :invoice was sent to :client',
|
||||
'notification_invoice_custom_sent_subject' => 'S'ha enviat un recordatori personalitzat per a la factura :invoice a :client',
|
||||
'notification_invoice_reminder_endless_sent_subject' => 'Endless reminder for Invoice :invoice was sent to :client',
|
||||
'assigned_user' => 'Assigned User',
|
||||
'setup_steps_notice' => 'To proceed to next step, make sure you test each section.',
|
||||
@ -4217,7 +4219,7 @@ $lang = array(
|
||||
'direct_debit' => 'Direct Debit',
|
||||
'clone_to_expense' => 'Clone to Expense',
|
||||
'checkout' => 'Checkout',
|
||||
'acss' => 'ACSS Debit',
|
||||
'acss' => 'Dèbit ACSS',
|
||||
'invalid_amount' => 'Invalid amount. Number/Decimal values only.',
|
||||
'client_payment_failure_body' => 'Payment for Invoice :invoice for amount :amount failed.',
|
||||
'browser_pay' => 'Google Pay, Apple Pay, Microsoft Pay',
|
||||
@ -4285,7 +4287,7 @@ $lang = array(
|
||||
'include_drafts' => 'Include Drafts',
|
||||
'include_drafts_help' => 'Include draft records in reports',
|
||||
'is_invoiced' => 'Is Invoiced',
|
||||
'change_plan' => 'Manage Plan',
|
||||
'change_plan' => 'Gestionar el Pla',
|
||||
'persist_data' => 'Persist Data',
|
||||
'customer_count' => 'Customer Count',
|
||||
'verify_customers' => 'Verify Customers',
|
||||
@ -4614,8 +4616,8 @@ $lang = array(
|
||||
'search_purchase_order' => 'Search Purchase Order',
|
||||
'search_purchase_orders' => 'Search Purchase Orders',
|
||||
'login_url' => 'Login URL',
|
||||
'enable_applying_payments' => 'Manual Overpayments',
|
||||
'enable_applying_payments_help' => 'Support adding an overpayment amount manually on a payment',
|
||||
'enable_applying_payments' => 'Pagaments excessius manuals',
|
||||
'enable_applying_payments_help' => 'Admet l'addició manual d'un import de sobrepagament en un pagament',
|
||||
'stock_quantity' => 'Stock Quantity',
|
||||
'notification_threshold' => 'Notification Threshold',
|
||||
'track_inventory' => 'Track Inventory',
|
||||
@ -4847,6 +4849,7 @@ $lang = array(
|
||||
'email_alignment' => 'Email Alignment',
|
||||
'pdf_preview_location' => 'PDF Preview Location',
|
||||
'mailgun' => 'Mailgun',
|
||||
'brevo' => 'Brevo',
|
||||
'postmark' => 'Postmark',
|
||||
'microsoft' => 'Microsoft',
|
||||
'click_plus_to_create_record' => 'Click + to create a record',
|
||||
@ -4866,8 +4869,8 @@ $lang = array(
|
||||
'all_clients' => 'Tots els clients',
|
||||
'show_aging_table' => 'Veure taula de compliment',
|
||||
'show_payments_table' => 'Veure taula de pagaments',
|
||||
'only_clients_with_invoices' => 'Only Clients with Invoices',
|
||||
'email_statement' => 'Email Statement',
|
||||
'only_clients_with_invoices' => 'Només Clients amb Factures',
|
||||
'email_statement' => 'Declaració de correu electrònic',
|
||||
'once' => 'Una volta',
|
||||
'schedules' => 'Calendaris',
|
||||
'new_schedule' => 'Nou calendari',
|
||||
@ -4910,7 +4913,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' => 'Click here to see all variables.',
|
||||
'click_to_variables' => 'Feu clic aquí per veure totes les 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',
|
||||
@ -4925,335 +4928,347 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'No hi ha cap tasca cobrable a aquest projecte',
|
||||
'authorization_failure' => 'Permisos insuficients per a realitzar aquesta acció',
|
||||
'authorization_sms_failure' => 'Verifiqueu el vostre compte per a poder enviar missatges de correu.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'white_label_body' => 'Gràcies per comprar una llicència de marca blanca.<br><br> La vostra clau de llicència és:<br><br> :license_key<br><br> Podeu gestionar la vostra llicència aquí: https://invoiceninja.invoicing.co/client/login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Transferència Interac E',
|
||||
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
|
||||
'xinvoice_no_buyers_reference' => "No buyer's reference given",
|
||||
'xinvoice_online_payment' => 'The invoice needs to be paid online via the provided link',
|
||||
'pre_payment' => 'Pre Payment',
|
||||
'number_of_payments' => 'Number of payments',
|
||||
'number_of_payments_helper' => 'The number of times this payment will be made',
|
||||
'pre_payment_indefinitely' => 'Continue until cancelled',
|
||||
'notification_payment_emailed' => 'Payment :payment was emailed to :client',
|
||||
'notification_payment_emailed_subject' => 'Payment :payment was emailed',
|
||||
'record_not_found' => 'Record not found',
|
||||
'minimum_payment_amount' => 'Minimum Payment Amount',
|
||||
'client_initiated_payments' => 'Client Initiated Payments',
|
||||
'client_initiated_payments_help' => 'Support making a payment in the client portal without an invoice',
|
||||
'share_invoice_quote_columns' => 'Share Invoice/Quote Columns',
|
||||
'cc_email' => 'CC Email',
|
||||
'payment_balance' => 'Payment Balance',
|
||||
'view_report_permission' => 'Allow user to access the reports, data is limited to available permissions',
|
||||
'activity_138' => 'Payment :payment was emailed to :client',
|
||||
'one_time_products' => 'One-Time Products',
|
||||
'optional_one_time_products' => 'Optional One-Time Products',
|
||||
'required' => 'Required',
|
||||
'hidden' => 'Hidden',
|
||||
'payment_links' => 'Payment Links',
|
||||
'payment_link' => 'Payment Link',
|
||||
'new_payment_link' => 'New Payment Link',
|
||||
'edit_payment_link' => 'Edit Payment Link',
|
||||
'created_payment_link' => 'Successfully created payment link',
|
||||
'updated_payment_link' => 'Successfully updated payment link',
|
||||
'archived_payment_link' => 'Successfully archived payment link',
|
||||
'deleted_payment_link' => 'Successfully deleted payment link',
|
||||
'removed_payment_link' => 'Successfully removed payment link',
|
||||
'restored_payment_link' => 'Successfully restored payment link',
|
||||
'search_payment_link' => 'Search 1 Payment Link',
|
||||
'search_payment_links' => 'Search :count Payment Links',
|
||||
'increase_prices' => 'Increase Prices',
|
||||
'update_prices' => 'Update Prices',
|
||||
'incresed_prices' => 'Successfully queued prices to be increased',
|
||||
'updated_prices' => 'Successfully queued prices to be updated',
|
||||
'api_token' => 'API Token',
|
||||
'api_key' => 'API Key',
|
||||
'endpoint' => 'Endpoint',
|
||||
'not_billable' => 'Not Billable',
|
||||
'allow_billable_task_items' => 'Allow Billable Task Items',
|
||||
'allow_billable_task_items_help' => 'Enable configuring which task items are billed',
|
||||
'show_task_item_description' => 'Show Task Item Description',
|
||||
'show_task_item_description_help' => 'Enable specifying task item descriptions',
|
||||
'email_record' => 'Email Record',
|
||||
'invoice_product_columns' => 'Invoice Product Columns',
|
||||
'quote_product_columns' => 'Quote Product Columns',
|
||||
'vendors' => 'Vendors',
|
||||
'product_sales' => 'Product Sales',
|
||||
'user_sales_report_header' => 'User sales report for client/s :client from :start_date to :end_date',
|
||||
'client_balance_report' => 'Customer balance report',
|
||||
'client_sales_report' => 'Customer sales report',
|
||||
'user_sales_report' => 'User sales report',
|
||||
'aged_receivable_detailed_report' => 'Aged Receivable Detailed Report',
|
||||
'aged_receivable_summary_report' => 'Aged Receivable Summary Report',
|
||||
'taxable_amount' => 'Taxable Amount',
|
||||
'tax_summary' => 'Tax Summary',
|
||||
'oauth_mail' => 'OAuth / Mail',
|
||||
'preferences' => 'Preferences',
|
||||
'analytics' => 'Analytics',
|
||||
'reduced_rate' => 'Reduced Rate',
|
||||
'tax_all' => 'Tax All',
|
||||
'tax_selected' => 'Tax Selected',
|
||||
'version' => 'version',
|
||||
'seller_subregion' => 'Seller Subregion',
|
||||
'calculate_taxes' => 'Calculate Taxes',
|
||||
'calculate_taxes_help' => 'Automatically calculate taxes when saving invoices',
|
||||
'link_expenses' => 'Link Expenses',
|
||||
'converted_client_balance' => 'Converted Client Balance',
|
||||
'converted_payment_balance' => 'Converted Payment Balance',
|
||||
'total_hours' => 'Total Hours',
|
||||
'date_picker_hint' => 'Use +days to set the date in the future',
|
||||
'app_help_link' => 'More information ',
|
||||
'here' => 'here',
|
||||
'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',
|
||||
'xinvoice_payable' => 'Pagament dins de :payeddue dies nets fins a :paydate',
|
||||
'xinvoice_no_buyers_reference' => "No s'ha donat cap referència del comprador",
|
||||
'xinvoice_online_payment' => 'La factura s'ha de pagar en línia mitjançant l'enllaç proporcionat',
|
||||
'pre_payment' => 'Prepagament',
|
||||
'number_of_payments' => 'Nombre de pagaments',
|
||||
'number_of_payments_helper' => 'El nombre de vegades que es farà aquest pagament',
|
||||
'pre_payment_indefinitely' => 'Continueu fins que es cancel·li',
|
||||
'notification_payment_emailed' => 'El pagament :payment s'ha enviat per correu electrònic a :client',
|
||||
'notification_payment_emailed_subject' => 'El pagament :payment s'ha enviat per correu electrònic',
|
||||
'record_not_found' => 'No s'ha trobat el registre',
|
||||
'minimum_payment_amount' => 'Import mínim de pagament',
|
||||
'client_initiated_payments' => 'Pagaments iniciats pel client',
|
||||
'client_initiated_payments_help' => 'Suport per realitzar un pagament al portal del client sense factura',
|
||||
'share_invoice_quote_columns' => 'Comparteix les columnes de la factura/de la cotització',
|
||||
'cc_email' => 'Correu electrònic CC',
|
||||
'payment_balance' => 'Balanç de pagament',
|
||||
'view_report_permission' => 'Permet a l'usuari accedir als informes, les dades es limiten als permisos disponibles',
|
||||
'activity_138' => 'El pagament :payment s'ha enviat per correu electrònic a :client',
|
||||
'one_time_products' => 'Productes únics',
|
||||
'optional_one_time_products' => 'Productes opcionals d'una sola vegada',
|
||||
'required' => 'Obligatori',
|
||||
'hidden' => 'Ocult',
|
||||
'payment_links' => 'Enllaços de pagament',
|
||||
'payment_link' => 'Enllaç de pagament',
|
||||
'new_payment_link' => 'Nou enllaç de pagament',
|
||||
'edit_payment_link' => 'Edita l'enllaç de pagament',
|
||||
'created_payment_link' => 'L'enllaç de pagament s'ha creat correctament',
|
||||
'updated_payment_link' => 'L'enllaç de pagament s'ha actualitzat correctament',
|
||||
'archived_payment_link' => 'L'enllaç de pagament s'ha arxivat correctament',
|
||||
'deleted_payment_link' => 'L'enllaç de pagament s'ha suprimit correctament',
|
||||
'removed_payment_link' => 'L'enllaç de pagament s'ha eliminat correctament',
|
||||
'restored_payment_link' => 'L'enllaç de pagament s'ha restaurat correctament',
|
||||
'search_payment_link' => 'Cerca 1 enllaç de pagament',
|
||||
'search_payment_links' => 'Cerca :count Enllaços de pagament',
|
||||
'increase_prices' => 'Augmentar els preus',
|
||||
'update_prices' => 'Actualitzar preus',
|
||||
'incresed_prices' => 'Els preus s'han fet cua amb èxit per augmentar',
|
||||
'updated_prices' => 'Els preus s'han fet a la cua correctament per actualitzar-los',
|
||||
'api_token' => 'Token API',
|
||||
'api_key' => 'Clau de l'API',
|
||||
'endpoint' => 'Punt final',
|
||||
'not_billable' => 'No facturable',
|
||||
'allow_billable_task_items' => 'Permetre elements de tasques facturables',
|
||||
'allow_billable_task_items_help' => 'Habiliteu la configuració de quins elements de la tasca es facturaran',
|
||||
'show_task_item_description' => 'Mostra la descripció de l'element de la tasca',
|
||||
'show_task_item_description_help' => 'Habiliteu l'especificació de descripcions d'elements de tasca',
|
||||
'email_record' => 'Registre de correu electrònic',
|
||||
'invoice_product_columns' => 'Columnes de producte de factura',
|
||||
'quote_product_columns' => 'Cotitzar les columnes del producte',
|
||||
'vendors' => 'Venedors',
|
||||
'product_sales' => 'Venda de productes',
|
||||
'user_sales_report_header' => 'Informe de vendes d'usuari per al client/s :client de :start _date a :end _date',
|
||||
'client_balance_report' => 'Informe del saldo del client',
|
||||
'client_sales_report' => 'Informe de vendes al client',
|
||||
'user_sales_report' => 'Informe de vendes dels usuaris',
|
||||
'aged_receivable_detailed_report' => 'Informe detallat d'antiguitat',
|
||||
'aged_receivable_summary_report' => 'Informe resum de comptes a cobrar antics',
|
||||
'taxable_amount' => 'Import imposable',
|
||||
'tax_summary' => 'Resum fiscal',
|
||||
'oauth_mail' => 'OAuth/Correu',
|
||||
'preferences' => 'Preferències',
|
||||
'analytics' => 'Analítica',
|
||||
'reduced_rate' => 'Tarifa reduïda',
|
||||
'tax_all' => 'Impostos tots',
|
||||
'tax_selected' => 'Impost seleccionat',
|
||||
'version' => 'versió',
|
||||
'seller_subregion' => 'Subregió del venedor',
|
||||
'calculate_taxes' => 'Calcula els impostos',
|
||||
'calculate_taxes_help' => 'Calcula automàticament els impostos en desar les factures',
|
||||
'link_expenses' => 'Despeses d'enllaç',
|
||||
'converted_client_balance' => 'Saldo de client convertit',
|
||||
'converted_payment_balance' => 'Saldo de pagament convertit',
|
||||
'total_hours' => 'Total Hores',
|
||||
'date_picker_hint' => 'Utilitzeu +dies per establir la data en el futur',
|
||||
'app_help_link' => 'Més informació ',
|
||||
'here' => 'aquí',
|
||||
'industry_Restaurant & Catering' => 'Restauració i càtering',
|
||||
'show_credits_table' => 'Mostra la taula de crèdits',
|
||||
'manual_payment' => 'Manual de pagament',
|
||||
'tax_summary_report' => 'Informe resum fiscal',
|
||||
'tax_category' => 'Categoria Tributària',
|
||||
'physical_goods' => 'Béns físics',
|
||||
'digital_products' => 'Productes digitals',
|
||||
'services' => 'Serveis',
|
||||
'shipping' => 'Enviament',
|
||||
'tax_exempt' => 'Exempt d'impostos',
|
||||
'late_fee_added_locked_invoice' => 'Comissió de retard per a la factura :invoice afegit a :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",
|
||||
'routing_id' => 'ID d'encaminament',
|
||||
'enable_e_invoice' => 'Activa la factura electrònica',
|
||||
'e_invoice_type' => 'Tipus de factura electrònica',
|
||||
'reduced_tax' => 'Impost reduït',
|
||||
'override_tax' => 'Anul·lar l'impost',
|
||||
'zero_rated' => 'Valoració zero',
|
||||
'reverse_tax' => 'Impost invers',
|
||||
'updated_tax_category' => 'S'ha actualitzat correctament la categoria fiscal',
|
||||
'updated_tax_categories' => 'S'han actualitzat correctament les categories fiscals',
|
||||
'set_tax_category' => 'Estableix la categoria fiscal',
|
||||
'payment_manual' => 'Manual de pagament',
|
||||
'expense_payment_type' => 'Tipus de pagament de despeses',
|
||||
'payment_type_Cash App' => 'Aplicació Cash',
|
||||
'rename' => 'Canvia el nom',
|
||||
'renamed_document' => 'S'ha canviat de nom el document correctament',
|
||||
'e_invoice' => 'Factura electrònica',
|
||||
'light_dark_mode' => 'Mode clar/fosc',
|
||||
'activities' => 'Activitats',
|
||||
'recent_transactions' => "Aquestes són les transaccions més recents de la vostra empresa:",
|
||||
'country_Palestine' => "Palestina",
|
||||
'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_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',
|
||||
'duties' => 'Deures',
|
||||
'order_number' => 'Número d'ordre',
|
||||
'order_id' => 'Ordre',
|
||||
'total_invoices_outstanding' => 'Total de factures pendents',
|
||||
'recent_activity' => 'Activitat recent',
|
||||
'enable_auto_bill' => 'Activa la facturació automàtica',
|
||||
'email_count_invoices' => 'Correu electrònic :count factures',
|
||||
'invoice_task_item_description' => 'Descripció de l'element de la tasca de la factura',
|
||||
'invoice_task_item_description_help' => 'Afegiu la descripció de l'article a les línies de la factura',
|
||||
'next_send_time' => 'Pròxima hora d'enviament',
|
||||
'uploaded_certificate' => 'Certificat carregat correctament',
|
||||
'certificate_set' => 'Conjunt de certificats',
|
||||
'certificate_not_set' => 'Certificat no establert',
|
||||
'passphrase_set' => 'Conjunt de frase de contrasenya',
|
||||
'passphrase_not_set' => 'No s'ha definit la contrasenya',
|
||||
'upload_certificate' => 'Carrega el certificat',
|
||||
'certificate_passphrase' => 'Frase de contrasenya del certificat',
|
||||
'valid_vat_number' => 'Número d'IVA vàlid',
|
||||
'react_notification_link' => 'Enllaços de notificació de reacció',
|
||||
'react_notification_link_help' => 'Els correus electrònics de l'administrador contindran enllaços a l'aplicació react',
|
||||
'show_task_billable' => 'Mostra la tasca facturable',
|
||||
'credit_item' => 'Partida de crèdit',
|
||||
'drop_file_here' => 'Deixa anar el fitxer aquí',
|
||||
'files' => 'Fitxers',
|
||||
'camera' => 'Càmera',
|
||||
'gallery' => 'Galeria',
|
||||
'project_location' => 'Localització del projecte',
|
||||
'add_gateway_help_message' => 'Afegiu una passarel·la de pagament (és a dir, Stripe, WePay o PayPal) per acceptar pagaments en línia',
|
||||
'lang_Hungarian' => 'hongarès',
|
||||
'use_mobile_to_manage_plan' => 'Utilitzeu la configuració de la vostra subscripció telefònica per gestionar el vostre pla',
|
||||
'item_tax3' => 'Article Impost3',
|
||||
'item_tax_rate1' => 'Tipus impositiu de l'article 1',
|
||||
'item_tax_rate2' => 'Tipus impositiu de l'article 2',
|
||||
'item_tax_rate3' => 'Tipus impositiu de l'article 3',
|
||||
'buy_price' => 'Preu de compra',
|
||||
'country_Macedonia' => 'Macedònia',
|
||||
'admin_initiated_payments' => 'Pagaments iniciats per l'administració',
|
||||
'admin_initiated_payments_help' => 'Suport per introduir un pagament al portal d'administració sense factura',
|
||||
'paid_date' => 'Data de pagament',
|
||||
'downloaded_entities' => 'S'enviarà un correu electrònic amb els PDF',
|
||||
'lang_French - Swiss' => 'francès - suís',
|
||||
'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',
|
||||
'income' => 'Ingressos',
|
||||
'amount_received_help' => 'Introduïu un valor aquí si l'import total rebut era MÉS que l'import de la factura o quan registreu un pagament sense factures. En cas contrari, aquest camp s'ha de deixar en blanc.',
|
||||
'vendor_phone' => 'Telèfon del venedor',
|
||||
'mercado_pago' => 'Mercat 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 made 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',
|
||||
'show_document_preview' => 'Show Document Preview',
|
||||
'cash_accounting' => 'Cash accounting',
|
||||
'click_or_drop_files_here' => 'Click or drop files here',
|
||||
'set_public' => 'Set public',
|
||||
'set_private' => 'Set private',
|
||||
'paypal_paylater' => 'Paga en 4',
|
||||
'paid_date' => 'Data de pagament',
|
||||
'district' => 'Districte',
|
||||
'region' => 'Regió',
|
||||
'county' => 'comtat',
|
||||
'tax_details' => 'Detalls fiscals',
|
||||
'activity_10_online' => ':contact ha fet el pagament :payment per a la factura :invoice per a :client',
|
||||
'activity_10_manual' => ':user ha introduït el pagament :payment per a la factura :invoice per a :client',
|
||||
'default_payment_type' => 'Tipus de pagament predeterminat',
|
||||
'number_precision' => 'Precisió numèrica',
|
||||
'number_precision_help' => 'Controla el nombre de decimals admesos a la interfície',
|
||||
'is_tax_exempt' => 'Exempt d'impostos',
|
||||
'drop_files_here' => 'Deixeu fitxers aquí',
|
||||
'upload_files' => 'Carregar fitxers',
|
||||
'download_e_invoice' => 'Descarrega la factura electrònica',
|
||||
'download_e_credit' => 'Descarrega E-Credit',
|
||||
'download_e_quote' => 'Descarregar E-Quote',
|
||||
'triangular_tax_info' => 'Transacció triangular intracomunitària',
|
||||
'intracommunity_tax_info' => 'Lliurament intracomunitari lliure d'impostos',
|
||||
'reverse_tax_info' => 'Tingueu en compte que aquest subministrament està subjecte a càrrec invers',
|
||||
'currency_nicaraguan_cordoba' => 'Còrdova nicaragüenca',
|
||||
'public' => 'Públic',
|
||||
'private' => 'Privat',
|
||||
'image' => 'Imatge',
|
||||
'other' => 'Altres',
|
||||
'linked_to' => 'Vinculat a',
|
||||
'file_saved_in_path' => 'El fitxer s'ha desat a :path',
|
||||
'unlinked_transactions' => 'Transaccions :count desenllaçades correctament',
|
||||
'unlinked_transaction' => 'La transacció s'ha desenllaçat correctament',
|
||||
'view_dashboard_permission' => 'Permet a l'usuari accedir al tauler, les dades es limiten als permisos disponibles',
|
||||
'marked_sent_credits' => 'S'han enviat crèdits marcats correctament',
|
||||
'show_document_preview' => 'Mostra la vista prèvia del document',
|
||||
'cash_accounting' => 'Comptabilitat de caixa',
|
||||
'click_or_drop_files_here' => 'Feu clic o deixeu anar els fitxers aquí',
|
||||
'set_public' => 'Establir públic',
|
||||
'set_private' => 'Estableix privat',
|
||||
'individual' => 'Individual',
|
||||
'business' => 'Business',
|
||||
'partnership' => 'Partnership',
|
||||
'trust' => 'Trust',
|
||||
'charity' => 'Charity',
|
||||
'government' => 'Government',
|
||||
'in_stock_quantity' => 'Stock quantity',
|
||||
'vendor_contact' => 'Vendor Contact',
|
||||
'expense_status_4' => 'Unpaid',
|
||||
'expense_status_5' => 'Paid',
|
||||
'ziptax_help' => 'Note: this feature requires a Zip-Tax API key to lookup US sales tax by address',
|
||||
'cache_data' => 'Cache Data',
|
||||
'unknown' => 'Unknown',
|
||||
'webhook_failure' => 'Webhook Failure',
|
||||
'email_opened' => 'Email Opened',
|
||||
'email_delivered' => 'Email Delivered',
|
||||
'log' => 'Log',
|
||||
'classification' => 'Classification',
|
||||
'stock_quantity_number' => 'Stock :quantity',
|
||||
'upcoming' => 'Upcoming',
|
||||
'client_contact' => 'Client Contact',
|
||||
'uncategorized' => 'Uncategorized',
|
||||
'login_notification' => 'Login Notification',
|
||||
'login_notification_help' => 'Sends an email notifying that a login has taken place.',
|
||||
'payment_refund_receipt' => 'Payment Refund Receipt # :number',
|
||||
'payment_receipt' => 'Payment Receipt # :number',
|
||||
'load_template_description' => 'The template will be applied to following:',
|
||||
'run_template' => 'Run template',
|
||||
'statement_design' => 'Statement Design',
|
||||
'delivery_note_design' => 'Delivery Note Design',
|
||||
'payment_receipt_design' => 'Payment Receipt Design',
|
||||
'payment_refund_design' => 'Payment Refund Design',
|
||||
'task_extension_banner' => 'Add the Chrome extension to manage your tasks',
|
||||
'watch_video' => 'Watch Video',
|
||||
'view_extension' => 'View Extension',
|
||||
'reactivate_email' => 'Reactivate Email',
|
||||
'email_reactivated' => 'Successfully reactivated email',
|
||||
'template_help' => 'Enable using the design as a template',
|
||||
'business' => 'Negocis',
|
||||
'partnership' => 'Associació',
|
||||
'trust' => 'Confia',
|
||||
'charity' => 'Caritat',
|
||||
'government' => 'Govern',
|
||||
'in_stock_quantity' => 'Quantitat d'estoc',
|
||||
'vendor_contact' => 'Contacte del venedor',
|
||||
'expense_status_4' => 'Sense pagar',
|
||||
'expense_status_5' => 'Pagat',
|
||||
'ziptax_help' => 'Nota: aquesta funció requereix una clau API Zip-Tax per cercar l'impost de vendes dels EUA per adreça',
|
||||
'cache_data' => 'Dades de la memòria cau',
|
||||
'unknown' => 'Desconegut',
|
||||
'webhook_failure' => 'Error del webhook',
|
||||
'email_opened' => 'Correu electrònic obert',
|
||||
'email_delivered' => 'Correu electrònic lliurat',
|
||||
'log' => 'Registre',
|
||||
'classification' => 'Classificació',
|
||||
'stock_quantity_number' => 'Stock: quantitat',
|
||||
'upcoming' => 'Properament',
|
||||
'client_contact' => 'Contacte amb el client',
|
||||
'uncategorized' => 'Sense categoria',
|
||||
'login_notification' => 'Notificació d'inici de sessió',
|
||||
'login_notification_help' => 'Envia un correu electrònic notificant que s'ha iniciat una sessió.',
|
||||
'payment_refund_receipt' => 'Rebut de devolució del pagament # :number',
|
||||
'payment_receipt' => 'Rebut de pagament # :number',
|
||||
'load_template_description' => 'La plantilla s'aplicarà a:',
|
||||
'run_template' => 'Executar plantilla',
|
||||
'statement_design' => 'Disseny de declaracions',
|
||||
'delivery_note_design' => 'Disseny de albarans',
|
||||
'payment_receipt_design' => 'Disseny del rebut de pagament',
|
||||
'payment_refund_design' => 'Disseny de devolució de pagament',
|
||||
'task_extension_banner' => 'Afegiu l'extensió de Chrome per gestionar les vostres tasques',
|
||||
'watch_video' => 'Mira el vídeo',
|
||||
'view_extension' => 'Visualitza l'extensió',
|
||||
'reactivate_email' => 'Reactiva el correu electrònic',
|
||||
'email_reactivated' => 'Correu electrònic reactivat correctament',
|
||||
'template_help' => 'Habiliteu l'ús del disseny com a plantilla',
|
||||
'quarter' => 'Quarter',
|
||||
'item_description' => 'Item Description',
|
||||
'task_item' => 'Task Item',
|
||||
'record_state' => 'Record State',
|
||||
'save_files_to_this_folder' => 'Save files to this folder',
|
||||
'downloads_folder' => 'Downloads Folder',
|
||||
'total_invoiced_quotes' => 'Invoiced Quotes',
|
||||
'total_invoice_paid_quotes' => 'Invoice Paid Quotes',
|
||||
'downloads_folder_does_not_exist' => 'The downloads folder does not exist :value',
|
||||
'user_logged_in_notification' => 'User Logged in Notification',
|
||||
'user_logged_in_notification_help' => 'Send an email when logging in from a new location',
|
||||
'payment_email_all_contacts' => 'Payment Email To All Contacts',
|
||||
'payment_email_all_contacts_help' => 'Sends the payment email to all contacts when enabled',
|
||||
'add_line' => 'Add Line',
|
||||
'activity_139' => 'Expense :expense notification sent to :contact',
|
||||
'vendor_notification_subject' => 'Confirmation of payment :amount sent to :vendor',
|
||||
'vendor_notification_body' => 'Payment processed for :amount dated :payment_date. <br>[Transaction Reference: :transaction_reference]',
|
||||
'receipt' => 'Receipt',
|
||||
'charges' => 'Charges',
|
||||
'email_report' => 'Email Report',
|
||||
'payment_type_Pay Later' => 'Pay Later',
|
||||
'payment_type_credit' => 'Payment Type Credit',
|
||||
'payment_type_debit' => 'Payment Type Debit',
|
||||
'send_emails_to' => 'Send Emails To',
|
||||
'primary_contact' => 'Primary Contact',
|
||||
'all_contacts' => 'All Contacts',
|
||||
'insert_below' => 'Insert Below',
|
||||
'nordigen_handler_subtitle' => 'Bank account authentication. Selecting your institution to complete the request with your account credentials.',
|
||||
'nordigen_handler_error_heading_unknown' => 'An error has occured',
|
||||
'nordigen_handler_error_contents_unknown' => 'An unknown error has occurred! Reason:',
|
||||
'nordigen_handler_error_heading_token_invalid' => 'Invalid Token',
|
||||
'nordigen_handler_error_contents_token_invalid' => 'The provided token was invalid. Contact support for help, if this issue persists.',
|
||||
'nordigen_handler_error_heading_account_config_invalid' => 'Missing Credentials',
|
||||
'nordigen_handler_error_contents_account_config_invalid' => 'Invalid or missing credentials for Gocardless Bank Account Data. Contact support for help, if this issue persists.',
|
||||
'nordigen_handler_error_heading_not_available' => 'Not Available',
|
||||
'nordigen_handler_error_contents_not_available' => 'Feature unavailable, enterprise plan only.',
|
||||
'nordigen_handler_error_heading_institution_invalid' => 'Invalid Institution',
|
||||
'nordigen_handler_error_contents_institution_invalid' => 'The provided institution-id is invalid or no longer valid.',
|
||||
'nordigen_handler_error_heading_ref_invalid' => 'Invalid Reference',
|
||||
'nordigen_handler_error_contents_ref_invalid' => 'GoCardless did not provide a valid reference. Please run flow again and contact support, if this issue persists.',
|
||||
'nordigen_handler_error_heading_not_found' => 'Invalid Requisition',
|
||||
'nordigen_handler_error_contents_not_found' => 'GoCardless did not provide a valid reference. Please run flow again and contact support, if this issue persists.',
|
||||
'nordigen_handler_error_heading_requisition_invalid_status' => 'Not Ready',
|
||||
'nordigen_handler_error_contents_requisition_invalid_status' => 'You called this site too early. Please finish authorization and refresh this page. Contact support for help, if this issue persists.',
|
||||
'nordigen_handler_error_heading_requisition_no_accounts' => 'No Accounts selected',
|
||||
'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
|
||||
'nordigen_handler_restart' => 'Restart flow.',
|
||||
'nordigen_handler_return' => 'Return to application.',
|
||||
'item_description' => 'Descripció de l'Article',
|
||||
'task_item' => 'Element de la tasca',
|
||||
'record_state' => 'Estat de registre',
|
||||
'save_files_to_this_folder' => 'Desa els fitxers en aquesta carpeta',
|
||||
'downloads_folder' => 'Carpeta de descàrregues',
|
||||
'total_invoiced_quotes' => 'Pressupostos facturats',
|
||||
'total_invoice_paid_quotes' => 'Facturar pressupostos pagats',
|
||||
'downloads_folder_does_not_exist' => 'La carpeta de descàrregues no existeix :value',
|
||||
'user_logged_in_notification' => 'Notificació d'inici de sessió d'usuari',
|
||||
'user_logged_in_notification_help' => 'Envieu un correu electrònic quan inicieu sessió des d'una ubicació nova',
|
||||
'payment_email_all_contacts' => 'Correu electrònic de pagament a tots els contactes',
|
||||
'payment_email_all_contacts_help' => 'Envia el correu electrònic de pagament a tots els contactes quan està activat',
|
||||
'add_line' => 'Afegeix una línia',
|
||||
'activity_139' => 'Notificació de despeses :expense enviada a :contact',
|
||||
'vendor_notification_subject' => 'Confirmació de pagament :amount enviada a :vendor',
|
||||
'vendor_notification_body' => 'Pagament processat per a :amount amb data :payment _data.<br> [Referència de la transacció: :transaction_reference ]',
|
||||
'receipt' => 'Rebut',
|
||||
'charges' => 'Càrrecs',
|
||||
'email_report' => 'Informe per correu electrònic',
|
||||
'payment_type_Pay Later' => 'Paga més tard',
|
||||
'payment_type_credit' => 'Tipus de pagament Crèdit',
|
||||
'payment_type_debit' => 'Tipus de pagament Dèbit',
|
||||
'send_emails_to' => 'Enviar correus electrònics a',
|
||||
'primary_contact' => 'Contacte principal',
|
||||
'all_contacts' => 'Tots els contactes',
|
||||
'insert_below' => 'Insereix a continuació',
|
||||
'nordigen_handler_subtitle' => 'Autenticació del compte bancari. Seleccioneu la vostra institució per completar la sol·licitud amb les credencials del vostre compte.',
|
||||
'nordigen_handler_error_heading_unknown' => 'S'ha produït un error',
|
||||
'nordigen_handler_error_contents_unknown' => 'Ha ocorregut un error desconegut! Motiu:',
|
||||
'nordigen_handler_error_heading_token_invalid' => 'token invàlid',
|
||||
'nordigen_handler_error_contents_token_invalid' => 'El testimoni proporcionat no era vàlid. Contacteu amb l'assistència per obtenir ajuda, si aquest problema persisteix.',
|
||||
'nordigen_handler_error_heading_account_config_invalid' => 'Falten credencials',
|
||||
'nordigen_handler_error_contents_account_config_invalid' => 'Les credencials no són vàlides o falten per a les dades del compte bancari de Gocardless. Contacteu amb l'assistència per obtenir ajuda, si aquest problema persisteix.',
|
||||
'nordigen_handler_error_heading_not_available' => 'No disponible',
|
||||
'nordigen_handler_error_contents_not_available' => 'Funció no disponible, només pla d'empresa.',
|
||||
'nordigen_handler_error_heading_institution_invalid' => 'Institució no vàlida',
|
||||
'nordigen_handler_error_contents_institution_invalid' => 'L'identificador d'institució proporcionat no és vàlid o ja no és vàlid.',
|
||||
'nordigen_handler_error_heading_ref_invalid' => 'Referència no vàlida',
|
||||
'nordigen_handler_error_contents_ref_invalid' => 'GoCardless no ha proporcionat una referència vàlida. Si us plau, torneu a executar el flux i contacteu amb el servei d'assistència si aquest problema persisteix.',
|
||||
'nordigen_handler_error_heading_not_found' => 'Requisit no vàlid',
|
||||
'nordigen_handler_error_contents_not_found' => 'GoCardless no ha proporcionat una referència vàlida. Si us plau, torneu a executar el flux i contacteu amb el servei d'assistència si aquest problema persisteix.',
|
||||
'nordigen_handler_error_heading_requisition_invalid_status' => 'No està llest',
|
||||
'nordigen_handler_error_contents_requisition_invalid_status' => 'Has trucat a aquest lloc massa aviat. Finalitzeu l'autorització i actualitzeu aquesta pàgina. Contacteu amb l'assistència per obtenir ajuda, si aquest problema persisteix.',
|
||||
'nordigen_handler_error_heading_requisition_no_accounts' => 'No s'ha seleccionat cap compte',
|
||||
'nordigen_handler_error_contents_requisition_no_accounts' => 'El servei no ha retornat cap compte vàlid. Penseu en reiniciar el flux.',
|
||||
'nordigen_handler_restart' => 'Reinicieu el flux.',
|
||||
'nordigen_handler_return' => 'Tornar a l'aplicació.',
|
||||
'lang_Lao' => 'Lao',
|
||||
'currency_lao_kip' => 'Lao kip',
|
||||
'yodlee_regions' => 'Regions: USA, UK, Australia & India',
|
||||
'nordigen_regions' => 'Regions: Europe & UK',
|
||||
'select_provider' => 'Select Provider',
|
||||
'nordigen_requisition_subject' => 'Requisition expired, please reauthenticate.',
|
||||
'nordigen_requisition_body' => 'Access to bank account feeds has expired as set in End User Agreement. <br><br>Please log into Invoice Ninja and re-authenticate with your banks to continue receiving transactions.',
|
||||
'yodlee_regions' => 'Regions: EUA, Regne Unit, Austràlia i Índia',
|
||||
'nordigen_regions' => 'Regions: Europa i Regne Unit',
|
||||
'select_provider' => 'Seleccioneu Proveïdor',
|
||||
'nordigen_requisition_subject' => 'La sol·licitud ha caducat, torneu a autenticar.',
|
||||
'nordigen_requisition_body' => 'L'accés als feeds del compte bancari ha caducat tal com s'estableix a l'Acord d'usuari final.<br><br> Inicieu sessió a Invoice Ninja i torneu a autenticar-vos amb els vostres bancs per continuar rebent transaccions.',
|
||||
'participant' => 'Participant',
|
||||
'participant_name' => 'Participant name',
|
||||
'client_unsubscribed' => 'Client unsubscribed from emails.',
|
||||
'client_unsubscribed_help' => 'Client :client has unsubscribed from your e-mails. The client needs to consent to receive future emails from you.',
|
||||
'resubscribe' => 'Resubscribe',
|
||||
'subscribe' => 'Subscribe',
|
||||
'subscribe_help' => 'You are currently subscribed and will continue to receive email communications.',
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'participant_name' => 'Nom del participant',
|
||||
'client_unsubscribed' => 'Client cancel·lat la subscripció dels correus electrònics.',
|
||||
'client_unsubscribed_help' => 'El client :client s'ha cancel·lat la subscripció dels vostres correus electrònics. El client ha de donar el seu consentiment per rebre futurs correus electrònics de la teva part.',
|
||||
'resubscribe' => 'Torna a subscriure't',
|
||||
'subscribe' => 'Subscriu-te',
|
||||
'subscribe_help' => 'Actualment esteu subscrit i continuareu rebent comunicacions per correu electrònic.',
|
||||
'unsubscribe_help' => 'Actualment no estàs subscrit i, per tant, no rebràs correus electrònics en aquest moment.',
|
||||
'notification_purchase_order_bounced' => 'No hem pogut lliurar la comanda de compra :invoice a :contact .<br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'No es pot lliurar la comanda de compra :invoice',
|
||||
'show_pdfhtml_on_mobile' => 'Mostra la versió HTML de l'entitat quan la visualitzes al mòbil',
|
||||
'show_pdfhtml_on_mobile_help' => 'Per millorar la visualització, mostra una versió HTML de la factura/de l'oferta quan la visualitzeu al mòbil.',
|
||||
'please_select_an_invoice_or_credit' => 'Seleccioneu una factura o crèdit',
|
||||
'mobile_version' => 'Versió mòbil',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
'use_available_payments' => 'Use Available Payments',
|
||||
'test_email_sent' => 'Successfully sent email',
|
||||
'gateway_type' => 'Gateway Type',
|
||||
'save_template_body' => 'Would you like to save this import mapping as a template for future use?',
|
||||
'save_as_template' => 'Save Template Mapping',
|
||||
'auto_bill_standard_invoices_help' => 'Auto bill standard invoices on the due date',
|
||||
'auto_bill_on_help' => 'Auto bill on send date OR due date (recurring invoices)',
|
||||
'use_available_credits_help' => 'Apply any credit balances to payments prior to charging a payment method',
|
||||
'use_unapplied_payments' => 'Use unapplied payments',
|
||||
'use_unapplied_payments_help' => 'Apply any payment balances prior to charging a payment method',
|
||||
'pay_later' => 'Paga més tard',
|
||||
'local_domain' => 'Domini local',
|
||||
'verify_peer' => 'Verifiqueu Peer',
|
||||
'nordigen_help' => 'Nota: per connectar un compte, cal una clau d'API GoCardless/Nordigen',
|
||||
'ar_detailed' => 'Comptes a cobrar detallats',
|
||||
'ar_summary' => 'Resum de comptes a cobrar',
|
||||
'client_sales' => 'Vendes al client',
|
||||
'user_sales' => 'Vendes d'usuaris',
|
||||
'iframe_url' => 'URL iFrame',
|
||||
'user_unsubscribed' => 'L'usuari ha cancel·lat la subscripció als correus electrònics :link',
|
||||
'use_available_payments' => 'Utilitzeu els pagaments disponibles',
|
||||
'test_email_sent' => 'Correu electrònic enviat correctament',
|
||||
'gateway_type' => 'Tipus de passarel·la',
|
||||
'save_template_body' => 'Voleu desar aquesta assignació d'importació com a plantilla per a un ús futur?',
|
||||
'save_as_template' => 'Desa el mapatge de plantilles',
|
||||
'auto_bill_standard_invoices_help' => 'Factura automàticament les factures estàndard en la data de venciment',
|
||||
'auto_bill_on_help' => 'Factura automàtica a la data d'enviament O data de venciment (factures recurrents)',
|
||||
'use_available_credits_help' => 'Apliqueu qualsevol saldo de crèdit als pagaments abans de cobrar un mètode de pagament',
|
||||
'use_unapplied_payments' => 'Utilitzeu pagaments no aplicats',
|
||||
'use_unapplied_payments_help' => 'Apliqueu qualsevol saldo de pagament abans de cobrar un mètode de pagament',
|
||||
'payment_terms_help' => 'Sets the default <b>invoice due date</b>',
|
||||
'payment_type_help' => 'Sets the default <b>manual payment type</b>.',
|
||||
'quote_valid_until_help' => 'The number of days that the quote is valid for',
|
||||
'expense_payment_type_help' => 'The default expense payment type to be used',
|
||||
'paylater' => 'Pay in 4',
|
||||
'payment_provider' => 'Payment Provider',
|
||||
|
||||
'quote_valid_until_help' => 'El nombre de dies durant els quals el pressupost és vàlid',
|
||||
'expense_payment_type_help' => 'El tipus de pagament de despeses predeterminat que s'utilitzarà',
|
||||
'paylater' => 'Paga en 4',
|
||||
'payment_provider' => 'Proveïdor de pagament',
|
||||
'select_email_provider' => 'Estableix el teu correu electrònic com a usuari remitent',
|
||||
'purchase_order_items' => 'Articles de la comanda de compra',
|
||||
'csv_rows_length' => 'No s'han trobat dades en aquest fitxer CSV',
|
||||
'accept_payments_online' => 'Accepteu pagaments en línia',
|
||||
'all_payment_gateways' => 'Veure totes les passarel·les de pagament',
|
||||
'product_cost' => 'Cost del producte',
|
||||
'enable_rappen_roudning' => 'Activa l'arrodoniment de Rappen',
|
||||
'enable_rappen_rounding_help' => 'Arrodoneix els totals al 5 més proper',
|
||||
'duration_words' => 'Durada en paraules',
|
||||
'upcoming_recurring_invoices' => 'Pròximes factures recurrents',
|
||||
'total_invoices' => 'Total de factures',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -461,8 +461,8 @@ $lang = array(
|
||||
'delete_token' => 'Smazat Token',
|
||||
'token' => 'Token',
|
||||
'add_gateway' => 'Add Payment Gateway',
|
||||
'delete_gateway' => 'Smazat platební bránu',
|
||||
'edit_gateway' => 'Editovat bránu',
|
||||
'delete_gateway' => 'Delete Payment Gateway',
|
||||
'edit_gateway' => 'Edit Payment Gateway',
|
||||
'updated_gateway' => 'Brána úspěšně změněna',
|
||||
'created_gateway' => 'Brána úspěšně vytvořena',
|
||||
'deleted_gateway' => 'Brána úspěšně smazána',
|
||||
@ -2198,6 +2198,8 @@ $lang = array(
|
||||
'encryption' => 'Šifrování',
|
||||
'mailgun_domain' => 'Mailgun Domain',
|
||||
'mailgun_private_key' => 'Mailgun Private Key',
|
||||
'brevo_domain' => 'Brevo Domain',
|
||||
'brevo_private_key' => 'Brevo Private Key',
|
||||
'send_test_email' => 'Odeslat zkušební e-mail',
|
||||
'select_label' => 'Vybrat štítek',
|
||||
'label' => 'Štítek',
|
||||
@ -4848,6 +4850,7 @@ $lang = array(
|
||||
'email_alignment' => 'Email Alignment',
|
||||
'pdf_preview_location' => 'PDF Preview Location',
|
||||
'mailgun' => 'Mailgun',
|
||||
'brevo' => 'Brevo',
|
||||
'postmark' => 'Postmark',
|
||||
'microsoft' => 'Microsoft',
|
||||
'click_plus_to_create_record' => 'Click + to create a record',
|
||||
@ -5100,6 +5103,8 @@ $lang = array(
|
||||
'drop_files_here' => 'Drop files here',
|
||||
'upload_files' => 'Upload Files',
|
||||
'download_e_invoice' => 'Download E-Invoice',
|
||||
'download_e_credit' => 'Download E-Credit',
|
||||
'download_e_quote' => 'Download E-Quote',
|
||||
'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',
|
||||
@ -5254,7 +5259,17 @@ $lang = array(
|
||||
'expense_payment_type_help' => 'The default expense payment type to be used',
|
||||
'paylater' => 'Pay in 4',
|
||||
'payment_provider' => 'Payment Provider',
|
||||
|
||||
'select_email_provider' => 'Set your email as the sending user',
|
||||
'purchase_order_items' => 'Purchase Order Items',
|
||||
'csv_rows_length' => 'No data found in this CSV file',
|
||||
'accept_payments_online' => 'Accept Payments Online',
|
||||
'all_payment_gateways' => 'View all payment gateways',
|
||||
'product_cost' => 'Product cost',
|
||||
'enable_rappen_roudning' => 'Enable Rappen Rounding',
|
||||
'enable_rappen_rounding_help' => 'Rounds totals to nearest 5',
|
||||
'duration_words' => 'Duration in words',
|
||||
'upcoming_recurring_invoices' => 'Upcoming Recurring Invoices',
|
||||
'total_invoices' => 'Total Invoices',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
@ -460,9 +460,9 @@ $lang = array(
|
||||
'edit_token' => 'Redigér token',
|
||||
'delete_token' => 'Slet token',
|
||||
'token' => 'Token',
|
||||
'add_gateway' => 'Add Payment Gateway',
|
||||
'delete_gateway' => 'Slet gateway',
|
||||
'edit_gateway' => 'Redigér gateway',
|
||||
'add_gateway' => 'Tilføj Betalingsgateway',
|
||||
'delete_gateway' => 'Slet Betalingsgateway',
|
||||
'edit_gateway' => 'Redigér Betalingsgateway',
|
||||
'updated_gateway' => 'Gateway blev opdateret',
|
||||
'created_gateway' => 'Gateway blev oprettet',
|
||||
'deleted_gateway' => 'Gateway blev slettet',
|
||||
@ -506,8 +506,8 @@ $lang = array(
|
||||
'auto_wrap' => 'Automatisk linie ombrydning',
|
||||
'duplicate_post' => 'Advarsel: den foregående side blev sendt to gange. Den anden afsendelse er blevet ignoreret.',
|
||||
'view_documentation' => 'Vis dokumentation',
|
||||
'app_title' => 'Free Online Invoicing',
|
||||
'app_description' => 'Invoice Ninja is a free, open-code solution for invoicing and billing customers. With Invoice Ninja, you can easily build and send beautiful invoices from any device that has access to the web. Your clients can print your invoices, download them as pdf files, and even pay you online from within the system.',
|
||||
'app_title' => 'Gratis online Fakturering',
|
||||
'app_description' => 'Faktura Ninja er en gratis, åben kodeløsning til Fakturering og faktureringskunder. Med Faktura Ninja kan du nemt bygge og sende smukke Faktura er fra enhver enhed, der har adgang til nettet. Din Klienter kan udskrive din Faktura er, downloade dem som PDF filer og endda betale dig online inde fra systemet.',
|
||||
'rows' => 'rækker',
|
||||
'www' => 'www',
|
||||
'logo' => 'Logo',
|
||||
@ -693,9 +693,9 @@ $lang = array(
|
||||
'disable' => 'Disable',
|
||||
'invoice_quote_number' => 'Invoice and Quote Numbers',
|
||||
'invoice_charges' => 'Faktura tillægsgebyr',
|
||||
'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact. <br><br> :error',
|
||||
'notification_invoice_bounced' => 'Vi var ikke i stand til at levere Faktura :invoice til :contact .<br><br> :error',
|
||||
'notification_invoice_bounced_subject' => 'Unable to deliver Invoice :invoice',
|
||||
'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact. <br><br> :error',
|
||||
'notification_quote_bounced' => 'Vi var ikke i stand til at levere tilbud :invoice til :contact .<br><br> :error',
|
||||
'notification_quote_bounced_subject' => 'Unable to deliver Quote :invoice',
|
||||
'custom_invoice_link' => 'Custom Invoice Link',
|
||||
'total_invoiced' => 'Faktureret i alt',
|
||||
@ -1900,7 +1900,7 @@ $lang = array(
|
||||
'require_quote_signature_help' => 'Kræv at klienten giver deres underskrift.',
|
||||
'i_agree' => 'Jeg accepterer betingelserne',
|
||||
'sign_here' => 'Underskriv venligst her (Denne underskrift er juridisk bindende):',
|
||||
'sign_here_ux_tip' => 'Use the mouse or your touchpad to trace your signature.',
|
||||
'sign_here_ux_tip' => 'Brug musen eller din touchpad til at spore din signatur.',
|
||||
'authorization' => 'Autorisation',
|
||||
'signed' => 'Underskrevet',
|
||||
|
||||
@ -2196,6 +2196,8 @@ $lang = array(
|
||||
'encryption' => 'Kryptering',
|
||||
'mailgun_domain' => 'Mailgun domæne',
|
||||
'mailgun_private_key' => 'Mailgun privat nøgle',
|
||||
'brevo_domain' => 'Brevo domæne',
|
||||
'brevo_private_key' => 'Brevo privat nøgle',
|
||||
'send_test_email' => 'Send test e-mail',
|
||||
'select_label' => 'Vælg Label',
|
||||
'label' => 'Etiket',
|
||||
@ -3009,7 +3011,7 @@ $lang = array(
|
||||
'hosted_login' => 'Hostet login',
|
||||
'selfhost_login' => 'Selfhost Login',
|
||||
'google_login' => 'Google login',
|
||||
'thanks_for_patience' => 'Thank for your patience while we work to implement these features.<br><br>We hope to have them completed in the next few months.<br><br>Until then we\'ll continue to support the',
|
||||
'thanks_for_patience' => 'Tak for din tålmodighed, mens vi arbejder på at implementere disse funktioner.<br><br> Vi håber at få dem færdige i løbet af de næste par måneder.<br><br> Indtil da vil vi fortsætte med at støtte',
|
||||
'legacy_mobile_app' => 'ældre mobilapp',
|
||||
'today' => 'I dag',
|
||||
'current' => 'Nuværende',
|
||||
@ -3327,7 +3329,7 @@ $lang = array(
|
||||
'credit_number_counter' => 'Kreditnummertæller',
|
||||
'reset_counter_date' => 'Nulstil tællerdato',
|
||||
'counter_padding' => 'Bordpolstring',
|
||||
'shared_invoice_quote_counter' => 'Share Invoice/Quote Counter',
|
||||
'shared_invoice_quote_counter' => 'Del Faktura /Citat tæller',
|
||||
'default_tax_name_1' => 'Standard skattenavn 1',
|
||||
'default_tax_rate_1' => 'Standardafgiftssats 1',
|
||||
'default_tax_name_2' => 'Standard skattenavn 2',
|
||||
@ -3867,7 +3869,7 @@ $lang = array(
|
||||
'cancellation_pending' => 'Aflysning afventer, vi kontakter dig!',
|
||||
'list_of_payments' => 'Liste over Betalinger',
|
||||
'payment_details' => 'Detaljer om Betaling',
|
||||
'list_of_payment_invoices' => 'Associate invoices',
|
||||
'list_of_payment_invoices' => 'Associate Fakturaer',
|
||||
'list_of_payment_methods' => 'Liste over Betaling',
|
||||
'payment_method_details' => 'Detaljer om Betaling',
|
||||
'permanently_remove_payment_method' => 'Fjern denne Betaling permanent.',
|
||||
@ -4216,7 +4218,7 @@ $lang = array(
|
||||
'direct_debit' => 'Direkte debitering',
|
||||
'clone_to_expense' => 'Klon til Udgift',
|
||||
'checkout' => 'Checkout',
|
||||
'acss' => 'ACSS Debit',
|
||||
'acss' => 'ACSS debet',
|
||||
'invalid_amount' => 'Ugyldigt Beløb . Kun tal/decimalværdier.',
|
||||
'client_payment_failure_body' => 'Betaling for Faktura :invoice for Beløb :amount mislykkedes.',
|
||||
'browser_pay' => 'Google Pay, Apple Pay, Microsoft Pay',
|
||||
@ -4846,6 +4848,7 @@ $lang = array(
|
||||
'email_alignment' => 'e-mail justering',
|
||||
'pdf_preview_location' => 'PDF eksempelplacering',
|
||||
'mailgun' => 'Mailgun',
|
||||
'brevo' => 'Brevo',
|
||||
'postmark' => 'Poststempel',
|
||||
'microsoft' => 'Microsoft',
|
||||
'click_plus_to_create_record' => 'Klik på + for at Opret en post',
|
||||
@ -4924,7 +4927,7 @@ $lang = array(
|
||||
'no_assigned_tasks' => 'Ingen fakturerbare opgaver for dette projekt',
|
||||
'authorization_failure' => 'Utilstrækkelige tilladelser til at udføre denne handling',
|
||||
'authorization_sms_failure' => 'Bekræft venligst din konto for at sende e-mails.',
|
||||
'white_label_body' => 'Thank you for purchasing a white label license. <br><br> Your license key is: <br><br> :license_key <br><br> You can manage your license here: https://invoiceninja.invoicing.co/client/login',
|
||||
'white_label_body' => 'Tak fordi du har købt en Hvidmærke licens.<br><br> Din licensnøgle er:<br><br> :license_key<br><br> Du kan administrere din licens her: https://invoiceninja. Fakturering .co/ Klient /login',
|
||||
'payment_type_Klarna' => 'Klarna',
|
||||
'payment_type_Interac E Transfer' => 'Interac E Transfer',
|
||||
'xinvoice_payable' => 'Betales inden for :payeddue dage netto indtil :paydate',
|
||||
@ -5089,7 +5092,7 @@ $lang = array(
|
||||
'region' => 'Område',
|
||||
'county' => 'Amt',
|
||||
'tax_details' => 'Skatteoplysninger',
|
||||
'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
|
||||
'activity_10_online' => ':contact lavet Betaling :payment for Faktura :invoice for :client',
|
||||
'activity_10_manual' => ':user indtastet Betaling :payment for Faktura :invoice for :client',
|
||||
'default_payment_type' => 'Standard Betaling',
|
||||
'number_precision' => 'Nummerpræcision',
|
||||
@ -5098,6 +5101,8 @@ $lang = array(
|
||||
'drop_files_here' => 'Slip filer her',
|
||||
'upload_files' => 'Upload filer',
|
||||
'download_e_invoice' => 'Download E- Faktura',
|
||||
'download_e_credit' => 'Download e-kredit',
|
||||
'download_e_quote' => 'Download e-citat',
|
||||
'triangular_tax_info' => 'Trekantet transaktion inden for fællesskabet',
|
||||
'intracommunity_tax_info' => 'Skattefri levering inden for samfundet',
|
||||
'reverse_tax_info' => 'Bemærk venligst, at denne levering er underlagt omvendt betalingspligt',
|
||||
@ -5119,7 +5124,7 @@ $lang = array(
|
||||
'set_private' => 'Indstil privat',
|
||||
'individual' => 'Individuel',
|
||||
'business' => 'Forretning',
|
||||
'partnership' => 'Partnership',
|
||||
'partnership' => 'Partnerskab',
|
||||
'trust' => 'Tillid',
|
||||
'charity' => 'Velgørenhed',
|
||||
'government' => 'Regering',
|
||||
@ -5146,113 +5151,123 @@ $lang = array(
|
||||
'load_template_description' => 'Skabelonen vil blive anvendt på følgende:',
|
||||
'run_template' => 'Kør skabelon',
|
||||
'statement_design' => 'Statement Design',
|
||||
'delivery_note_design' => 'Delivery Note Design',
|
||||
'payment_receipt_design' => 'Payment Receipt Design',
|
||||
'payment_refund_design' => 'Payment Refund Design',
|
||||
'task_extension_banner' => 'Add the Chrome extension to manage your tasks',
|
||||
'watch_video' => 'Watch Video',
|
||||
'view_extension' => 'View Extension',
|
||||
'reactivate_email' => 'Reactivate Email',
|
||||
'email_reactivated' => 'Successfully reactivated email',
|
||||
'template_help' => 'Enable using the design as a template',
|
||||
'quarter' => 'Quarter',
|
||||
'item_description' => 'Item Description',
|
||||
'task_item' => 'Task Item',
|
||||
'record_state' => 'Record State',
|
||||
'save_files_to_this_folder' => 'Save files to this folder',
|
||||
'downloads_folder' => 'Downloads Folder',
|
||||
'total_invoiced_quotes' => 'Invoiced Quotes',
|
||||
'total_invoice_paid_quotes' => 'Invoice Paid Quotes',
|
||||
'downloads_folder_does_not_exist' => 'The downloads folder does not exist :value',
|
||||
'user_logged_in_notification' => 'User Logged in Notification',
|
||||
'user_logged_in_notification_help' => 'Send an email when logging in from a new location',
|
||||
'payment_email_all_contacts' => 'Payment Email To All Contacts',
|
||||
'payment_email_all_contacts_help' => 'Sends the payment email to all contacts when enabled',
|
||||
'add_line' => 'Add Line',
|
||||
'activity_139' => 'Expense :expense notification sent to :contact',
|
||||
'vendor_notification_subject' => 'Confirmation of payment :amount sent to :vendor',
|
||||
'vendor_notification_body' => 'Payment processed for :amount dated :payment_date. <br>[Transaction Reference: :transaction_reference]',
|
||||
'receipt' => 'Receipt',
|
||||
'charges' => 'Charges',
|
||||
'email_report' => 'Email Report',
|
||||
'payment_type_Pay Later' => 'Pay Later',
|
||||
'payment_type_credit' => 'Payment Type Credit',
|
||||
'payment_type_debit' => 'Payment Type Debit',
|
||||
'send_emails_to' => 'Send Emails To',
|
||||
'primary_contact' => 'Primary Contact',
|
||||
'all_contacts' => 'All Contacts',
|
||||
'insert_below' => 'Insert Below',
|
||||
'nordigen_handler_subtitle' => 'Bank account authentication. Selecting your institution to complete the request with your account credentials.',
|
||||
'nordigen_handler_error_heading_unknown' => 'An error has occured',
|
||||
'nordigen_handler_error_contents_unknown' => 'An unknown error has occurred! Reason:',
|
||||
'nordigen_handler_error_heading_token_invalid' => 'Invalid Token',
|
||||
'nordigen_handler_error_contents_token_invalid' => 'The provided token was invalid. Contact support for help, if this issue persists.',
|
||||
'nordigen_handler_error_heading_account_config_invalid' => 'Missing Credentials',
|
||||
'nordigen_handler_error_contents_account_config_invalid' => 'Invalid or missing credentials for Gocardless Bank Account Data. Contact support for help, if this issue persists.',
|
||||
'nordigen_handler_error_heading_not_available' => 'Not Available',
|
||||
'nordigen_handler_error_contents_not_available' => 'Feature unavailable, enterprise plan only.',
|
||||
'nordigen_handler_error_heading_institution_invalid' => 'Invalid Institution',
|
||||
'nordigen_handler_error_contents_institution_invalid' => 'The provided institution-id is invalid or no longer valid.',
|
||||
'nordigen_handler_error_heading_ref_invalid' => 'Invalid Reference',
|
||||
'nordigen_handler_error_contents_ref_invalid' => 'GoCardless did not provide a valid reference. Please run flow again and contact support, if this issue persists.',
|
||||
'nordigen_handler_error_heading_not_found' => 'Invalid Requisition',
|
||||
'nordigen_handler_error_contents_not_found' => 'GoCardless did not provide a valid reference. Please run flow again and contact support, if this issue persists.',
|
||||
'nordigen_handler_error_heading_requisition_invalid_status' => 'Not Ready',
|
||||
'nordigen_handler_error_contents_requisition_invalid_status' => 'You called this site too early. Please finish authorization and refresh this page. Contact support for help, if this issue persists.',
|
||||
'nordigen_handler_error_heading_requisition_no_accounts' => 'No Accounts selected',
|
||||
'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
|
||||
'nordigen_handler_restart' => 'Restart flow.',
|
||||
'nordigen_handler_return' => 'Return to application.',
|
||||
'delivery_note_design' => 'Levering Bemærk Design',
|
||||
'payment_receipt_design' => 'Betaling Kvittering Design',
|
||||
'payment_refund_design' => 'Betaling Refusion Design',
|
||||
'task_extension_banner' => 'Tilføj Chrome-udvidelsen for at administrere dine opgaver',
|
||||
'watch_video' => 'Se video',
|
||||
'view_extension' => 'Vis forlængelse',
|
||||
'reactivate_email' => 'Genaktiver e-mail',
|
||||
'email_reactivated' => 'Succesfuldt genaktiveret e-mail',
|
||||
'template_help' => 'Aktiver brug af designet som skabelon',
|
||||
'quarter' => 'Kvarter',
|
||||
'item_description' => 'Varebeskrivelse',
|
||||
'task_item' => 'Opgave Genstand',
|
||||
'record_state' => 'Rekordtilstand',
|
||||
'save_files_to_this_folder' => 'Gem filer til denne mappe',
|
||||
'downloads_folder' => 'Downloads mappe',
|
||||
'total_invoiced_quotes' => 'Fakturerede tilbud',
|
||||
'total_invoice_paid_quotes' => 'Faktura betalte tilbud',
|
||||
'downloads_folder_does_not_exist' => 'Mappen downloads findes ikke :value',
|
||||
'user_logged_in_notification' => 'Bruger Logget ind Notifikation',
|
||||
'user_logged_in_notification_help' => 'Send en e-mail , når du logger ind fra et nyt sted',
|
||||
'payment_email_all_contacts' => 'Betaling e-mail Til alle kontakter',
|
||||
'payment_email_all_contacts_help' => 'Sender Betaling e-mail til alle kontakter, når den er aktiveret',
|
||||
'add_line' => 'Tilføj linje',
|
||||
'activity_139' => 'Udgift :expense meddelelse sendt til :contact',
|
||||
'vendor_notification_subject' => 'Bekræftelse af Betaling :amount sendt til :vendor',
|
||||
'vendor_notification_body' => 'Betaling behandlet for :amount dateret :payment _dato.<br> [Transaktionsreference: :transaction_reference ]',
|
||||
'receipt' => 'Kvittering',
|
||||
'charges' => 'Afgifter',
|
||||
'email_report' => 'e-mail rapport',
|
||||
'payment_type_Pay Later' => 'Betal senere',
|
||||
'payment_type_credit' => 'Betaling Type Kredit',
|
||||
'payment_type_debit' => 'Betaling Type Debet',
|
||||
'send_emails_to' => 'Send e-mails til',
|
||||
'primary_contact' => 'Primær kontakt',
|
||||
'all_contacts' => 'Alle kontakter',
|
||||
'insert_below' => 'Indsæt nedenfor',
|
||||
'nordigen_handler_subtitle' => 'Bankkontogodkendelse. Vælg din institution for at fuldføre anmodningen med dine kontooplysninger.',
|
||||
'nordigen_handler_error_heading_unknown' => 'Der er opstået en fejl',
|
||||
'nordigen_handler_error_contents_unknown' => 'En ukendt fejl er sket! Grund:',
|
||||
'nordigen_handler_error_heading_token_invalid' => 'Ugyldig Token',
|
||||
'nordigen_handler_error_contents_token_invalid' => 'Det angivne token var ugyldigt. kontakt support for at få hjælp, hvis dette problem fortsætter.',
|
||||
'nordigen_handler_error_heading_account_config_invalid' => 'Manglende legitimationsoplysninger',
|
||||
'nordigen_handler_error_contents_account_config_invalid' => 'Ugyldige eller manglende legitimationsoplysninger for Gocardless bankkontodata. kontakt support for at få hjælp, hvis dette problem fortsætter.',
|
||||
'nordigen_handler_error_heading_not_available' => 'Ikke tilgængelig',
|
||||
'nordigen_handler_error_contents_not_available' => 'Funktionen er ikke tilgængelig, kun virksomhedsplan.',
|
||||
'nordigen_handler_error_heading_institution_invalid' => 'Ugyldig institution',
|
||||
'nordigen_handler_error_contents_institution_invalid' => 'Det angivne institutions-id er ugyldigt eller ikke længere gyldigt.',
|
||||
'nordigen_handler_error_heading_ref_invalid' => 'Ugyldig reference',
|
||||
'nordigen_handler_error_contents_ref_invalid' => 'GoCardless leverede ikke en gyldig reference. Kør venligst flow igen og kontakt support, hvis dette problem fortsætter.',
|
||||
'nordigen_handler_error_heading_not_found' => 'Ugyldig rekvisition',
|
||||
'nordigen_handler_error_contents_not_found' => 'GoCardless leverede ikke en gyldig reference. Kør venligst flow igen og kontakt support, hvis dette problem fortsætter.',
|
||||
'nordigen_handler_error_heading_requisition_invalid_status' => 'Ikke klar',
|
||||
'nordigen_handler_error_contents_requisition_invalid_status' => 'Du ringede til dette websted for tidligt. Afslut venligst godkendelsen og opdater denne side. kontakt support for at få hjælp, hvis dette problem fortsætter.',
|
||||
'nordigen_handler_error_heading_requisition_no_accounts' => 'Ingen konti valgt',
|
||||
'nordigen_handler_error_contents_requisition_no_accounts' => 'Tjenesten har ikke returneret nogen gyldige konti. Overvej at genstarte flowet.',
|
||||
'nordigen_handler_restart' => 'Genstart flow.',
|
||||
'nordigen_handler_return' => 'Vend tilbage til ansøgning.',
|
||||
'lang_Lao' => 'Lao',
|
||||
'currency_lao_kip' => 'Lao kip',
|
||||
'yodlee_regions' => 'Regions: USA, UK, Australia & India',
|
||||
'nordigen_regions' => 'Regions: Europe & UK',
|
||||
'select_provider' => 'Select Provider',
|
||||
'nordigen_requisition_subject' => 'Requisition expired, please reauthenticate.',
|
||||
'nordigen_requisition_body' => 'Access to bank account feeds has expired as set in End User Agreement. <br><br>Please log into Invoice Ninja and re-authenticate with your banks to continue receiving transactions.',
|
||||
'participant' => 'Participant',
|
||||
'participant_name' => 'Participant name',
|
||||
'client_unsubscribed' => 'Client unsubscribed from emails.',
|
||||
'client_unsubscribed_help' => 'Client :client has unsubscribed from your e-mails. The client needs to consent to receive future emails from you.',
|
||||
'resubscribe' => 'Resubscribe',
|
||||
'subscribe' => 'Subscribe',
|
||||
'subscribe_help' => 'You are currently subscribed and will continue to receive email communications.',
|
||||
'unsubscribe_help' => 'You are currently not subscribed, and therefore, will not receive emails at this time.',
|
||||
'notification_purchase_order_bounced' => 'We were unable to deliver Purchase Order :invoice to :contact. <br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Unable to deliver Purchase Order :invoice',
|
||||
'show_pdfhtml_on_mobile' => 'Display HTML version of entity when viewing on mobile',
|
||||
'show_pdfhtml_on_mobile_help' => 'For improved visualization, displays a HTML version of the invoice/quote when viewing on mobile.',
|
||||
'please_select_an_invoice_or_credit' => 'Please select an invoice or credit',
|
||||
'mobile_version' => 'Mobile Version',
|
||||
'yodlee_regions' => 'Regioner: USA, Storbritannien, Australien og Indien',
|
||||
'nordigen_regions' => 'Regioner: Europa og Storbritannien',
|
||||
'select_provider' => 'Vælg udbyder',
|
||||
'nordigen_requisition_subject' => 'Rekvisitionen er udløbet. Genautentificer venligst.',
|
||||
'nordigen_requisition_body' => 'Adgang til bankkontofeeds er udløbet som angivet i End Bruger aftalen.<br><br> Log venligst ind på Faktura Ninja og genautentificer med dine banker for at fortsætte med at modtage transaktioner.',
|
||||
'participant' => 'Deltager',
|
||||
'participant_name' => 'Navn på deltager',
|
||||
'client_unsubscribed' => 'Klient afmeldte e-mails.',
|
||||
'client_unsubscribed_help' => 'Klient :client har afmeldt dine e-mails. Klient skal give samtykke til at modtage fremtidige e-mails fra dig.',
|
||||
'resubscribe' => 'Gentilmeld',
|
||||
'subscribe' => 'Abonner',
|
||||
'subscribe_help' => 'Du er i øjeblikket tilmeldt og vil fortsat modtage e-mail kommunikation.',
|
||||
'unsubscribe_help' => 'Du er i øjeblikket ikke tilmeldt, og vil derfor ikke modtage e-mails på nuværende tidspunkt.',
|
||||
'notification_purchase_order_bounced' => 'Vi var ikke i stand til at levere indkøbsordre :invoice til :contact .<br><br> :error',
|
||||
'notification_purchase_order_bounced_subject' => 'Kan ikke levere indkøbsordre :invoice',
|
||||
'show_pdfhtml_on_mobile' => 'Vis HTML-version af enheden, når du ser på mobilen',
|
||||
'show_pdfhtml_on_mobile_help' => 'For forbedret visualisering, viser en HTML-version af Faktura /citatet, når du ser på mobilen.',
|
||||
'please_select_an_invoice_or_credit' => 'Vælg venligst en Faktura eller kredit',
|
||||
'mobile_version' => 'Mobil version',
|
||||
'venmo' => 'Venmo',
|
||||
'my_bank' => 'MyBank',
|
||||
'pay_later' => 'Pay Later',
|
||||
'local_domain' => 'Local Domain',
|
||||
'verify_peer' => 'Verify Peer',
|
||||
'nordigen_help' => 'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||
'ar_detailed' => 'Accounts Receivable Detailed',
|
||||
'ar_summary' => 'Accounts Receivable Summary',
|
||||
'client_sales' => 'Client Sales',
|
||||
'user_sales' => 'User Sales',
|
||||
'pay_later' => 'Betal senere',
|
||||
'local_domain' => 'Lokalt domæne',
|
||||
'verify_peer' => 'Bekræft Peer',
|
||||
'nordigen_help' => 'Bemærk : tilslutning af en konto kræver en GoCardless/Norden API-nøgle',
|
||||
'ar_detailed' => 'Debitorer detaljeret',
|
||||
'ar_summary' => 'Debitoroversigt',
|
||||
'client_sales' => 'Klient',
|
||||
'user_sales' => 'Bruger Salg',
|
||||
'iframe_url' => 'iFrame URL',
|
||||
'user_unsubscribed' => 'User unsubscribed from emails :link',
|
||||
'use_available_payments' => 'Use Available Payments',
|
||||
'test_email_sent' => 'Successfully sent email',
|
||||
'gateway_type' => 'Gateway Type',
|
||||
'save_template_body' => 'Would you like to save this import mapping as a template for future use?',
|
||||
'save_as_template' => 'Save Template Mapping',
|
||||
'auto_bill_standard_invoices_help' => 'Auto bill standard invoices on the due date',
|
||||
'auto_bill_on_help' => 'Auto bill on send date OR due date (recurring invoices)',
|
||||
'use_available_credits_help' => 'Apply any credit balances to payments prior to charging a payment method',
|
||||
'use_unapplied_payments' => 'Use unapplied payments',
|
||||
'use_unapplied_payments_help' => 'Apply any payment balances prior to charging a payment method',
|
||||
'user_unsubscribed' => 'Bruger afmeldte e-mails :link',
|
||||
'use_available_payments' => 'Brug tilgængelig Betalinger',
|
||||
'test_email_sent' => 'Succesfuldt sendt e-mail',
|
||||
'gateway_type' => 'Gateway type',
|
||||
'save_template_body' => 'Vil du gerne Gem denne importkortlægning som en skabelon til fremtidig brug?',
|
||||
'save_as_template' => 'Gem skabelon kortlægning',
|
||||
'auto_bill_standard_invoices_help' => 'Autofaktura standard Fakturaer på forfaldsdatoen',
|
||||
'auto_bill_on_help' => 'Automatisk regning på afsendelsesdato ELLER forfaldsdato ( Gentagen Fakturaer )',
|
||||
'use_available_credits_help' => 'Anvend eventuelle kreditsaldi til Betaling er inden opkrævning af en Betaling',
|
||||
'use_unapplied_payments' => 'Brug uanvendt Betalinger',
|
||||
'use_unapplied_payments_help' => 'Anvend eventuelle Betaling inden opkrævning af en Betaling',
|
||||
'payment_terms_help' => 'Sætter standard <b>faktura forfalds dato</b>',
|
||||
'payment_type_help' => 'Indstiller den <b>manuelle Betaling</b> som standard.',
|
||||
'quote_valid_until_help' => 'The number of days that the quote is valid for',
|
||||
'expense_payment_type_help' => 'The default expense payment type to be used',
|
||||
'paylater' => 'Pay in 4',
|
||||
'payment_provider' => 'Payment Provider',
|
||||
|
||||
'quote_valid_until_help' => 'Det antal dage, som tilbuddet er gyldigt i',
|
||||
'expense_payment_type_help' => 'Standard Udgift Betaling , der skal bruges',
|
||||
'paylater' => 'Indbetal 4',
|
||||
'payment_provider' => 'Betaling',
|
||||
'select_email_provider' => 'Indstil din e-mail som den afsendende Bruger',
|
||||
'purchase_order_items' => 'Indkøbsordrevarer',
|
||||
'csv_rows_length' => 'Ingen data fundet i denne CSV-fil',
|
||||
'accept_payments_online' => 'Accepter Betalinger Online',
|
||||
'all_payment_gateways' => 'Vis alle Betaling gateways',
|
||||
'product_cost' => 'Produktomkostninger',
|
||||
'enable_rappen_roudning' => 'Aktiver Rappen-afrunding',
|
||||
'enable_rappen_rounding_help' => 'Afrunder i alt til nærmeste 5',
|
||||
'duration_words' => 'Varighed i ord',
|
||||
'upcoming_recurring_invoices' => 'Kommende Gentagen Fakturaer',
|
||||
'total_invoices' => 'Total Fakturaer',
|
||||
);
|
||||
|
||||
return $lang;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user