diff --git a/VERSION.txt b/VERSION.txt
index 40fdb9da290f..5c637b26e9b1 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-5.8.30
\ No newline at end of file
+5.8.37
\ No newline at end of file
diff --git a/app/Console/Commands/CheckData.php b/app/Console/Commands/CheckData.php
index ba95b675c5dd..31ccdc2908f7 100644
--- a/app/Console/Commands/CheckData.php
+++ b/app/Console/Commands/CheckData.php
@@ -884,14 +884,14 @@ class CheckData extends Command
public function checkClientSettings()
{
if ($this->option('fix') == 'true') {
- Client::query()->whereNull('country_id')->cursor()->each(function ($client) {
+ Client::query()->whereNull('country_id')->orWhere('country_id', 0)->cursor()->each(function ($client) {
$client->country_id = $client->company->settings->country_id;
$client->saveQuietly();
$this->logMessage("Fixing country for # {$client->id}");
});
- Client::query()->whereNull("settings->currency_id")->cursor()->each(function ($client) {
+ Client::query()->whereNull("settings->currency_id")->orWhereJsonContains('settings', ['currency_id' => ''])->cursor()->each(function ($client) {
$settings = $client->settings;
$settings->currency_id = (string)$client->company->settings->currency_id;
$client->settings = $settings;
@@ -933,7 +933,6 @@ class CheckData extends Command
});
-
Invoice::withTrashed()
->where("partial", 0)
->whereNotNull("partial_due_date")
@@ -947,7 +946,42 @@ class CheckData extends Command
});
+ Company::whereDoesntHave('company_users', function ($query){
+ $query->where('is_owner', 1);
+ })
+ ->cursor()
+ ->when(Ninja::isHosted())
+ ->each(function ($c){
+ $this->logMessage("Orphan Account # {$c->account_id}");
+
+ });
+
+ CompanyUser::whereDoesntHave('tokens')
+ ->cursor()
+ ->when(Ninja::isHosted())
+ ->each(function ($cu){
+
+ $this->logMessage("Missing tokens for Company User # {$cu->id}");
+
+ });
+
+ CompanyUser::whereDoesntHave('user')
+ ->cursor()
+ ->when(Ninja::isHosted())
+ ->each(function ($cu) {
+
+ $this->logMessage("Missing user for Company User # {$cu->id}");
+
+ });
+
+ $cus = CompanyUser::withTrashed()
+ ->whereHas("user", function ($query) {
+ $query->whereColumn("users.account_id", "!=", "company_user.account_id");
+ })->pluck('id')->implode(",");
+
+
+ $this->logMessage("Cross Linked CompanyUser ids # {$cus}");
}
diff --git a/app/DataMapper/Tax/BaseRule.php b/app/DataMapper/Tax/BaseRule.php
index d921f2006887..337ea4003119 100644
--- a/app/DataMapper/Tax/BaseRule.php
+++ b/app/DataMapper/Tax/BaseRule.php
@@ -264,7 +264,7 @@ class BaseRule implements RuleInterface
return USStates::getState(strlen($this->client->postal_code) > 1 ? $this->client->postal_code : $this->client->shipping_postal_code);
} catch (\Exception $e) {
- return $this->client->company->country()->iso_3166_2 == 'US' ? $this->client->company->tax_data->seller_subregion : 'CA';
+ return 'CA';
}
}
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
index 444733d814ee..34ad4564d58a 100644
--- a/app/Exceptions/Handler.php
+++ b/app/Exceptions/Handler.php
@@ -55,14 +55,12 @@ class Handler extends ExceptionHandler
protected $selfHostDontReport = [
FilePermissionsFailure::class,
- PDOException::class,
MaxAttemptsExceededException::class,
CommandNotFoundException::class,
ValidationException::class,
ModelNotFoundException::class,
NotFoundHttpException::class,
UnableToCreateDirectory::class,
- ConnectException::class,
RuntimeException::class,
InvalidArgumentException::class,
CredentialsException::class,
@@ -140,7 +138,7 @@ class Handler extends ExceptionHandler
'email' => 'anonymous@example.com',
'name' => 'Anonymous User',
]);
- } elseif (auth()->guard('user') && auth()->guard('user')->user() && auth()->user()->company() && auth()->user()->company()->account->report_errors) {
+ } elseif (auth()->guard('user') && auth()->guard('user')->user() && auth()->user()->companyIsSet() && auth()->user()->company()->account->report_errors) {
$scope->setUser([
'id' => auth()->user()->account->key,
'email' => 'anonymous@example.com',
diff --git a/app/Export/CSV/BaseExport.php b/app/Export/CSV/BaseExport.php
index debee0f7dd38..37e904d154c6 100644
--- a/app/Export/CSV/BaseExport.php
+++ b/app/Export/CSV/BaseExport.php
@@ -826,8 +826,15 @@ class BaseExport
return '';
}
-
- public function applyFilters(Builder $query): Builder
+
+ /**
+ * Apply Product Filters
+ *
+ * @param Builder $query
+ *
+ * @return Builder
+ */
+ public function applyProductFilters(Builder $query): Builder
{
if(isset($this->input['product_key'])) {
@@ -844,8 +851,16 @@ class BaseExport
return $query;
}
-
- protected function addClientFilter($query, $clients): Builder
+
+ /**
+ * Add Client Filter
+ *
+ * @param Builder $query
+ * @param mixed $clients
+ *
+ * @return Builder
+ */
+ protected function addClientFilter(Builder $query, $clients): Builder
{
if(is_string($clients)) {
$clients = explode(',', $clients);
@@ -862,8 +877,16 @@ class BaseExport
return $query;
}
-
- protected function addVendorFilter($query, $vendors): Builder
+
+ /**
+ * Add Vendor Filter
+ *
+ * @param Builder $query
+ * @param string $vendors
+ *
+ * @return Builder
+ */
+ protected function addVendorFilter(Builder$query, string $vendors): Builder
{
if(is_string($vendors)) {
@@ -878,8 +901,16 @@ class BaseExport
return $query;
}
-
- protected function addProjectFilter($query, $projects): Builder
+
+ /**
+ * AddProjectFilter
+ *
+ * @param Builder $query
+ * @param string $projects
+ *
+ * @return Builder
+ */
+ protected function addProjectFilter(Builder $query, string $projects): Builder
{
if(is_string($projects)) {
@@ -894,8 +925,16 @@ class BaseExport
return $query;
}
-
- protected function addCategoryFilter($query, $expense_categories): Builder
+
+ /**
+ * Add Category Filter
+ *
+ * @param Builder $query
+ * @param string $expense_categories
+ *
+ * @return Builder
+ */
+ protected function addCategoryFilter(Builder $query, string $expense_categories): Builder
{
if(is_string($expense_categories)) {
@@ -911,13 +950,230 @@ class BaseExport
return $query;
}
-
- protected function addInvoiceStatusFilter($query, $status): Builder
+
+ /**
+ * Add Payment Status Filters
+ *
+ * @param Builder $query
+ * @param string $status
+ *
+ * @return Builder
+ */
+ protected function addPaymentStatusFilters(Builder $query, string $status): Builder
{
$status_parameters = explode(',', $status);
- if(in_array('all', $status_parameters)) {
+ if(in_array('all', $status_parameters) || count($status_parameters) == 0) {
+ return $query;
+ }
+
+ $query->where(function ($query) use ($status_parameters) {
+ $payment_filters = [];
+
+ if (in_array('pending', $status_parameters)) {
+ $payment_filters[] = Payment::STATUS_PENDING;
+ }
+
+ if (in_array('cancelled', $status_parameters)) {
+ $payment_filters[] = Payment::STATUS_CANCELLED;
+ }
+
+ if (in_array('failed', $status_parameters)) {
+ $payment_filters[] = Payment::STATUS_FAILED;
+ }
+
+ if (in_array('completed', $status_parameters)) {
+ $payment_filters[] = Payment::STATUS_COMPLETED;
+ }
+
+ if (in_array('partially_refunded', $status_parameters)) {
+ $payment_filters[] = Payment::STATUS_PARTIALLY_REFUNDED;
+ }
+
+ if (in_array('refunded', $status_parameters)) {
+ $payment_filters[] = Payment::STATUS_REFUNDED;
+ }
+
+ if (count($payment_filters) > 0) {
+ $query->whereIn('status_id', $payment_filters);
+ }
+
+ if(in_array('partially_unapplied', $status_parameters)) {
+ $query->whereColumn('amount', '>', 'applied')->where('refunded', 0);
+ }
+ });
+
+ return $query;
+
+ }
+
+ /**
+ * Add RecurringInvoice Status Filter
+ *
+ * @param Builder $query
+ * @param string $status
+ *
+ * @return Builder
+ */
+ protected function addRecurringInvoiceStatusFilter(Builder $query, string $status): Builder
+ {
+
+ $status_parameters = explode(',', $status);
+
+ if (in_array('all', $status_parameters) || count($status_parameters) == 0){
+ return $query;
+ }
+
+ $recurring_filters = [];
+
+ if (in_array('active', $status_parameters)) {
+ $recurring_filters[] = RecurringInvoice::STATUS_ACTIVE;
+ }
+
+ if (in_array('paused', $status_parameters)) {
+ $recurring_filters[] = RecurringInvoice::STATUS_PAUSED;
+ }
+
+ if (in_array('completed', $status_parameters)) {
+ $recurring_filters[] = RecurringInvoice::STATUS_COMPLETED;
+ }
+
+ if (count($recurring_filters) >= 1) {
+ return $query->whereIn('status_id', $recurring_filters);
+ }
+
+ return $query;
+
+ }
+ /**
+ * Add QuoteStatus Filter
+ *
+ * @param Builder $query
+ * @param string $status
+ *
+ * @return Builder
+ */
+ protected function addQuoteStatusFilter(Builder $query, string $status): Builder
+ {
+
+ $status_parameters = explode(',', $status);
+
+ if (in_array('all', $status_parameters)) {
+ return $query;
+ }
+
+ $query->where(function ($query) use ($status_parameters) {
+ if (in_array('sent', $status_parameters)) {
+ $query->orWhere(function ($q) {
+ $q->where('status_id', Quote::STATUS_SENT)
+ ->whereNull('due_date')
+ ->orWhere('due_date', '>=', now()->toDateString());
+ });
+ }
+
+ $quote_filters = [];
+
+ if (in_array('draft', $status_parameters)) {
+ $quote_filters[] = Quote::STATUS_DRAFT;
+ }
+
+ if (in_array('approved', $status_parameters)) {
+ $quote_filters[] = Quote::STATUS_APPROVED;
+ }
+
+ if (count($quote_filters) > 0) {
+ $query->orWhereIn('status_id', $quote_filters);
+ }
+
+ if (in_array('expired', $status_parameters)) {
+ $query->orWhere(function ($q) {
+ $q->where('status_id', Quote::STATUS_SENT)
+ ->whereNotNull('due_date')
+ ->where('due_date', '<=', now()->toDateString());
+ });
+ }
+
+ if (in_array('upcoming', $status_parameters)) {
+ $query->orWhere(function ($q) {
+ $q->where('status_id', Quote::STATUS_SENT)
+ ->where('due_date', '>=', now()->toDateString())
+ ->orderBy('due_date', 'DESC');
+ });
+ }
+
+ if(in_array('converted', $status_parameters)) {
+ $query->orWhere(function ($q) {
+ $q->whereNotNull('invoice_id');
+ });
+ }
+ });
+
+ return $query;
+ }
+
+ /**
+ * Add PurchaseOrder Status Filter
+ *
+ * @param Builder $query
+ * @param string $status
+ *
+ * @return Builder
+ */
+ protected function addPurchaseOrderStatusFilter(Builder $query, string $status): Builder
+ {
+
+ $status_parameters = explode(',', $status);
+
+ if (in_array('all', $status_parameters) || count($status_parameters) == 0) {
+ return $query;
+ }
+
+ $query->where(function ($query) use ($status_parameters) {
+ $po_status = [];
+
+ if (in_array('draft', $status_parameters)) {
+ $po_status[] = PurchaseOrder::STATUS_DRAFT;
+ }
+
+ if (in_array('sent', $status_parameters)) {
+ $query->orWhere(function ($q) {
+ $q->where('status_id', PurchaseOrder::STATUS_SENT)
+ ->whereNull('due_date')
+ ->orWhere('due_date', '>=', now()->toDateString());
+ });
+ }
+
+ if (in_array('accepted', $status_parameters)) {
+ $po_status[] = PurchaseOrder::STATUS_ACCEPTED;
+ }
+
+ if (in_array('cancelled', $status_parameters)) {
+ $po_status[] = PurchaseOrder::STATUS_CANCELLED;
+ }
+
+ if (count($po_status) >= 1) {
+ $query->whereIn('status_id', $po_status);
+ }
+ });
+
+ return $query;
+
+ }
+
+ /**
+ * Add Invoice Status Filter
+ *
+ * @param Builder $query
+ * @param string $status
+ * @return Builder
+ */
+ protected function addInvoiceStatusFilter(Builder $query, string $status): Builder
+ {
+
+ $status_parameters = explode(',', $status);
+
+ if(in_array('all', $status_parameters) || count($status_parameters) == 0) {
return $query;
}
@@ -942,6 +1198,10 @@ class BaseExport
$invoice_filters[] = Invoice::STATUS_PARTIAL;
}
+ if (in_array('cancelled', $status_parameters)) {
+ $invoice_filters[] = Invoice::STATUS_CANCELLED;
+ }
+
if (count($invoice_filters) > 0) {
$nested->whereIn('status_id', $invoice_filters);
}
@@ -965,15 +1225,19 @@ class BaseExport
return $query;
}
-
- protected function addDateRange($query)
+
+ /**
+ * Add Date Range
+ *
+ * @param Builder $query
+ * @return Builder
+ */
+ protected function addDateRange(Builder $query): Builder
{
- $query = $this->applyFilters($query);
+ $query = $this->applyProductFilters($query);
$date_range = $this->input['date_range'];
- nlog($date_range);
-
if (array_key_exists('date_key', $this->input) && strlen($this->input['date_key']) > 1) {
$this->date_key = $this->input['date_key'];
}
diff --git a/app/Export/CSV/ClientExport.php b/app/Export/CSV/ClientExport.php
index e10e6e9cec45..37928d44f351 100644
--- a/app/Export/CSV/ClientExport.php
+++ b/app/Export/CSV/ClientExport.php
@@ -127,7 +127,7 @@ class ClientExport extends BaseExport
$query = Client::query()->with('contacts')
->withTrashed()
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
diff --git a/app/Export/CSV/CreditExport.php b/app/Export/CSV/CreditExport.php
index 0973f7a70473..dc402741bd0e 100644
--- a/app/Export/CSV/CreditExport.php
+++ b/app/Export/CSV/CreditExport.php
@@ -103,10 +103,14 @@ class CreditExport extends BaseExport
->withTrashed()
->with('client')
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
+ if($this->input['status'] ?? false) {
+ $query = $this->addCreditStatusFilter($query, $this->input['status']);
+ }
+
if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query);
}
@@ -162,6 +166,40 @@ class CreditExport extends BaseExport
return $this->decorateAdvancedFields($credit, $entity);
}
+ public function addCreditStatusFilter($query, $status): Builder
+ {
+
+ $status_parameters = explode(',', $status);
+
+ if (in_array('all', $status_parameters)) {
+ return $query;
+ }
+
+ $credit_filters = [];
+
+ if (in_array('draft', $status_parameters)) {
+ $credit_filters[] = Credit::STATUS_DRAFT;
+ }
+
+ if (in_array('sent', $status_parameters)) {
+ $credit_filters[] = Credit::STATUS_SENT;
+ }
+
+ if (in_array('partial', $status_parameters)) {
+ $credit_filters[] = Credit::STATUS_PARTIAL;
+ }
+
+ if (in_array('applied', $status_parameters)) {
+ $credit_filters[] = Credit::STATUS_APPLIED;
+ }
+
+ if (count($credit_filters) >= 1) {
+ $query->whereIn('status_id', $credit_filters);
+ }
+
+ return $query;
+ }
+
private function decorateAdvancedFields(Credit $credit, array $entity): array
{
// if (in_array('country_id', $this->input['report_keys'])) {
diff --git a/app/Export/CSV/ExpenseExport.php b/app/Export/CSV/ExpenseExport.php
index b5be8b4f8458..07ba62c88a90 100644
--- a/app/Export/CSV/ExpenseExport.php
+++ b/app/Export/CSV/ExpenseExport.php
@@ -83,10 +83,14 @@ class ExpenseExport extends BaseExport
->with('client')
->withTrashed()
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
+ if($this->input['status'] ?? false) {
+ $query = $this->addExpenseStatusFilter($query, $this->input['status']);
+ }
+
if(isset($this->input['clients'])) {
$query = $this->addClientFilter($query, $this->input['clients']);
}
@@ -152,6 +156,55 @@ class ExpenseExport extends BaseExport
return $this->decorateAdvancedFields($expense, $entity);
}
+ protected function addExpenseStatusFilter($query, $status): Builder
+ {
+
+ $status_parameters = explode(',', $status);
+
+ if (in_array('all', $status_parameters)) {
+ return $query;
+ }
+
+ $query->where(function ($query) use ($status_parameters) {
+ if (in_array('logged', $status_parameters)) {
+ $query->orWhere(function ($query) {
+ $query->where('amount', '>', 0)
+ ->whereNull('invoice_id')
+ ->whereNull('payment_date')
+ ->where('should_be_invoiced', false);
+ });
+ }
+
+ if (in_array('pending', $status_parameters)) {
+ $query->orWhere(function ($query) {
+ $query->where('should_be_invoiced', true)
+ ->whereNull('invoice_id');
+ });
+ }
+
+ if (in_array('invoiced', $status_parameters)) {
+ $query->orWhere(function ($query) {
+ $query->whereNotNull('invoice_id');
+ });
+ }
+
+ if (in_array('paid', $status_parameters)) {
+ $query->orWhere(function ($query) {
+ $query->whereNotNull('payment_date');
+ });
+ }
+
+ if (in_array('unpaid', $status_parameters)) {
+ $query->orWhere(function ($query) {
+ $query->whereNull('payment_date');
+ });
+ }
+
+ });
+
+ return $query;
+ }
+
private function decorateAdvancedFields(Expense $expense, array $entity): array
{
// if (in_array('expense.currency_id', $this->input['report_keys'])) {
diff --git a/app/Export/CSV/InvoiceExport.php b/app/Export/CSV/InvoiceExport.php
index 546b3689ba90..267ae158a14a 100644
--- a/app/Export/CSV/InvoiceExport.php
+++ b/app/Export/CSV/InvoiceExport.php
@@ -58,7 +58,7 @@ class InvoiceExport extends BaseExport
->withTrashed()
->with('client')
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
@@ -151,9 +151,9 @@ class InvoiceExport extends BaseExport
// $entity['invoice.status'] = $invoice->stringStatus($invoice->status_id);
// }
- // if (in_array('invoice.recurring_id', $this->input['report_keys'])) {
- // $entity['invoice.recurring_id'] = $invoice->recurring_invoice->number ?? '';
- // }
+ if (in_array('invoice.recurring_id', $this->input['report_keys'])) {
+ $entity['invoice.recurring_id'] = $invoice->recurring_invoice->number ?? '';
+ }
if (in_array('invoice.auto_bill_enabled', $this->input['report_keys'])) {
$entity['invoice.auto_bill_enabled'] = $invoice->auto_bill_enabled ? ctrans('texts.yes') : ctrans('texts.no');
diff --git a/app/Export/CSV/InvoiceItemExport.php b/app/Export/CSV/InvoiceItemExport.php
index b701b2faa2f1..19a976e828c5 100644
--- a/app/Export/CSV/InvoiceItemExport.php
+++ b/app/Export/CSV/InvoiceItemExport.php
@@ -71,11 +71,15 @@ class InvoiceItemExport extends BaseExport
->withTrashed()
->with('client')
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
- $query = $this->applyFilters($query);
+ if($this->input['status'] ?? false) {
+ $query = $this->addInvoiceStatusFilter($query, $this->input['status']);
+ }
+
+ $query = $this->applyProductFilters($query);
if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query);
@@ -232,9 +236,9 @@ class InvoiceItemExport extends BaseExport
// $entity['invoice.status'] = $invoice->stringStatus($invoice->status_id);
// }
- // if (in_array('invoice.recurring_id', $this->input['report_keys'])) {
- // $entity['invoice.recurring_id'] = $invoice->recurring_invoice->number ?? '';
- // }
+ if (in_array('invoice.recurring_id', $this->input['report_keys'])) {
+ $entity['invoice.recurring_id'] = $invoice->recurring_invoice->number ?? '';
+ }
if (in_array('invoice.assigned_user_id', $this->input['report_keys'])) {
$entity['invoice.assigned_user_id'] = $invoice->assigned_user ? $invoice->assigned_user->present()->name() : '';
diff --git a/app/Export/CSV/PaymentExport.php b/app/Export/CSV/PaymentExport.php
index 93550f9545c3..ee217d1c6a9a 100644
--- a/app/Export/CSV/PaymentExport.php
+++ b/app/Export/CSV/PaymentExport.php
@@ -61,6 +61,8 @@ class PaymentExport extends BaseExport
$query = $this->addDateRange($query);
+ $query = $this->addPaymentStatusFilters($query, $this->input['status'] ?? '');
+
if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query);
}
diff --git a/app/Export/CSV/PurchaseOrderExport.php b/app/Export/CSV/PurchaseOrderExport.php
index f1fa4501510b..3451bb7be88e 100644
--- a/app/Export/CSV/PurchaseOrderExport.php
+++ b/app/Export/CSV/PurchaseOrderExport.php
@@ -31,51 +31,6 @@ class PurchaseOrderExport extends BaseExport
private Decorator $decorator;
- public array $entity_keys = [
- 'amount' => 'purchase_order.amount',
- 'balance' => 'purchase_order.balance',
- 'vendor' => 'purchase_order.vendor_id',
- // 'custom_surcharge1' => 'purchase_order.custom_surcharge1',
- // 'custom_surcharge2' => 'purchase_order.custom_surcharge2',
- // 'custom_surcharge3' => 'purchase_order.custom_surcharge3',
- // 'custom_surcharge4' => 'purchase_order.custom_surcharge4',
- 'custom_value1' => 'purchase_order.custom_value1',
- 'custom_value2' => 'purchase_order.custom_value2',
- 'custom_value3' => 'purchase_order.custom_value3',
- 'custom_value4' => 'purchase_order.custom_value4',
- 'date' => 'purchase_order.date',
- 'discount' => 'purchase_order.discount',
- 'due_date' => 'purchase_order.due_date',
- 'exchange_rate' => 'purchase_order.exchange_rate',
- 'footer' => 'purchase_order.footer',
- 'number' => 'purchase_order.number',
- 'paid_to_date' => 'purchase_order.paid_to_date',
- 'partial' => 'purchase_order.partial',
- 'partial_due_date' => 'purchase_order.partial_due_date',
- 'po_number' => 'purchase_order.po_number',
- 'private_notes' => 'purchase_order.private_notes',
- 'public_notes' => 'purchase_order.public_notes',
- 'status' => 'purchase_order.status',
- 'tax_name1' => 'purchase_order.tax_name1',
- 'tax_name2' => 'purchase_order.tax_name2',
- 'tax_name3' => 'purchase_order.tax_name3',
- 'tax_rate1' => 'purchase_order.tax_rate1',
- 'tax_rate2' => 'purchase_order.tax_rate2',
- 'tax_rate3' => 'purchase_order.tax_rate3',
- 'terms' => 'purchase_order.terms',
- 'total_taxes' => 'purchase_order.total_taxes',
- 'currency_id' => 'purchase_order.currency_id',
- ];
-
- private array $decorate_keys = [
- 'country',
- 'currency_id',
- 'status',
- 'vendor',
- 'project',
- ];
-
-
public function __construct(Company $company, array $input)
{
$this->company = $company;
@@ -104,10 +59,12 @@ class PurchaseOrderExport extends BaseExport
->withTrashed()
->with('vendor')
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
+ $query = $this->addPurchaseOrderStatusFilter($query, $this->input['status'] ?? '');
+
if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query);
}
@@ -167,7 +124,7 @@ class PurchaseOrderExport extends BaseExport
if (is_array($parts) && $parts[0] == 'purchase_order' && array_key_exists($parts[1], $transformed_purchase_order)) {
$entity[$key] = $transformed_purchase_order[$parts[1]];
} else {
- // nlog($key);
+ nlog($key);
$entity[$key] = $this->decorator->transform($key, $purchase_order);
// $entity[$key] = '';
@@ -182,16 +139,13 @@ class PurchaseOrderExport extends BaseExport
private function decorateAdvancedFields(PurchaseOrder $purchase_order, array $entity): array
{
- if (in_array('country_id', $this->input['report_keys'])) {
- $entity['country'] = $purchase_order->vendor->country ? ctrans("texts.country_{$purchase_order->vendor->country->name}") : '';
+
+ if (in_array('purchase_order.currency_id', $this->input['report_keys'])) {
+ $entity['purchase_order.currency_id'] = $purchase_order->vendor->currency() ? $purchase_order->vendor->currency()->code : $purchase_order->company->currency()->code;
}
- if (in_array('currency_id', $this->input['report_keys'])) {
- $entity['currency_id'] = $purchase_order->vendor->currency() ? $purchase_order->vendor->currency()->code : $purchase_order->company->currency()->code;
- }
-
- if (in_array('vendor_id', $this->input['report_keys'])) {
- $entity['vendor'] = $purchase_order->vendor->present()->name();
+ if (in_array('purchase_order.vendor_id', $this->input['report_keys'])) {
+ $entity['purchase_order.vendor_id'] = $purchase_order->vendor->present()->name();
}
if (in_array('purchase_order.status', $this->input['report_keys'])) {
diff --git a/app/Export/CSV/PurchaseOrderItemExport.php b/app/Export/CSV/PurchaseOrderItemExport.php
index ccdd7a8dc27d..76107e04158c 100644
--- a/app/Export/CSV/PurchaseOrderItemExport.php
+++ b/app/Export/CSV/PurchaseOrderItemExport.php
@@ -63,10 +63,12 @@ class PurchaseOrderItemExport extends BaseExport
$query = PurchaseOrder::query()
->withTrashed()
->with('vendor')->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
+ $query = $this->addPurchaseOrderStatusFilter($query, $this->input['status'] ?? '');
+
if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query);
}
@@ -190,23 +192,35 @@ class PurchaseOrderItemExport extends BaseExport
private function decorateAdvancedFields(PurchaseOrder $purchase_order, array $entity): array
{
- if (in_array('currency_id', $this->input['report_keys'])) {
- $entity['currency'] = $purchase_order->vendor->currency() ? $purchase_order->vendor->currency()->code : $purchase_order->company->currency()->code;
+ // if (in_array('currency_id', $this->input['report_keys'])) {
+ // $entity['currency'] = $purchase_order->vendor->currency() ? $purchase_order->vendor->currency()->code : $purchase_order->company->currency()->code;
+ // }
+
+ // if(array_key_exists('type', $entity)) {
+ // $entity['type'] = $purchase_order->typeIdString($entity['type']);
+ // }
+
+ // if(array_key_exists('tax_category', $entity)) {
+ // $entity['tax_category'] = $purchase_order->taxTypeString($entity['tax_category']);
+ // }
+
+ // if($this->force_keys) {
+ // $entity['vendor'] = $purchase_order->vendor->present()->name();
+ // $entity['vendor_id_number'] = $purchase_order->vendor->id_number;
+ // $entity['vendor_number'] = $purchase_order->vendor->number;
+ // $entity['status'] = $purchase_order->stringStatus($purchase_order->status_id);
+ // }
+
+ if (in_array('purchase_order.currency_id', $this->input['report_keys'])) {
+ $entity['purchase_order.currency_id'] = $purchase_order->vendor->currency() ? $purchase_order->vendor->currency()->code : $purchase_order->company->currency()->code;
}
- if(array_key_exists('type', $entity)) {
- $entity['type'] = $purchase_order->typeIdString($entity['type']);
+ if (in_array('purchase_order.vendor_id', $this->input['report_keys'])) {
+ $entity['purchase_order.vendor_id'] = $purchase_order->vendor->present()->name();
}
- if(array_key_exists('tax_category', $entity)) {
- $entity['tax_category'] = $purchase_order->taxTypeString($entity['tax_category']);
- }
-
- if($this->force_keys) {
- $entity['vendor'] = $purchase_order->vendor->present()->name();
- $entity['vendor_id_number'] = $purchase_order->vendor->id_number;
- $entity['vendor_number'] = $purchase_order->vendor->number;
- $entity['status'] = $purchase_order->stringStatus($purchase_order->status_id);
+ if (in_array('purchase_order.status', $this->input['report_keys'])) {
+ $entity['purchase_order.status'] = $purchase_order->stringStatus($purchase_order->status_id);
}
if (in_array('purchase_order.user_id', $this->input['report_keys'])) {
diff --git a/app/Export/CSV/QuoteExport.php b/app/Export/CSV/QuoteExport.php
index 1242ba19f6de..a279d5a67b40 100644
--- a/app/Export/CSV/QuoteExport.php
+++ b/app/Export/CSV/QuoteExport.php
@@ -65,10 +65,12 @@ class QuoteExport extends BaseExport
->withTrashed()
->with('client')
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
+ $query = $this->addQuoteStatusFilter($query, $this->input['status'] ?? '');
+
if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query);
}
diff --git a/app/Export/CSV/QuoteItemExport.php b/app/Export/CSV/QuoteItemExport.php
index bdb16061d53b..566b811029d5 100644
--- a/app/Export/CSV/QuoteItemExport.php
+++ b/app/Export/CSV/QuoteItemExport.php
@@ -66,10 +66,12 @@ class QuoteItemExport extends BaseExport
$query = Quote::query()
->withTrashed()
->with('client')->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
+ $query = $this->addQuoteStatusFilter($query, $this->input['status'] ?? '');
+
if($this->input['document_email_attachment'] ?? false) {
$this->queueDocuments($query);
}
diff --git a/app/Export/CSV/RecurringInvoiceExport.php b/app/Export/CSV/RecurringInvoiceExport.php
index 20545468fd26..87afe6e7d90e 100644
--- a/app/Export/CSV/RecurringInvoiceExport.php
+++ b/app/Export/CSV/RecurringInvoiceExport.php
@@ -57,10 +57,12 @@ class RecurringInvoiceExport extends BaseExport
->withTrashed()
->with('client')
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
+ $query = $this->addRecurringInvoiceStatusFilter($query, $this->input['status'] ?? '');
+
return $query;
}
diff --git a/app/Export/CSV/TaskExport.php b/app/Export/CSV/TaskExport.php
index 7e91a32dadad..33685b5092c2 100644
--- a/app/Export/CSV/TaskExport.php
+++ b/app/Export/CSV/TaskExport.php
@@ -68,7 +68,7 @@ class TaskExport extends BaseExport
$query = Task::query()
->withTrashed()
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
@@ -202,6 +202,34 @@ class TaskExport extends BaseExport
}
}
+
+ /**
+ * Add Task Status Filter
+ *
+ * @param Builder $query
+ * @param string $status
+ * @return Builder
+ */
+ protected function addTaskStatusFilter(Builder $query, string $status): Builder
+ {
+
+ $status_parameters = explode(',', $status);
+
+ if (in_array('all', $status_parameters) || count($status_parameters) == 0) {
+ return $query;
+ }
+
+ if (in_array('invoiced', $status_parameters)) {
+ $query->whereNotNull('invoice_id');
+ }
+
+ if (in_array('uninvoiced', $status_parameters)) {
+ $query->whereNull('invoice_id');
+ }
+
+ return $query;
+
+ }
private function decorateAdvancedFields(Task $task, array $entity): array
{
diff --git a/app/Export/CSV/VendorExport.php b/app/Export/CSV/VendorExport.php
index a98ee80f825a..5b328da387f3 100644
--- a/app/Export/CSV/VendorExport.php
+++ b/app/Export/CSV/VendorExport.php
@@ -62,7 +62,7 @@ class VendorExport extends BaseExport
$query = Vendor::query()->with('contacts')
->withTrashed()
->where('company_id', $this->company->id)
- ->where('is_deleted', 0);
+ ->where('is_deleted', $this->input['include_deleted'] ?? false);
$query = $this->addDateRange($query);
diff --git a/app/Export/Decorators/InvoiceDecorator.php b/app/Export/Decorators/InvoiceDecorator.php
index 8dd6d36e439d..5ce6d936c6ce 100644
--- a/app/Export/Decorators/InvoiceDecorator.php
+++ b/app/Export/Decorators/InvoiceDecorator.php
@@ -79,7 +79,6 @@ class InvoiceDecorator extends Decorator implements DecoratorInterface
return $invoice->partial_due_date ?? '';
}
-
public function assigned_user_id(Invoice $invoice)
{
return $invoice->assigned_user ? $invoice->assigned_user->present()->name() : '';
diff --git a/app/Filters/DocumentFilters.php b/app/Filters/DocumentFilters.php
index 73b9b97a5b59..f649ccca1767 100644
--- a/app/Filters/DocumentFilters.php
+++ b/app/Filters/DocumentFilters.php
@@ -29,11 +29,13 @@ class DocumentFilters extends QueryFilters
*/
public function filter(string $filter = ''): Builder
{
+
if (strlen($filter) == 0) {
return $this->builder;
}
- return $this->builder;
+ return $this->builder->where('name', 'like', '%'.$filter.'%');
+
}
/**
@@ -47,9 +49,46 @@ class DocumentFilters extends QueryFilters
*/
public function client_id(string $client_id = ''): Builder
{
- return $this->builder;
+
+ return $this->builder->where(function ($query) use ($client_id) {
+ $query->whereHasMorph('documentable', [
+ \App\Models\Invoice::class,
+ \App\Models\Quote::class,
+ \App\Models\Credit::class,
+ \App\Models\Expense::class,
+ \App\Models\Payment::class,
+ \App\Models\Task::class,
+ \App\Models\RecurringExpense::class,
+ \App\Models\RecurringInvoice::class,
+ \App\Models\Project::class,
+ ], function ($q2) use ($client_id) {
+ $q2->where('client_id', $this->decodePrimaryKey($client_id));
+ })->orWhereHasMorph('documentable', [\App\Models\Client::class], function ($q3) use ($client_id) {
+ $q3->where('id', $this->decodePrimaryKey($client_id));
+ });
+ });
+
}
+ public function type(string $types = '')
+ {
+ $types = explode(',', $types);
+
+ foreach ($types as $type)
+ {
+ match($type) {
+ 'private' => $this->builder->where('is_public', 0),
+ 'public' => $this->builder->where('is_public', 1),
+ 'pdf' => $this->builder->where('type', 'pdf'),
+ 'image' => $this->builder->whereIn('type', ['png','jpeg','jpg','gif','svg']),
+ 'other' => $this->builder->whereNotIn('type', ['pdf','png','jpeg','jpg','gif','svg']),
+ default => $this->builder,
+ };
+ }
+
+ return $this->builder;
+ }
+
/**
* Sorts the list based on $sort.
*
diff --git a/app/Filters/InvoiceFilters.php b/app/Filters/InvoiceFilters.php
index 568fb03c9a4b..c1b41dd4b7e2 100644
--- a/app/Filters/InvoiceFilters.php
+++ b/app/Filters/InvoiceFilters.php
@@ -62,6 +62,10 @@ class InvoiceFilters extends QueryFilters
$invoice_filters[] = Invoice::STATUS_PAID;
}
+ if (in_array('cancelled', $status_parameters)) {
+ $invoice_filters[] = Invoice::STATUS_CANCELLED;
+ }
+
if (in_array('unpaid', $status_parameters)) {
$invoice_filters[] = Invoice::STATUS_SENT;
$invoice_filters[] = Invoice::STATUS_PARTIAL;
@@ -324,6 +328,7 @@ class InvoiceFilters extends QueryFilters
}
if($sort_col[0] == 'number') {
+ // return $this->builder->orderByRaw('CAST(number AS UNSIGNED), number ' . $dir);
return $this->builder->orderByRaw('ABS(number) ' . $dir);
}
diff --git a/app/Helpers/Bank/Nordigen/Nordigen.php b/app/Helpers/Bank/Nordigen/Nordigen.php
index 33c62d076c8d..a07daf857bdf 100644
--- a/app/Helpers/Bank/Nordigen/Nordigen.php
+++ b/app/Helpers/Bank/Nordigen/Nordigen.php
@@ -97,11 +97,11 @@ class Nordigen
return $it->transform($out);
} catch (\Exception $e) {
- if (strpos($e->getMessage(), "Invalid Account ID") !== false) {
- return false;
- }
- throw $e;
+ nlog("Nordigen getAccount() failed => {$account_id} => " . $e->getMessage());
+
+ return false;
+
}
}
diff --git a/app/Helpers/Invoice/InvoiceItemSum.php b/app/Helpers/Invoice/InvoiceItemSum.php
index f9dc63c972b7..b4b8bd5980d1 100644
--- a/app/Helpers/Invoice/InvoiceItemSum.php
+++ b/app/Helpers/Invoice/InvoiceItemSum.php
@@ -277,7 +277,7 @@ class InvoiceItemSum
$item_tax += $item_tax_rate1_total;
- if (strlen($this->item->tax_name1) > 2) {
+ if (strlen($this->item->tax_name1) > 1) {
$this->groupTax($this->item->tax_name1, $this->item->tax_rate1, $item_tax_rate1_total);
}
@@ -285,7 +285,7 @@ class InvoiceItemSum
$item_tax += $item_tax_rate2_total;
- if (strlen($this->item->tax_name2) > 2) {
+ if (strlen($this->item->tax_name2) > 1) {
$this->groupTax($this->item->tax_name2, $this->item->tax_rate2, $item_tax_rate2_total);
}
@@ -293,7 +293,7 @@ class InvoiceItemSum
$item_tax += $item_tax_rate3_total;
- if (strlen($this->item->tax_name3) > 2) {
+ if (strlen($this->item->tax_name3) > 1) {
$this->groupTax($this->item->tax_name3, $this->item->tax_rate3, $item_tax_rate3_total);
}
diff --git a/app/Helpers/Invoice/InvoiceItemSumInclusive.php b/app/Helpers/Invoice/InvoiceItemSumInclusive.php
index 299de3153076..a09bc9314a64 100644
--- a/app/Helpers/Invoice/InvoiceItemSumInclusive.php
+++ b/app/Helpers/Invoice/InvoiceItemSumInclusive.php
@@ -231,7 +231,7 @@ class InvoiceItemSumInclusive
/** @var float $item_tax */
$item_tax += $this->formatValue($item_tax_rate1_total, $this->currency->precision);
- if (strlen($this->item->tax_name1) > 2) {
+ if (strlen($this->item->tax_name1) > 1) {
$this->groupTax($this->item->tax_name1, $this->item->tax_rate1, $item_tax_rate1_total);
}
@@ -239,7 +239,7 @@ class InvoiceItemSumInclusive
$item_tax += $this->formatValue($item_tax_rate2_total, $this->currency->precision);
- if (strlen($this->item->tax_name2) > 2) {
+ if (strlen($this->item->tax_name2) > 1) {
$this->groupTax($this->item->tax_name2, $this->item->tax_rate2, $item_tax_rate2_total);
}
@@ -247,7 +247,7 @@ class InvoiceItemSumInclusive
$item_tax += $this->formatValue($item_tax_rate3_total, $this->currency->precision);
- if (strlen($this->item->tax_name3) > 2) {
+ if (strlen($this->item->tax_name3) > 1) {
$this->groupTax($this->item->tax_name3, $this->item->tax_rate3, $item_tax_rate3_total);
}
diff --git a/app/Helpers/Invoice/InvoiceSum.php b/app/Helpers/Invoice/InvoiceSum.php
index fd1472c18e7f..d6379356cd11 100644
--- a/app/Helpers/Invoice/InvoiceSum.php
+++ b/app/Helpers/Invoice/InvoiceSum.php
@@ -122,7 +122,7 @@ class InvoiceSum
private function calculateInvoiceTaxes(): self
{
- if (is_string($this->invoice->tax_name1) && strlen($this->invoice->tax_name1) > 2) {
+ if (is_string($this->invoice->tax_name1) && strlen($this->invoice->tax_name1) >= 2) {
$tax = $this->taxer($this->total, $this->invoice->tax_rate1);
$tax += $this->getSurchargeTaxTotalForKey($this->invoice->tax_name1, $this->invoice->tax_rate1);
@@ -130,7 +130,7 @@ class InvoiceSum
$this->total_tax_map[] = ['name' => $this->invoice->tax_name1.' '.floatval($this->invoice->tax_rate1).'%', 'total' => $tax];
}
- if (is_string($this->invoice->tax_name2) && strlen($this->invoice->tax_name2) > 2) {
+ if (is_string($this->invoice->tax_name2) && strlen($this->invoice->tax_name2) >= 2) {
$tax = $this->taxer($this->total, $this->invoice->tax_rate2);
$tax += $this->getSurchargeTaxTotalForKey($this->invoice->tax_name2, $this->invoice->tax_rate2);
@@ -138,7 +138,7 @@ class InvoiceSum
$this->total_tax_map[] = ['name' => $this->invoice->tax_name2.' '.floatval($this->invoice->tax_rate2).'%', 'total' => $tax];
}
- if (is_string($this->invoice->tax_name3) && strlen($this->invoice->tax_name3) > 2) {
+ if (is_string($this->invoice->tax_name3) && strlen($this->invoice->tax_name3) >= 2) {
$tax = $this->taxer($this->total, $this->invoice->tax_rate3);
$tax += $this->getSurchargeTaxTotalForKey($this->invoice->tax_name3, $this->invoice->tax_rate3);
diff --git a/app/Helpers/Invoice/InvoiceSumInclusive.php b/app/Helpers/Invoice/InvoiceSumInclusive.php
index d213874e68b2..3786b55f99e6 100644
--- a/app/Helpers/Invoice/InvoiceSumInclusive.php
+++ b/app/Helpers/Invoice/InvoiceSumInclusive.php
@@ -340,8 +340,7 @@ class InvoiceSumInclusive
$this->total_taxes += $total_line_tax;
}
-nlog($this->tax_map);
-nlog($this->total_taxes);
+
return $this;
}
diff --git a/app/Helpers/SwissQr/SwissQrGenerator.php b/app/Helpers/SwissQr/SwissQrGenerator.php
index 2ccc73ed3c4b..86ed38330aa2 100644
--- a/app/Helpers/SwissQr/SwissQrGenerator.php
+++ b/app/Helpers/SwissQr/SwissQrGenerator.php
@@ -159,7 +159,7 @@ class SwissQrGenerator
// Optionally, add some human-readable information about what the bill is for.
$qrBill->setAdditionalInformation(
QrBill\DataGroup\Element\AdditionalInformation::create(
- $this->invoice->public_notes ? substr($this->invoice->public_notes, 0, 139) : ctrans('texts.invoice_number_placeholder', ['invoice' => $this->invoice->number])
+ $this->invoice->public_notes ? substr(strip_tags($this->invoice->public_notes), 0, 139) : ctrans('texts.invoice_number_placeholder', ['invoice' => $this->invoice->number])
)
);
diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php
index 5f43373501e3..d6f8a8a8fd2d 100644
--- a/app/Http/Controllers/ClientController.php
+++ b/app/Http/Controllers/ClientController.php
@@ -49,6 +49,9 @@ use App\Http\Requests\Client\ClientDocumentsRequest;
use App\Http\Requests\Client\ReactivateClientEmailRequest;
use App\Models\Expense;
use App\Models\Payment;
+use App\Models\Project;
+use App\Models\RecurringExpense;
+use App\Models\RecurringInvoice;
use App\Models\Task;
use App\Transformers\DocumentTransformer;
@@ -421,7 +424,7 @@ class ClientController extends BaseController
$documents = Document::query()
->company()
- ->whereHasMorph('documentable', [Invoice::class, Quote::class, Credit::class, Expense::class, Payment::class, Task::class], function ($query) use ($client) {
+ ->whereHasMorph('documentable', [Invoice::class, Quote::class, Credit::class, Expense::class, Payment::class, Task::class, RecurringInvoice::class, RecurringExpense::class, Project::class], function ($query) use ($client) {
$query->where('client_id', $client->id);
})
->orWhereHasMorph('documentable', [Client::class], function ($query) use ($client) {
diff --git a/app/Http/Controllers/ClientPortal/EmailPreferencesController.php b/app/Http/Controllers/ClientPortal/EmailPreferencesController.php
index 5abf591f0602..849535242e94 100644
--- a/app/Http/Controllers/ClientPortal/EmailPreferencesController.php
+++ b/app/Http/Controllers/ClientPortal/EmailPreferencesController.php
@@ -45,7 +45,7 @@ class EmailPreferencesController extends Controller
if ($invitation->contact->is_locked && !Cache::has("unsubscribe_notitfication_suppression:{$invitation_key}")) {
$nmo = new NinjaMailerObject();
- $nmo->mailable = new NinjaMailer((new ClientUnsubscribedObject($invitation->contact, $invitation->contact->company, $invitation->contact->company->owner()->company_users()->first()->portalType() ?? true))->build());
+ $nmo->mailable = new NinjaMailer((new ClientUnsubscribedObject($invitation->contact, $invitation->contact->company, true))->build());
$nmo->company = $invitation->contact->company;
$nmo->to_user = $invitation->contact->company->owner();
$nmo->settings = $invitation->contact->company->settings;
diff --git a/app/Http/Controllers/ClientPortal/InvitationController.php b/app/Http/Controllers/ClientPortal/InvitationController.php
index ae52af3cc07f..9185b94bc153 100644
--- a/app/Http/Controllers/ClientPortal/InvitationController.php
+++ b/app/Http/Controllers/ClientPortal/InvitationController.php
@@ -271,6 +271,7 @@ class InvitationController extends Controller
->with('contact.client')
->firstOrFail();
+
if ($invitation->contact->trashed()) {
$invitation->contact->restore();
}
@@ -294,7 +295,10 @@ class InvitationController extends Controller
'payable_invoices' => [
['invoice_id' => $invitation->invoice->hashed_id, 'amount' => $amount],
],
- 'signature' => false
+ 'signature' => false,
+ 'contact_first_name' => $invitation->contact->first_name ?? '',
+ 'contact_last_name' => $invitation->contact->last_name ?? '',
+ 'contact_email' => $invitation->contact->email ?? ''
];
$request->replace($data);
diff --git a/app/Http/Controllers/ClientPortal/SubscriptionPurchaseController.php b/app/Http/Controllers/ClientPortal/SubscriptionPurchaseController.php
index 62d776869f37..ad0e0f212fb7 100644
--- a/app/Http/Controllers/ClientPortal/SubscriptionPurchaseController.php
+++ b/app/Http/Controllers/ClientPortal/SubscriptionPurchaseController.php
@@ -25,6 +25,10 @@ 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]);
+ }
+
/* Make sure the contact is logged into the correct company for this subscription */
if (auth()->guard('contact')->user() && auth()->guard('contact')->user()->company_id != $subscription->company_id) {
auth()->guard('contact')->logout();
diff --git a/app/Http/Controllers/LicenseController.php b/app/Http/Controllers/LicenseController.php
index 78dec754323f..1de2b6d28370 100644
--- a/app/Http/Controllers/LicenseController.php
+++ b/app/Http/Controllers/LicenseController.php
@@ -158,7 +158,6 @@ class LicenseController extends BaseController
/* Catch claim license requests */
if (config('ninja.environment') == 'selfhost') {
- // $response = Http::get( "http://ninja.test:8000/claim_license", [
$response = Http::get("https://invoicing.co/claim_license", [
'license_key' => $license_key,
'product_id' => 3,
diff --git a/app/Http/Controllers/ProtectedDownloadController.php b/app/Http/Controllers/ProtectedDownloadController.php
index 330552c6fa78..577216124420 100644
--- a/app/Http/Controllers/ProtectedDownloadController.php
+++ b/app/Http/Controllers/ProtectedDownloadController.php
@@ -21,7 +21,7 @@ class ProtectedDownloadController extends BaseController
public function index(Request $request, string $hash)
{
/** @var string $hashed_path */
- $hashed_path = Cache::pull($hash);
+ $hashed_path = Cache::get($hash);
if (!$hashed_path) {
throw new SystemError('File no longer available', 404);
diff --git a/app/Http/Controllers/SmtpController.php b/app/Http/Controllers/SmtpController.php
index b28275e62fff..edfc24c38689 100644
--- a/app/Http/Controllers/SmtpController.php
+++ b/app/Http/Controllers/SmtpController.php
@@ -30,16 +30,24 @@ class SmtpController extends BaseController
$user = auth()->user();
$company = $user->company();
+ $smtp_host = $request->input('smtp_host', $company->smtp_host);
+ $smtp_port = $request->input('smtp_port', $company->smtp_port);
+ $smtp_username = $request->input('smtp_username', $company->smtp_username);
+ $smtp_password = $request->input('smtp_password', $company->smtp_password);
+ $smtp_encryption = $request->input('smtp_encryption', $company->smtp_encryption ?? 'tls');
+ $smtp_local_domain = $request->input('smtp_local_domain', strlen($company->smtp_local_domain) > 2 ? $company->smtp_local_domain : null);
+ $smtp_verify_peer = $request->input('verify_peer', $company->smtp_verify_peer ?? true);
+
config([
'mail.mailers.smtp' => [
'transport' => 'smtp',
- 'host' => $request->input('smtp_host', $company->smtp_host),
- 'port' => $request->input('smtp_port', $company->smtp_port),
- 'username' => $request->input('smtp_username', $company->smtp_username),
- 'password' => $request->input('smtp_password', $company->smtp_password),
- 'encryption' => $request->input('smtp_encryption', $company->smtp_encryption ?? 'tls'),
- 'local_domain' => $request->input('smtp_local_domain', strlen($company->smtp_local_domain) > 2 ? $company->smtp_local_domain : null),
- 'verify_peer' => $request->input('verify_peer', $company->smtp_verify_peer ?? true),
+ 'host' => $smtp_host,
+ 'port' => $smtp_port,
+ 'username' => $smtp_username,
+ 'password' => $smtp_password,
+ 'encryption' => $smtp_encryption,
+ 'local_domain' => $smtp_local_domain,
+ 'verify_peer' => $smtp_verify_peer,
'timeout' => 5,
],
]);
@@ -47,7 +55,7 @@ class SmtpController extends BaseController
(new \Illuminate\Mail\MailServiceProvider(app()))->register();
try {
- Mail::to($user->email, $user->present()->name())->send(new TestMailServer('Email Server Works!', strlen($company->settings->custom_sending_email) > 1 ? $company->settings->custom_sending_email : $user->email));
+ Mail::mailer('smtp')->to($user->email, $user->present()->name())->send(new TestMailServer('Email Server Works!', strlen($company->settings->custom_sending_email) > 1 ? $company->settings->custom_sending_email : $user->email));
} catch (\Exception $e) {
app('mail.manager')->forgetMailers();
return response()->json(['message' => $e->getMessage()], 400);
diff --git a/app/Http/Controllers/StripeConnectController.php b/app/Http/Controllers/StripeConnectController.php
index a8de13091bf4..e2479c62d45f 100644
--- a/app/Http/Controllers/StripeConnectController.php
+++ b/app/Http/Controllers/StripeConnectController.php
@@ -64,6 +64,8 @@ class StripeConnectController extends BaseController
if ($request->has('error') && $request->error == 'access_denied') {
return view('auth.connect.access_denied');
}
+
+ $response = false;
try {
/** @class \stdClass $response
@@ -88,6 +90,11 @@ class StripeConnectController extends BaseController
nlog($response);
} catch (\Exception $e) {
+
+
+ }
+
+ if(!$response) {
return view('auth.connect.access_denied');
}
@@ -144,11 +151,14 @@ class StripeConnectController extends BaseController
if(isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react']) {
$redirect_uri = config('ninja.react_url').'/#/settings/online_payments';
} else {
- $redirect_uri = config('ninja.app_url').'/stripe/completed';
+ $redirect_uri = config('ninja.app_url');
}
+ \Illuminate\Support\Facades\Cache::pull($request->token);
+
//response here
return view('auth.connect.completed', ['url' => $redirect_uri]);
+ // return redirect($redirect_uri);
}
}
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 6a53796f3bd0..ef66fb8faba8 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -135,7 +135,7 @@ class Kernel extends HttpKernel
'can' => Authorize::class,
'cors' => Cors::class,
'guest' => RedirectIfAuthenticated::class,
- 'signed' => ValidateSignature::class,
+ 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'verified' => EnsureEmailIsVerified::class,
'query_logging' => QueryLogging::class,
'token_auth' => TokenAuth::class,
diff --git a/app/Http/Requests/Client/StoreClientRequest.php b/app/Http/Requests/Client/StoreClientRequest.php
index 30697ab9b09f..a0d807d7d6dd 100644
--- a/app/Http/Requests/Client/StoreClientRequest.php
+++ b/app/Http/Requests/Client/StoreClientRequest.php
@@ -59,20 +59,6 @@ class StoreClientRequest extends Request
$rules['file'] = $this->file_validation;
}
- if (isset($this->number)) {
- $rules['number'] = Rule::unique('clients')->where('company_id', $user->company()->id);
- }
-
- $rules['country_id'] = 'integer|nullable';
-
- if (isset($this->currency_code)) {
- $rules['currency_code'] = 'sometimes|exists:currencies,code';
- }
-
- if (isset($this->country_code)) {
- $rules['country_code'] = new CountryCodeExistsRule();
- }
-
/* Ensure we have a client name, and that all emails are unique*/
//$rules['name'] = 'required|min:1';
$rules['settings'] = new ValidClientGroupSettingsRule();
@@ -97,6 +83,9 @@ class StoreClientRequest extends Request
$rules['number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', $user->company()->id)];
$rules['id_number'] = ['bail', 'nullable', Rule::unique('clients')->where('company_id', $user->company()->id)];
$rules['classification'] = 'bail|sometimes|nullable|in:individual,business,company,partnership,trust,charity,government,other';
+ $rules['shipping_country_id'] = 'integer|nullable|exists:countries,id';
+ $rules['number'] = ['sometimes', 'nullable', 'bail', Rule::unique('clients')->where('company_id', $user->company()->id)];
+ $rules['country_id'] = 'integer|nullable|exists:countries,id';
return $rules;
}
@@ -139,12 +128,16 @@ class StoreClientRequest extends Request
if (! array_key_exists('currency_id', $input['settings']) && isset($input['group_settings_id'])) {
$group_settings = GroupSetting::find($input['group_settings_id']);
- if ($group_settings && property_exists($group_settings->settings, 'currency_id') && isset($group_settings->settings->currency_id)) {
+ if ($group_settings && property_exists($group_settings->settings, 'currency_id') && is_numeric($group_settings->settings->currency_id)) {
$input['settings']['currency_id'] = (string) $group_settings->settings->currency_id;
} else {
$input['settings']['currency_id'] = (string) $user->company()->settings->currency_id;
}
- } elseif (! array_key_exists('currency_id', $input['settings'])) {
+ }
+ elseif (! array_key_exists('currency_id', $input['settings'])) {
+ $input['settings']['currency_id'] = (string) $user->company()->settings->currency_id;
+ }
+ elseif (empty($input['settings']['currency_id']) ?? true) {
$input['settings']['currency_id'] = (string) $user->company()->settings->currency_id;
}
@@ -160,10 +153,13 @@ class StoreClientRequest extends Request
}
}
+
+ // allow setting country_id by iso code
if (isset($input['country_code'])) {
$input['country_id'] = $this->getCountryCode($input['country_code']);
}
+ // allow setting country_id by iso code
if (isset($input['shipping_country_code'])) {
$input['shipping_country_id'] = $this->getCountryCode($input['shipping_country_code']);
}
@@ -173,10 +169,14 @@ class StoreClientRequest extends Request
unset($input['number']);
}
+ // prevent xss injection
if (array_key_exists('name', $input)) {
$input['name'] = strip_tags($input['name']);
}
+ //If you want to validate, the prop must be set.
+ $input['id'] = null;
+
$this->replace($input);
}
diff --git a/app/Http/Requests/Client/UpdateClientRequest.php b/app/Http/Requests/Client/UpdateClientRequest.php
index 11b8c4a60ffc..3ffea3250f05 100644
--- a/app/Http/Requests/Client/UpdateClientRequest.php
+++ b/app/Http/Requests/Client/UpdateClientRequest.php
@@ -60,17 +60,11 @@ class UpdateClientRequest extends Request
$rules['company_logo'] = 'mimes:jpeg,jpg,png,gif|max:10000';
$rules['industry_id'] = 'integer|nullable';
$rules['size_id'] = 'integer|nullable';
- $rules['country_id'] = 'integer|nullable';
- $rules['shipping_country_id'] = 'integer|nullable';
+ $rules['country_id'] = 'integer|nullable|exists:countries,id';
+ $rules['shipping_country_id'] = 'integer|nullable|exists:countries,id';
$rules['classification'] = 'bail|sometimes|nullable|in:individual,business,company,partnership,trust,charity,government,other';
-
- if ($this->id_number) {
- $rules['id_number'] = Rule::unique('clients')->where('company_id', $user->company()->id)->ignore($this->client->id);
- }
-
- if ($this->number) {
- $rules['number'] = Rule::unique('clients')->where('company_id', $user->company()->id)->ignore($this->client->id);
- }
+ $rules['id_number'] = ['sometimes', 'bail', 'nullable', Rule::unique('clients')->where('company_id', $user->company()->id)->ignore($this->client->id)];
+ $rules['number'] = ['sometimes', 'bail', Rule::unique('clients')->where('company_id', $user->company()->id)->ignore($this->client->id)];
$rules['settings'] = new ValidClientGroupSettingsRule();
$rules['contacts'] = 'array';
@@ -112,6 +106,9 @@ class UpdateClientRequest extends Request
if (array_key_exists('settings', $input) && ! array_key_exists('currency_id', $input['settings'])) {
$input['settings']['currency_id'] = (string) $user->company()->settings->currency_id;
}
+ elseif (empty($input['settings']['currency_id']) ?? true) {
+ $input['settings']['currency_id'] = (string) $user->company()->settings->currency_id;
+ }
if (isset($input['language_code'])) {
$input['settings']['language_id'] = $this->getLanguageId($input['language_code']);
@@ -127,9 +124,35 @@ class UpdateClientRequest extends Request
$input['name'] = strip_tags($input['name']);
}
+ // allow setting country_id by iso code
+ if (isset($input['country_code'])) {
+ $input['country_id'] = $this->getCountryCode($input['country_code']);
+ }
+
+ // allow setting country_id by iso code
+ if (isset($input['shipping_country_code'])) {
+ $input['shipping_country_id'] = $this->getCountryCode($input['shipping_country_code']);
+ }
+
+
$this->replace($input);
}
+ private function getCountryCode($country_code)
+ {
+ $countries = Cache::get('countries');
+
+ $country = $countries->filter(function ($item) use ($country_code) {
+ return $item->iso_3166_2 == $country_code || $item->iso_3166_3 == $country_code;
+ })->first();
+
+ if ($country) {
+ return (string) $country->id;
+ }
+
+ return '';
+ }
+
private function getLanguageId($language_code)
{
$languages = Cache::get('languages');
diff --git a/app/Http/Requests/Invoice/StoreInvoiceRequest.php b/app/Http/Requests/Invoice/StoreInvoiceRequest.php
index 018a1d7c7b36..393ada465aa0 100644
--- a/app/Http/Requests/Invoice/StoreInvoiceRequest.php
+++ b/app/Http/Requests/Invoice/StoreInvoiceRequest.php
@@ -77,6 +77,7 @@ class StoreInvoiceRequest extends Request
$rules['exchange_rate'] = 'bail|sometimes|numeric';
$rules['partial'] = 'bail|sometimes|nullable|numeric|gte:0';
$rules['partial_due_date'] = ['bail', 'sometimes', 'exclude_if:partial,0', Rule::requiredIf(fn () => $this->partial > 0), 'date'];
+ $rules['due_date'] = ['bail', 'sometimes', 'nullable', 'after:partial_due_date', Rule::requiredIf(fn () => strlen($this->partial_due_date) > 1), 'date'];
return $rules;
@@ -112,6 +113,12 @@ class StoreInvoiceRequest extends Request
$input['exchange_rate'] = 1;
}
+ //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');
+ }
+
$this->replace($input);
}
}
diff --git a/app/Http/Requests/Invoice/UpdateInvoiceRequest.php b/app/Http/Requests/Invoice/UpdateInvoiceRequest.php
index 501c2bab31d3..42d32ef81479 100644
--- a/app/Http/Requests/Invoice/UpdateInvoiceRequest.php
+++ b/app/Http/Requests/Invoice/UpdateInvoiceRequest.php
@@ -78,6 +78,7 @@ class UpdateInvoiceRequest extends Request
$rules['exchange_rate'] = 'bail|sometimes|numeric';
$rules['partial'] = 'bail|sometimes|nullable|numeric';
$rules['partial_due_date'] = ['bail', 'sometimes', 'exclude_if:partial,0', Rule::requiredIf(fn () => $this->partial > 0), 'date', 'before:due_date'];
+ $rules['due_date'] = ['bail', 'sometimes', 'nullable', 'after:partial_due_date', Rule::requiredIf(fn () => strlen($this->partial_due_date) > 1), 'date'];
return $rules;
@@ -107,6 +108,12 @@ class UpdateInvoiceRequest extends Request
$input['exchange_rate'] = 1;
}
+ //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');
+ }
+
$this->replace($input);
}
diff --git a/app/Http/Requests/Project/StoreProjectRequest.php b/app/Http/Requests/Project/StoreProjectRequest.php
index 8f8e4760df0c..3bc1bca1bc52 100644
--- a/app/Http/Requests/Project/StoreProjectRequest.php
+++ b/app/Http/Requests/Project/StoreProjectRequest.php
@@ -44,6 +44,7 @@ class StoreProjectRequest extends Request
$rules['name'] = 'required';
$rules['client_id'] = 'required|exists:clients,id,company_id,'.$user->company()->id;
+ $rules['budgeted_hours'] = 'sometimes|numeric';
if (isset($this->number)) {
$rules['number'] = Rule::unique('projects')->where('company_id', $user->company()->id);
@@ -74,6 +75,9 @@ class StoreProjectRequest extends Request
$input['color'] = '';
}
+ if(array_key_exists('budgeted_hours', $input) && empty($input['budgeted_hours']))
+ $input['budgeted_hours'] = 0;
+
$this->replace($input);
}
diff --git a/app/Http/Requests/Project/UpdateProjectRequest.php b/app/Http/Requests/Project/UpdateProjectRequest.php
index e68c90383790..cbcf6882cf89 100644
--- a/app/Http/Requests/Project/UpdateProjectRequest.php
+++ b/app/Http/Requests/Project/UpdateProjectRequest.php
@@ -45,6 +45,8 @@ class UpdateProjectRequest extends Request
$rules['number'] = Rule::unique('projects')->where('company_id', $user->company()->id)->ignore($this->project->id);
}
+ $rules['budgeted_hours'] = 'sometimes|numeric';
+
if ($this->file('documents') && is_array($this->file('documents'))) {
$rules['documents.*'] = $this->file_validation;
} elseif ($this->file('documents')) {
@@ -73,6 +75,10 @@ class UpdateProjectRequest extends Request
if (array_key_exists('color', $input) && is_null($input['color'])) {
$input['color'] = '';
}
+
+ if(array_key_exists('budgeted_hours', $input) && empty($input['budgeted_hours'])) {
+ $input['budgeted_hours'] = 0;
+ }
$this->replace($input);
}
diff --git a/app/Http/Requests/Report/GenericReportRequest.php b/app/Http/Requests/Report/GenericReportRequest.php
index 6a0bdfad51f4..c7c94a8fd86e 100644
--- a/app/Http/Requests/Report/GenericReportRequest.php
+++ b/app/Http/Requests/Report/GenericReportRequest.php
@@ -37,7 +37,8 @@ class GenericReportRequest extends Request
'start_date' => 'bail|required_if:date_range,custom|nullable|date',
'report_keys' => 'present|array',
'send_email' => 'required|bool',
- 'document_email_attachment' => 'sometimes|bool'
+ 'document_email_attachment' => 'sometimes|bool',
+ 'include_deleted' => 'required|bool',
// 'status' => 'sometimes|string|nullable|in:all,draft,sent,viewed,paid,unpaid,overdue',
];
}
@@ -63,6 +64,8 @@ class GenericReportRequest extends Request
$input['end_date'] = null;
}
+ $input['include_deleted'] = array_key_exists('include_deleted', $input) ? filter_var($input['include_deleted'], FILTER_VALIDATE_BOOLEAN) : false;
+
$input['user_id'] = auth()->user()->id;
$this->replace($input);
diff --git a/app/Http/Requests/Smtp/CheckSmtpRequest.php b/app/Http/Requests/Smtp/CheckSmtpRequest.php
index d4a4c22914af..186a68271425 100644
--- a/app/Http/Requests/Smtp/CheckSmtpRequest.php
+++ b/app/Http/Requests/Smtp/CheckSmtpRequest.php
@@ -36,18 +36,46 @@ class CheckSmtpRequest extends Request
public function rules()
{
return [
+ 'smtp_host' => 'sometimes|nullable|string|min:3',
+ 'smtp_port' => 'sometimes|nullable|integer',
+ 'smtp_username' => 'sometimes|nullable|string|min:3',
+ 'smtp_password' => 'sometimes|nullable|string|min:3',
];
}
public function prepareForValidation()
{
+
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+ $company = $user->company();
+
$input = $this->input();
- if(isset($input['smtp_username']) && $input['smtp_username'] == '********')
- unset($input['smtp_username']);
+ if(isset($input['smtp_username']) && $input['smtp_username'] == '********'){
+ // unset($input['smtp_username']);
+ $input['smtp_username'] = $company->smtp_username;
+ }
+
+ if(isset($input['smtp_password'])&& $input['smtp_password'] == '********'){
+ // unset($input['smtp_password']);
+ $input['smtp_password'] = $company->smtp_password;
+ }
+
+ if(isset($input['smtp_host']) && strlen($input['smtp_host']) >=3){
+
+ }
+ else {
+ $input['smtp_host'] = $company->smtp_host;
+ }
+
+
+ if(isset($input['smtp_port']) && strlen($input['smtp_port']) >= 3) {
+
+ } else {
+ $input['smtp_port'] = $company->smtp_port;
+ }
- if(isset($input['smtp_password'])&& $input['smtp_password'] == '********')
- unset($input['smtp_password']);
$this->replace($input);
}
diff --git a/app/Http/Requests/TaskScheduler/StoreSchedulerRequest.php b/app/Http/Requests/TaskScheduler/StoreSchedulerRequest.php
index 42416cea35c6..579474c116a6 100644
--- a/app/Http/Requests/TaskScheduler/StoreSchedulerRequest.php
+++ b/app/Http/Requests/TaskScheduler/StoreSchedulerRequest.php
@@ -13,11 +13,30 @@ namespace App\Http\Requests\TaskScheduler;
use App\Http\Requests\Request;
use App\Http\ValidationRules\Scheduler\ValidClientIds;
-use App\Utils\Traits\MakesHash;
class StoreSchedulerRequest extends Request
{
- use MakesHash;
+ public array $client_statuses = [
+ 'all',
+ 'draft',
+ 'paid',
+ 'unpaid',
+ 'overdue',
+ 'pending',
+ 'invoiced',
+ 'logged',
+ 'partial',
+ 'applied',
+ 'active',
+ 'paused',
+ 'completed',
+ 'approved',
+ 'expired',
+ 'upcoming',
+ 'converted',
+ 'uninvoiced',
+ ];
+
/**
* Determine if the user is authorized to make this request.
*
@@ -47,7 +66,7 @@ class StoreSchedulerRequest extends Request
'parameters.end_date' => ['bail', 'sometimes', 'date:Y-m-d', 'required_if:parameters.date_rate,custom', 'after_or_equal:parameters.start_date'],
'parameters.entity' => ['bail', 'sometimes', 'string', 'in:invoice,credit,quote,purchase_order'],
'parameters.entity_id' => ['bail', 'sometimes', 'string'],
- 'parameters.report_name' => ['bail','sometimes', 'string', 'required_if:template,email_report','in:vendor,purchase_order_item,purchase_order,ar_detailed,ar_summary,client_balance,tax_summary,profitloss,client_sales,user_sales,product_sales,activity,client,contact,client_contact,credit,document,expense,invoice,invoice_item,quote,quote_item,recurring_invoice,payment,product,task'],
+ 'parameters.report_name' => ['bail','sometimes', 'string', 'required_if:template,email_report','in:vendor,purchase_order_item,purchase_order,ar_detailed,ar_summary,client_balance,tax_summary,profitloss,client_sales,user_sales,product_sales,activity,activities,client,clients,client_contact,client_contacts,credit,credits,document,documents,expense,expenses,invoice,invoices,invoice_item,invoice_items,quote,quotes,quote_item,quote_items,recurring_invoice,recurring_invoices,payment,payments,product,products,task,tasks'],
'parameters.date_key' => ['bail','sometimes', 'string'],
'parameters.status' => ['bail','sometimes', 'nullable', 'string'],
];
@@ -73,10 +92,18 @@ class StoreSchedulerRequest extends Request
if(isset($input['parameters']['status'])) {
+ $task_statuses = [];
+
+ if(isset($input['parameters']['report_name']) && $input['parameters']['report_name'] == 'task') {
+ $task_statuses = array_diff(explode(",", $input['parameters']['status']), $this->client_statuses);
+ }
+
$input['parameters']['status'] = collect(explode(",", $input['parameters']['status']))
->filter(function ($status) {
- return in_array($status, ['all','draft','paid','unpaid','overdue']);
- })->implode(",") ?? '';
+ return in_array($status, $this->client_statuses);
+ })->merge($task_statuses)
+ ->implode(",") ?? '';
+
}
$this->replace($input);
diff --git a/app/Http/Requests/TaskScheduler/UpdateSchedulerRequest.php b/app/Http/Requests/TaskScheduler/UpdateSchedulerRequest.php
index 934002eb0bdd..ef3843008fc2 100644
--- a/app/Http/Requests/TaskScheduler/UpdateSchedulerRequest.php
+++ b/app/Http/Requests/TaskScheduler/UpdateSchedulerRequest.php
@@ -16,6 +16,27 @@ use App\Http\ValidationRules\Scheduler\ValidClientIds;
class UpdateSchedulerRequest extends Request
{
+ public array $client_statuses = [
+ 'all',
+ 'draft',
+ 'paid',
+ 'unpaid',
+ 'overdue',
+ 'pending',
+ 'invoiced',
+ 'logged',
+ 'partial',
+ 'applied',
+ 'active',
+ 'paused',
+ 'completed',
+ 'approved',
+ 'expired',
+ 'upcoming',
+ 'converted',
+ 'uninvoiced',
+ ];
+
/**
* Determine if the user is authorized to make this request.
*
@@ -45,9 +66,9 @@ class UpdateSchedulerRequest extends Request
'parameters.end_date' => ['bail', 'sometimes', 'date:Y-m-d', 'required_if:parameters.date_rate,custom', 'after_or_equal:parameters.start_date'],
'parameters.entity' => ['bail', 'sometimes', 'string', 'in:invoice,credit,quote,purchase_order'],
'parameters.entity_id' => ['bail', 'sometimes', 'string'],
- 'parameters.report_name' => ['bail','sometimes', 'string', 'required_if:template,email_report','in:vendor,purchase_order_item,purchase_order,ar_detailed,ar_summary,client_balance,tax_summary,profitloss,client_sales,user_sales,product_sales,activity,client,contact,client_contact,credit,document,expense,invoice,invoice_item,quote,quote_item,recurring_invoice,payment,product,task'],
+ 'parameters.report_name' => ['bail','sometimes', 'string', 'required_if:template,email_report','in:vendor,purchase_order_item,purchase_order,ar_detailed,ar_summary,client_balance,tax_summary,profitloss,client_sales,user_sales,product_sales,activity,activities,client,clients,client_contact,client_contacts,credit,credits,document,documents,expense,expenses,invoice,invoices,invoice_item,invoice_items,quote,quotes,quote_item,quote_items,recurring_invoice,recurring_invoices,payment,payments,product,products,task,tasks'],
'parameters.date_key' => ['bail','sometimes', 'string'],
- 'parameters.status' => ['bail','sometimes', 'string'],
+ 'parameters.status' => ['bail','sometimes', 'nullable', 'string'],
];
return $rules;
@@ -71,10 +92,18 @@ class UpdateSchedulerRequest extends Request
if(isset($input['parameters']['status'])) {
+
+$task_statuses = [];
+
+ if(isset($input['parameters']['report_name']) && $input['parameters']['report_name'] == 'task') {
+ $task_statuses = array_diff(explode(",", $input['parameters']['status']), $this->client_statuses);
+ }
+
$input['parameters']['status'] = collect(explode(",", $input['parameters']['status']))
->filter(function ($status) {
- return in_array($status, ['all','draft','paid','unpaid','overdue']);
- })->implode(",") ?? '';
+ return in_array($status, $this->client_statuses);
+ })->merge($task_statuses)
+ ->implode(",") ?? '';
}
$this->replace($input);
diff --git a/app/Http/Requests/User/StoreUserRequest.php b/app/Http/Requests/User/StoreUserRequest.php
index 8b979bfdcaeb..7d84b15b969f 100644
--- a/app/Http/Requests/User/StoreUserRequest.php
+++ b/app/Http/Requests/User/StoreUserRequest.php
@@ -95,6 +95,8 @@ class StoreUserRequest extends Request
$input['last_name'] = strip_tags($input['last_name']);
}
+ $input['id'] = null;
+
$this->replace($input);
}
diff --git a/app/Http/Requests/Webhook/StoreWebhookRequest.php b/app/Http/Requests/Webhook/StoreWebhookRequest.php
index c35b549d0e4a..fd917a1242ad 100644
--- a/app/Http/Requests/Webhook/StoreWebhookRequest.php
+++ b/app/Http/Requests/Webhook/StoreWebhookRequest.php
@@ -23,7 +23,10 @@ class StoreWebhookRequest extends Request
*/
public function authorize(): bool
{
- return auth()->user()->isAdmin() && auth()->user()->account->hasFeature(Account::FEATURE_API);
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+
+ return $user->isAdmin() && $user->account->hasFeature(Account::FEATURE_API);
}
public function rules()
@@ -31,7 +34,6 @@ class StoreWebhookRequest extends Request
return [
'target_url' => 'bail|required|url',
'event_id' => 'bail|required',
- // 'headers' => 'bail|sometimes|json',
'rest_method' => 'required|in:post,put'
];
}
@@ -43,9 +45,7 @@ class StoreWebhookRequest extends Request
if (!isset($input['rest_method'])) {
$input['rest_method'] = 'post';
}
- // if(isset($input['headers']) && count($input['headers']) == 0)
- // $input['headers'] = null;
-
+
$this->replace($input);
}
}
diff --git a/app/Import/Transformer/Csv/InvoiceTransformer.php b/app/Import/Transformer/Csv/InvoiceTransformer.php
index 38980311eae1..5dbced3ca7e8 100644
--- a/app/Import/Transformer/Csv/InvoiceTransformer.php
+++ b/app/Import/Transformer/Csv/InvoiceTransformer.php
@@ -98,19 +98,19 @@ class InvoiceTransformer extends BaseTransformer
$invoice_data,
'invoice.partial_due_date'
),
- 'custom_surcharge1' => $this->getString(
+ 'custom_surcharge1' => $this->getFloat(
$invoice_data,
'invoice.custom_surcharge1'
),
- 'custom_surcharge2' => $this->getString(
+ 'custom_surcharge2' => $this->getFloat(
$invoice_data,
'invoice.custom_surcharge2'
),
- 'custom_surcharge3' => $this->getString(
+ 'custom_surcharge3' => $this->getFloat(
$invoice_data,
'invoice.custom_surcharge3'
),
- 'custom_surcharge4' => $this->getString(
+ 'custom_surcharge4' => $this->getFloat(
$invoice_data,
'invoice.custom_surcharge4'
),
diff --git a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php
index d23e78659cec..dd7c6c657b9e 100644
--- a/app/Jobs/Bank/ProcessBankTransactionsNordigen.php
+++ b/app/Jobs/Bank/ProcessBankTransactionsNordigen.php
@@ -114,23 +114,26 @@ class ProcessBankTransactionsNordigen implements ShouldQueue
private function updateAccount()
{
- if (!$this->nordigen->isAccountActive($this->bank_integration->nordigen_account_id)) {
+ $is_account_active = $this->nordigen->isAccountActive($this->bank_integration->nordigen_account_id);
+ $account = $this->nordigen->getAccount($this->bank_integration->nordigen_account_id);
+
+ if (!$is_account_active || !$account) {
$this->bank_integration->disabled_upstream = true;
$this->bank_integration->save();
$this->stop_loop = false;
+
nlog("Nordigen: account inactive: " . $this->bank_integration->nordigen_account_id);
- // @turbo124 @todo send email for expired account
$this->nordigen->disabledAccountEmail($this->bank_integration);
return;
}
- $this->nordigen_account = $this->nordigen->getAccount($this->bank_integration->nordigen_account_id);
+ $this->nordigen_account = $account;
$this->bank_integration->disabled_upstream = false;
- $this->bank_integration->bank_account_status = $this->nordigen_account['account_status'];
- $this->bank_integration->balance = $this->nordigen_account['current_balance'];
+ $this->bank_integration->bank_account_status = $account['account_status'];
+ $this->bank_integration->balance = $account['current_balance'];
$this->bank_integration->save();
}
diff --git a/app/Jobs/Company/CompanyImport.php b/app/Jobs/Company/CompanyImport.php
index ca0c8d7adef6..367a06437d8a 100644
--- a/app/Jobs/Company/CompanyImport.php
+++ b/app/Jobs/Company/CompanyImport.php
@@ -311,8 +311,11 @@ class CompanyImport implements ShouldQueue
}
}
- unlink($tmp_file);
- unlink(Storage::path($this->file_location));
+ if(file_exists($tmp_file))
+ unlink($tmp_file);
+
+ if(Storage::exists($this->file_location))
+ unlink(Storage::path($this->file_location));
}
//
diff --git a/app/Jobs/Mail/NinjaMailerJob.php b/app/Jobs/Mail/NinjaMailerJob.php
index 0330156f7419..f421667a31a4 100644
--- a/app/Jobs/Mail/NinjaMailerJob.php
+++ b/app/Jobs/Mail/NinjaMailerJob.php
@@ -145,7 +145,8 @@ class NinjaMailerJob implements ShouldQueue
->send($mailable);
/* Count the amount of emails sent across all the users accounts */
- Cache::increment("email_quota".$this->company->account->key);
+
+ $this->incrementEmailCounter();
LightLogs::create(new EmailSuccess($this->nmo->company->company_key, $this->nmo->mailable->subject))
->send();
@@ -221,6 +222,12 @@ class NinjaMailerJob implements ShouldQueue
$this->cleanUpMailers();
}
+ private function incrementEmailCounter(): void
+ {
+ if(in_array($this->mailer, ['default','mailgun']))
+ Cache::increment("email_quota".$this->company->account->key);
+
+ }
/**
* Entity notification when an email fails to send
*
@@ -279,13 +286,21 @@ class NinjaMailerJob implements ShouldQueue
$this->mailer = 'postmark';
$this->client_postmark_secret = config('services.postmark-outlook.token');
+ if (property_exists($this->nmo->settings, 'email_from_name') && strlen($this->nmo->settings->email_from_name) > 1) {
+ $email_from_name = $this->nmo->settings->email_from_name;
+ } else {
+ $email_from_name = $this->company->present()->name();
+ }
+
$this->nmo
->mailable
- ->from('maildelivery@invoice.services', 'Invoice Ninja');
+ ->from(config('services.postmark-outlook.from.address'), $email_from_name);
return $this;
}
} catch(\Exception $e) {
+
+ nlog("problem switching outlook driver - hosted");
nlog($e->getMessage());
}
}
@@ -316,7 +331,10 @@ class NinjaMailerJob implements ShouldQueue
$this->mailer = 'mailgun';
$this->setMailgunMailer();
return $this;
-
+ case 'smtp':
+ $this->mailer = 'smtp';
+ $this->configureSmtpMailer();
+ return $this;
default:
break;
}
@@ -328,6 +346,48 @@ class NinjaMailerJob implements ShouldQueue
return $this;
}
+ private function configureSmtpMailer(): void
+ {
+
+ $company = $this->company;
+
+ $smtp_host = $company->smtp_host;
+ $smtp_port = $company->smtp_port;
+ $smtp_username = $company->smtp_username;
+ $smtp_password = $company->smtp_password;
+ $smtp_encryption = $company->smtp_encryption ?? 'tls';
+ $smtp_local_domain = strlen($company->smtp_local_domain) > 2 ? $company->smtp_local_domain : null;
+ $smtp_verify_peer = $company->smtp_verify_peer ?? true;
+
+ config([
+ 'mail.mailers.smtp' => [
+ 'transport' => 'smtp',
+ 'host' => $smtp_host,
+ 'port' => $smtp_port,
+ 'username' => $smtp_username,
+ 'password' => $smtp_password,
+ 'encryption' => $smtp_encryption,
+ 'local_domain' => $smtp_local_domain,
+ 'verify_peer' => $smtp_verify_peer,
+ 'timeout' => 30,
+ ],
+ ]);
+
+ if (property_exists($this->nmo->settings, 'email_from_name') && strlen($this->nmo->settings->email_from_name) > 1) {
+ $email_from_name = $this->nmo->settings->email_from_name;
+ } else {
+ $email_from_name = $this->company->present()->name();
+ }
+
+ $user = $this->resolveSendingUser();
+ $sending_email = (isset($this->nmo->settings->custom_sending_email) && stripos($this->nmo->settings->custom_sending_email, "@")) ? $this->nmo->settings->custom_sending_email : $user->email;
+
+ $this->nmo
+ ->mailable
+ ->from($sending_email, $email_from_name);
+
+ }
+
/**
* Allows configuration of multiple mailers
* per company for use by self hosted users
diff --git a/app/Jobs/Ninja/TaskScheduler.php b/app/Jobs/Ninja/TaskScheduler.php
index ff200ba0f2ba..84189f98f04e 100644
--- a/app/Jobs/Ninja/TaskScheduler.php
+++ b/app/Jobs/Ninja/TaskScheduler.php
@@ -60,6 +60,7 @@ class TaskScheduler implements ShouldQueue
nlog("Doing job {$scheduler->name}");
try {
+ //@var \App\Models\Schedule $scheduler
$scheduler->service()->runTask();
} catch(\Exception $e) {
nlog($e->getMessage());
diff --git a/app/Jobs/Util/ReminderJob.php b/app/Jobs/Util/ReminderJob.php
index c299232d2e50..e73897378eec 100644
--- a/app/Jobs/Util/ReminderJob.php
+++ b/app/Jobs/Util/ReminderJob.php
@@ -26,7 +26,6 @@ use App\Utils\Traits\MakesReminders;
use Illuminate\Support\Facades\Auth;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
-use Spatie\OpenTelemetry\Jobs\TraceAware;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
diff --git a/app/Jobs/Util/WebhookSingle.php b/app/Jobs/Util/WebhookSingle.php
index 043bf308f2cb..ca5136f78455 100644
--- a/app/Jobs/Util/WebhookSingle.php
+++ b/app/Jobs/Util/WebhookSingle.php
@@ -123,7 +123,7 @@ class WebhookSingle implements ShouldQueue
]);
(new SystemLogger(
- array_merge((array) $response, $data),
+ ['message' => $response->getHeaders(), 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_SUCCESS,
SystemLog::TYPE_WEBHOOK_RESPONSE,
@@ -136,7 +136,7 @@ class WebhookSingle implements ShouldQueue
nlog($e->getMessage());
(new SystemLogger(
- ['message' => "Error connecting to ". $subscription->target_url],
+ ['message' => "Error connecting to ". $subscription->target_url, 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_FAILURE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
@@ -152,7 +152,7 @@ class WebhookSingle implements ShouldQueue
$message = "There was a problem when connecting to {$subscription->target_url} => status code ". $e->getResponse()->getStatusCode(). " This webhook call will be suspended until further action is taken.";
(new SystemLogger(
- ['message' => $message],
+ ['message' => $message, 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_FAILURE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
@@ -170,7 +170,7 @@ class WebhookSingle implements ShouldQueue
nlog($message);
(new SystemLogger(
- ['message' => $message],
+ ['message' => $message, 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_FAILURE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
@@ -192,7 +192,7 @@ class WebhookSingle implements ShouldQueue
$message = "There was a problem when connecting to {$subscription->target_url} => status code ". $e->getResponse()->getStatusCode(). " no retry attempted.";
(new SystemLogger(
- ['message' => $message],
+ ['message' => $message, 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_FAILURE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
@@ -208,7 +208,7 @@ class WebhookSingle implements ShouldQueue
$error = json_decode($e->getResponse()->getBody()->getContents());
(new SystemLogger(
- ['message' => $error],
+ ['message' => $error, 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_FAILURE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
@@ -220,7 +220,7 @@ class WebhookSingle implements ShouldQueue
$error = json_decode($e->getResponse()->getBody()->getContents());
(new SystemLogger(
- ['message' => $error],
+ ['message' => $error, 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_FAILURE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
@@ -232,7 +232,7 @@ class WebhookSingle implements ShouldQueue
nlog($e->getCode());
(new SystemLogger(
- $e->getMessage(),
+ ['message' => $e->getMessage(), 'body' => $data],
SystemLog::CATEGORY_WEBHOOK,
SystemLog::EVENT_WEBHOOK_FAILURE,
SystemLog::TYPE_WEBHOOK_RESPONSE,
diff --git a/app/Livewire/PdfSlot.php b/app/Livewire/PdfSlot.php
index 047f8cc812d2..1322d6a9664f 100644
--- a/app/Livewire/PdfSlot.php
+++ b/app/Livewire/PdfSlot.php
@@ -149,6 +149,7 @@ class PdfSlot extends Component
return render('components.livewire.pdf-slot', [
'invitation' => $this->invitation,
'entity' => $this->entity,
+ 'settings' => $this->settings,
'data' => $this->invitation->company->settings,
'entity_type' => $this->entity_type,
'products' => $this->getProducts(),
diff --git a/app/Livewire/RequiredClientInfo.php b/app/Livewire/RequiredClientInfo.php
index a4595b771ef2..733f9a0b4559 100644
--- a/app/Livewire/RequiredClientInfo.php
+++ b/app/Livewire/RequiredClientInfo.php
@@ -12,15 +12,17 @@
namespace App\Livewire;
+use App\Models\Client;
+use App\Models\Invoice;
+use Livewire\Component;
use App\Libraries\MultiDB;
+use Illuminate\Support\Str;
use App\Models\ClientContact;
use App\Models\CompanyGateway;
-use App\Models\Invoice;
use App\Utils\Traits\MakesHash;
+use Livewire\Attributes\Computed;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Validator;
-use Illuminate\Support\Str;
-use Livewire\Component;
class RequiredClientInfo extends Component
{
@@ -31,10 +33,7 @@ class RequiredClientInfo extends Component
*/
public $show_terms = false;
- /**
- * @var array
- */
- public $invoice;
+ public $invoice_terms;
/**
* @var bool
@@ -49,18 +48,40 @@ class RequiredClientInfo extends Component
/**
* @var ClientContact
*/
- public $contact;
+ public $contact_id;
/**
* @var \App\Models\Client
*/
- public $client;
+ public $client_id;
/**
* @var array
*/
public $countries;
+
+ public $client_name;
+ public $contact_first_name;
+ public $contact_last_name;
+ public $contact_email;
+ public $client_phone;
+ public $client_address_line_1;
+ public $client_city;
+ public $client_state;
+ public $client_country_id;
+ public $client_postal_code;
+ public $client_shipping_address_line_1;
+ public $client_shipping_city;
+ public $client_shipping_state;
+ public $client_shipping_postal_code;
+ public $client_shipping_country_id;
+ public $client_custom_value1;
+ public $client_custom_value2;
+ public $client_custom_value3;
+ public $client_custom_value4;
+
+
/**
* Mappings for updating the database. Left side is mapping from gateway,
* right side is column in database.
@@ -113,50 +134,96 @@ class RequiredClientInfo extends Component
];
protected $rules = [
- 'client.address1' => '',
- 'client.address2' => '',
- 'client.city' => '',
- 'client.state' => '',
- 'client.postal_code' => '',
- 'client.country_id' => '',
- 'client.shipping_address1' => '',
- 'client.shipping_address2' => '',
- 'client.shipping_city' => '',
- 'client.shipping_state' => '',
- 'client.shipping_postal_code' => '',
- 'client.shipping_country_id' => '',
- 'contact.first_name' => '',
- 'contact.last_name' => '',
- 'contact.email' => '',
- 'client.name' => '',
- 'client.website' => '',
- 'client.phone' => '',
- 'client.custom_value1' => '',
- 'client.custom_value2' => '',
- 'client.custom_value3' => '',
- 'client.custom_value4' => '',
+ // 'client.address1' => '',
+ // 'client.address2' => '',
+ // 'client.city' => '',
+ // 'client.state' => '',
+ // 'client.postal_code' => '',
+ // 'client.country_id' => '',
+ // 'client.shipping_address1' => '',
+ // 'client.shipping_address2' => '',
+ // 'client.shipping_city' => '',
+ // 'client.shipping_state' => '',
+ // 'client.shipping_postal_code' => '',
+ // 'client.shipping_country_id' => '',
+ // 'contact.first_name' => '',
+ // 'contact.last_name' => '',
+ // 'contact.email' => '',
+ // 'client.name' => '',
+ // 'client.website' => '',
+ // 'client.phone' => '',
+ // 'client.custom_value1' => '',
+ // 'client.custom_value2' => '',
+ // 'client.custom_value3' => '',
+ // 'client.custom_value4' => '',
+ 'client_name' => '',
+ 'client_website' => '',
+ 'client_phone' => '',
+ 'client_address_line_1' => '',
+ 'client_address_line_2' => '',
+ 'client_city' => '',
+ 'client_state' => '',
+ 'client_postal_code' => '',
+ 'client_country_id' => '',
+ 'client_shipping_address_line_1' => '',
+ 'client_shipping_address_line_2' => '',
+ 'client_shipping_city' => '',
+ 'client_shipping_state' => '',
+ 'client_shipping_postal_code' => '',
+ 'client_shipping_country_id' => '',
+ 'client_custom_value1' => '',
+ 'client_custom_value2' => '',
+ 'client_custom_value3' => '',
+ 'client_custom_value4' => '',
+ 'contact_first_name' => '',
+ 'contact_last_name' => '',
+ 'contact_email' => '',
];
public $show_form = false;
- public $company;
+ public $company_id;
public $company_gateway_id;
+ public $db;
+
public function mount()
{
- MultiDB::setDb($this->company->db);
+ MultiDB::setDb($this->db);
+ $contact = ClientContact::withTrashed()->find($this->contact_id);
+ $company = $contact->company;
- $this->client = $this->contact->client;
+ $this->client_name = $contact->client->name;
+ $this->contact_first_name = $contact->first_name;
+ $this->contact_last_name = $contact->last_name;
+ $this->contact_email = $contact->email;
+ $this->client_phone = $contact->client->phone;
+ $this->client_address_line_1 = $contact->client->address1;
+ $this->client_city = $contact->client->city ;
+ $this->client_state = $contact->client->state;
+ $this->client_country_id = $contact->client->country_id;
+ $this->client_postal_code = $contact->client->postal_code;
+ $this->client_shipping_address_line_1 = $contact->client->shipping_address1;
+ $this->client_shipping_city = $contact->client->shipping_city;
+ $this->client_shipping_state = $contact->client->shipping_state;
+ $this->client_shipping_postal_code = $contact->client->shipping_postal_code;
+ $this->client_shipping_country_id = $contact->client->shipping_country_id;
+ $this->client_custom_value1 = $contact->client->custom_value1;
+ $this->client_custom_value2 = $contact->client->custom_value2;
+ $this->client_custom_value3 = $contact->client->custom_value3;
+ $this->client_custom_value4 = $contact->client->custom_value4;
- if ($this->company->settings->show_accept_invoice_terms && request()->query('hash')) {
+ // $this->client = $this->contact->client;
+
+ if ($company->settings->show_accept_invoice_terms && request()->query('hash')) {
$this->show_terms = true;
$this->terms_accepted = false;
$this->show_form = true;
$hash = Cache::get(request()->input('hash'));
- $this->invoice = Invoice::find($this->decodePrimaryKey($hash['invoice_id']));
+ $this->invoice_terms = Invoice::find($this->decodePrimaryKey($hash['invoice_id']))->terms;
}
count($this->fields) > 0 || $this->show_terms
@@ -164,6 +231,24 @@ class RequiredClientInfo extends Component
: $this->show_form = false;
}
+ #[Computed]
+ public function contact()
+ {
+
+ MultiDB::setDb($this->db);
+ return ClientContact::withTrashed()->find($this->contact_id);
+
+ }
+
+ #[Computed]
+ public function client()
+ {
+
+ MultiDB::setDb($this->db);
+ return ClientContact::withTrashed()->find($this->contact_id)->client;
+
+ }
+
public function toggleTermsAccepted()
{
$this->terms_accepted = !$this->terms_accepted;
@@ -171,6 +256,10 @@ class RequiredClientInfo extends Component
public function handleSubmit(array $data): bool
{
+
+ MultiDB::setDb($this->db);
+ $contact = ClientContact::withTrashed()->find($this->contact_id);
+
$rules = [];
collect($this->fields)->map(function ($field) use (&$rules) {
@@ -192,7 +281,7 @@ class RequiredClientInfo extends Component
if ($this->updateClientDetails($data)) {
$this->dispatch(
'passed-required-fields-check',
- client_postal_code: $this->contact->client->postal_code
+ client_postal_code: $contact->client->postal_code
);
//if stripe is enabled, we want to update the customer at this point.
@@ -209,6 +298,11 @@ class RequiredClientInfo extends Component
$client = [];
$contact = [];
+
+ MultiDB::setDb($this->db);
+ $_contact = ClientContact::withTrashed()->find($this->contact_id);
+
+
foreach ($data as $field => $value) {
if (Str::startsWith($field, 'client_')) {
$client[$this->mappings[$field]] = $value;
@@ -219,20 +313,43 @@ class RequiredClientInfo extends Component
}
}
- $contact_update = $this->contact
+
+$_contact->first_name = $this->contact_first_name;
+$_contact->last_name = $this->contact_last_name;
+$_contact->client->name = $this->client_name;
+$_contact->email = $this->contact_email;
+$_contact->client->phone = $this->client_phone;
+$_contact->client->address1 = $this->client_address_line_1;
+$_contact->client->city = $this->client_city;
+$_contact->client->state = $this->client_state;
+$_contact->client->country_id = $this->client_country_id;
+$_contact->client->postal_code = $this->client_postal_code;
+$_contact->client->shipping_address1 = $this->client_shipping_address_line_1;
+$_contact->client->shipping_city = $this->client_shipping_city;
+$_contact->client->shipping_state = $this->client_shipping_state;
+$_contact->client->shipping_postal_code = $this->client_shipping_postal_code;
+$_contact->client->shipping_country_id = $this->client_shipping_country_id;
+$_contact->client->custom_value1 = $this->client_custom_value1;
+$_contact->client->custom_value2 = $this->client_custom_value2;
+$_contact->client->custom_value3 = $this->client_custom_value3;
+$_contact->client->custom_value4 = $this->client_custom_value4;
+$_contact->push();
+
+
+ $contact_update = $_contact
->fill($contact)
->push();
- $client_update = $this->contact->client
+ $client_update = $_contact->client
->fill($client)
->push();
- if ($contact_update && $client_update) {
+ if ($_contact) {
/** @var \App\Models\CompanyGateway $cg */
$cg = CompanyGateway::find($this->company_gateway_id);
if ($cg && $cg->update_details) {
- $payment_gateway = $cg->driver($this->client)->init();
+ $payment_gateway = $cg->driver($_contact->client)->init();
if (method_exists($payment_gateway, "updateCustomer")) {
$payment_gateway->updateCustomer();
@@ -247,11 +364,15 @@ class RequiredClientInfo extends Component
public function checkFields()
{
+
+ MultiDB::setDb($this->db);
+ $_contact = ClientContact::withTrashed()->find($this->contact_id);
+
foreach ($this->fields as $index => $field) {
$_field = $this->mappings[$field['name']];
if (Str::startsWith($field['name'], 'client_')) {
- if (empty($this->contact->client->{$_field}) || is_null($this->contact->client->{$_field}) || in_array($_field, $this->client_address_array)) {
+ if (empty($_contact->client->{$_field}) || is_null($_contact->client->{$_field}) || in_array($_field, $this->client_address_array)) {
$this->show_form = true;
} else {
$this->fields[$index]['filled'] = true;
@@ -259,7 +380,7 @@ class RequiredClientInfo extends Component
}
if (Str::startsWith($field['name'], 'contact_')) {
- if (empty($this->contact->{$_field}) || is_null($this->contact->{$_field}) || str_contains($this->contact->{$_field}, '@example.com')) {
+ if (empty($_contact->{$_field}) || is_null($_contact->{$_field}) || str_contains($_contact->{$_field}, '@example.com')) {
$this->show_form = true;
} else {
$this->fields[$index]['filled'] = true;
@@ -289,14 +410,18 @@ class RequiredClientInfo extends Component
public function handleCopyBilling(): void
{
+
+ MultiDB::setDb($this->db);
+ $_contact = ClientContact::withTrashed()->find($this->contact_id);
+
$this->dispatch(
'update-shipping-data',
- client_shipping_address_line_1: $this->contact->client->address1,
- client_shipping_address_line_2: $this->contact->client->address2,
- client_shipping_city: $this->contact->client->city,
- client_shipping_state: $this->contact->client->state,
- client_shipping_postal_code: $this->contact->client->postal_code,
- client_shipping_country_id: $this->contact->client->country_id,
+ client_shipping_address_line_1: $_contact->client->address1,
+ client_shipping_address_line_2: $_contact->client->address2,
+ client_shipping_city: $_contact->client->city,
+ client_shipping_state: $_contact->client->state,
+ client_shipping_postal_code: $_contact->client->postal_code,
+ client_shipping_country_id: $_contact->client->country_id,
);
}
diff --git a/app/Mail/Client/ClientStatement.php b/app/Mail/Client/ClientStatement.php
index d7a131fa2f0f..b715840083ed 100644
--- a/app/Mail/Client/ClientStatement.php
+++ b/app/Mail/Client/ClientStatement.php
@@ -52,7 +52,7 @@ class ClientStatement extends Mailable
public function content()
{
return new Content(
- view: $this->data['company']->account->isPremium() ? 'email.template.client_premium' : 'email.template.client',
+ view: 'email.template.client',
text: 'email.template.text',
with: [
'text_body' => $this->data['body'],
diff --git a/app/Mail/TemplateEmail.php b/app/Mail/TemplateEmail.php
index 84814520e9db..9beac3dbe3b2 100644
--- a/app/Mail/TemplateEmail.php
+++ b/app/Mail/TemplateEmail.php
@@ -75,7 +75,8 @@ class TemplateEmail extends Mailable
$template_name = 'email.template.'.$this->build_email->getTemplate();
if ($this->build_email->getTemplate() == 'light' || $this->build_email->getTemplate() == 'dark') {
- $template_name = $this->company->account->isPremium() ? 'email.template.client_premium' : 'email.template.client';
+ // $template_name = $this->company->account->isPremium() ? 'email.template.client_premium' : 'email.template.client';
+ $template_name = 'email.template.client';
}
if ($this->build_email->getTemplate() == 'custom') {
diff --git a/app/Mail/VendorTemplateEmail.php b/app/Mail/VendorTemplateEmail.php
index 593d711e7cf4..6a6a3a66fc7b 100644
--- a/app/Mail/VendorTemplateEmail.php
+++ b/app/Mail/VendorTemplateEmail.php
@@ -72,7 +72,8 @@ class VendorTemplateEmail extends Mailable
$template_name = 'email.template.'.$this->build_email->getTemplate();
if ($this->build_email->getTemplate() == 'light' || $this->build_email->getTemplate() == 'dark') {
- $template_name = $this->company->account->isPremium() ? 'email.template.client_premium' : 'email.template.client';
+ // $template_name = $this->company->account->isPremium() ? 'email.template.client_premium' : 'email.template.client';
+ $template_name = 'email.template.client';
}
if ($this->build_email->getTemplate() == 'custom') {
diff --git a/app/Models/Document.php b/app/Models/Document.php
index 061210041ff8..896d3015a2de 100644
--- a/app/Models/Document.php
+++ b/app/Models/Document.php
@@ -208,6 +208,29 @@ class Document extends BaseModel
return ctrans('texts.document');
}
+ public function link()
+ {
+ $entity_id = $this->encodePrimaryKey($this->documentable_id);
+ $link = '';
+
+ match($this->documentable_type) {
+ 'App\Models\Vendor' => $link = "/vendors/{$entity_id}",
+ 'App\Models\Project' => $link = "/projects/{$entity_id}",
+ 'invoices' => $link = "/invoices/{$entity_id}/edit",
+ 'App\Models\Quote' => $link = "/quotes/{$entity_id}/edit",
+ 'App\Models\Credit' => $link = "/credits/{$entity_id}/edit",
+ 'App\Models\Expense' => $link = "/expenses/{$entity_id}/edit",
+ 'App\Models\Payment' => $link = "/payments/{$entity_id}/edit",
+ 'App\Models\Task' => $link = "/tasks/{$entity_id}/edit",
+ 'App\Models\Client' => $link = "/clients/{$entity_id}",
+ 'App\Models\RecurringExpense' => $link = "/recurring_expenses/{$entity_id}/edit",
+ 'App\Models\RecurringInvoice' => $link = "/recurring_invoices/{$entity_id}/edit",
+ default => $link = '',
+ };
+
+ return $link;
+ }
+
public function compress(): mixed
{
diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php
index 2ad0664ad4e6..b6194eb25b2f 100644
--- a/app/Models/Gateway.php
+++ b/app/Models/Gateway.php
@@ -137,22 +137,22 @@ class Gateway extends StaticModel
case 56:
return [
GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true, 'webhooks' => ['payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'customer.source.updated','payment_intent.processing', 'payment_intent.payment_failed']],
+ GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'customer.source.updated','payment_intent.processing', 'payment_intent.payment_failed', 'charge.failed']],
GatewayType::DIRECT_DEBIT => ['refund' => false, 'token_billing' => false, 'webhooks' => ['payment_intent.processing','payment_intent.succeeded','payment_intent.partially_funded', 'payment_intent.payment_failed']],
GatewayType::ALIPAY => ['refund' => false, 'token_billing' => false],
GatewayType::APPLE_PAY => ['refund' => false, 'token_billing' => false],
- GatewayType::BACS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.processing', 'payment_intent.succeeded', 'mandate.updated', 'payment_intent.payment_failed']],
- GatewayType::SOFORT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::KLARNA => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::SEPA => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::PRZELEWY24 => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::GIROPAY => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::EPS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::BANCONTACT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::BECS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::IDEAL => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::ACSS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
- GatewayType::FPX => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded']],
+ GatewayType::BACS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.processing', 'payment_intent.succeeded', 'mandate.updated', 'payment_intent.payment_failed']],
+ GatewayType::SOFORT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::KLARNA => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::SEPA => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::PRZELEWY24 => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::GIROPAY => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::EPS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::BANCONTACT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::BECS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::IDEAL => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::ACSS => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', 'payment_intent.succeeded', 'payment_intent.payment_failed']],
+ GatewayType::FPX => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded', 'charge.failed', ]],
];
case 39:
return [GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true, 'webhooks' => [' ']]]; //Checkout
diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php
index a29e9f4023b6..c87375b3dcf6 100644
--- a/app/Models/RecurringInvoice.php
+++ b/app/Models/RecurringInvoice.php
@@ -355,11 +355,13 @@ class RecurringInvoice extends BaseModel
public function calculateStatus(bool $new_model = false) //15-02-2024 - $new_model needed
{
- if($this->remaining_cycles == 0) {
+ if($this->remaining_cycles == 0)
return self::STATUS_COMPLETED;
- } elseif ($new_model && $this->status_id == self::STATUS_ACTIVE && Carbon::parse($this->next_send_date)->isFuture())
+ elseif ($new_model && $this->status_id == self::STATUS_ACTIVE && Carbon::parse($this->next_send_date)->isFuture())
return self::STATUS_PENDING;
-
+ elseif($this->remaining_cycles != 0 && ($this->status_id == self::STATUS_COMPLETED))
+ return self::STATUS_ACTIVE;
+
return $this->status_id;
}
diff --git a/app/Models/Webhook.php b/app/Models/Webhook.php
index 3422e9315923..3661affb5f98 100644
--- a/app/Models/Webhook.php
+++ b/app/Models/Webhook.php
@@ -180,6 +180,7 @@ class Webhook extends BaseModel
self::EVENT_DELETE_PURCHASE_ORDER,
self::EVENT_RESTORE_PURCHASE_ORDER,
self::EVENT_ARCHIVE_PURCHASE_ORDER,
+ self::EVENT_CREATE_PRODUCT,
self::EVENT_UPDATE_PRODUCT,
self::EVENT_DELETE_PRODUCT,
self::EVENT_RESTORE_PRODUCT,
diff --git a/app/PaymentDrivers/Square/CreditCard.php b/app/PaymentDrivers/Square/CreditCard.php
index 167744331d76..da53d36a2610 100644
--- a/app/PaymentDrivers/Square/CreditCard.php
+++ b/app/PaymentDrivers/Square/CreditCard.php
@@ -271,7 +271,7 @@ class CreditCard implements MethodInterface
$errors = $api_response->getErrors();
}
- if (property_exists($customers, 'customers')) {
+ if ($customers && property_exists($customers, 'customers')) {
return $customers->customers[0]->id;
}
diff --git a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
index ea757faca88e..6cca5ba8e3a0 100644
--- a/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
+++ b/app/PaymentDrivers/Stripe/Jobs/PaymentIntentWebhook.php
@@ -89,6 +89,10 @@ class PaymentIntentWebhook implements ShouldQueue
}
$company_gateway = CompanyGateway::query()->find($this->company_gateway_id);
+
+ if(!$company_gateway)
+ return;
+
$stripe_driver = $company_gateway->driver()->init();
$charge_id = false;
diff --git a/app/Services/ClientPortal/InstantPayment.php b/app/Services/ClientPortal/InstantPayment.php
index 660ed9a345e0..3ff5cd2c7758 100644
--- a/app/Services/ClientPortal/InstantPayment.php
+++ b/app/Services/ClientPortal/InstantPayment.php
@@ -44,7 +44,6 @@ class InstantPayment
public function run()
{
- nlog($this->request->all());
$cc = auth()->guard('contact')->user();
diff --git a/app/Services/Email/Email.php b/app/Services/Email/Email.php
index a567839883d9..f47189009b3f 100644
--- a/app/Services/Email/Email.php
+++ b/app/Services/Email/Email.php
@@ -244,6 +244,12 @@ class Email implements ShouldQueue
return $this;
}
+ private function incrementEmailCounter(): void
+ {
+ if(in_array($this->mailer, ['default','mailgun']))
+ Cache::increment("email_quota".$this->company->account->key);
+ }
+
/**
* Attempts to send the email
*
@@ -270,7 +276,7 @@ class Email implements ShouldQueue
$mailer->send($this->mailable);
- Cache::increment("email_quota".$this->company->account->key);
+ $this->incrementEmailCounter();
LightLogs::create(new EmailSuccess($this->company->company_key, $this->mailable->subject))
->send();
@@ -503,15 +509,22 @@ class Email implements ShouldQueue
$server = $dns[0]["target"];
if(stripos($server, "outlook.com") !== false) {
+ if (property_exists($this->email_object->settings, 'email_from_name') && strlen($this->email_object->settings->email_from_name) > 1) {
+ $email_from_name = $this->email_object->settings->email_from_name;
+ } else {
+ $email_from_name = $this->company->present()->name();
+ }
$this->mailer = 'postmark';
$this->client_postmark_secret = config('services.postmark-outlook.token');
$this->mailable
- ->from('maildelivery@invoice.services', 'Invoice Ninja');
+ ->from(config('services.postmark-outlook.from.address'), $email_from_name);
return $this;
+
}
} catch(\Exception $e) {
+ nlog("problem switching outlook driver - hosted");
nlog($e->getMessage());
}
}
@@ -542,7 +555,10 @@ class Email implements ShouldQueue
$this->mailer = 'mailgun';
$this->setMailgunMailer();
return $this;
-
+ case 'smtp':
+ $this->mailer = 'smtp';
+ $this->configureSmtpMailer();
+ return $this;
default:
$this->mailer = config('mail.default');
return $this;
@@ -555,6 +571,43 @@ class Email implements ShouldQueue
return $this;
}
+ private function configureSmtpMailer(): void
+ {
+
+ $company = $this->company;
+
+ $smtp_host = $company->smtp_host;
+ $smtp_port = $company->smtp_port;
+ $smtp_username = $company->smtp_username;
+ $smtp_password = $company->smtp_password;
+ $smtp_encryption = $company->smtp_encryption ?? 'tls';
+ $smtp_local_domain = strlen($company->smtp_local_domain) > 2 ? $company->smtp_local_domain : null;
+ $smtp_verify_peer = $company->smtp_verify_peer ?? true;
+
+ config([
+ 'mail.mailers.smtp' => [
+ 'transport' => 'smtp',
+ 'host' => $smtp_host,
+ 'port' => $smtp_port,
+ 'username' => $smtp_username,
+ 'password' => $smtp_password,
+ 'encryption' => $smtp_encryption,
+ 'local_domain' => $smtp_local_domain,
+ 'verify_peer' => $smtp_verify_peer,
+ 'timeout' => 30,
+ ],
+ ]);
+
+ $user = $this->resolveSendingUser();
+
+ $sending_email = (isset($this->email_object->settings->custom_sending_email) && stripos($this->email_object->settings->custom_sending_email, "@")) ? $this->email_object->settings->custom_sending_email : $user->email;
+ $sending_user = (isset($this->email_object->settings->email_from_name) && strlen($this->email_object->settings->email_from_name) > 2) ? $this->email_object->settings->email_from_name : $user->name();
+
+ $this->mailable
+ ->from($sending_email, $sending_user);
+
+ }
+
/**
* Allows configuration of multiple mailers
* per company for use by self hosted users
diff --git a/app/Services/Email/EmailDefaults.php b/app/Services/Email/EmailDefaults.php
index 033b2ad77478..04b945ff47c8 100644
--- a/app/Services/Email/EmailDefaults.php
+++ b/app/Services/Email/EmailDefaults.php
@@ -107,10 +107,10 @@ class EmailDefaults
match ($this->email->email_object->settings->email_style) {
'plain' => $this->template = 'email.template.plain',
- 'light' => $this->template = $this->email->email_object->company->account->isPremium() ? 'email.template.client_premium' : 'email.template.client',
- 'dark' => $this->template = $this->email->email_object->company->account->isPremium() ? 'email.template.client_premium' :'email.template.client',
+ 'light' => $this->template = 'email.template.client',
+ 'dark' => $this->template = 'email.template.client',
'custom' => $this->template = 'email.template.custom',
- default => $this->template = $this->email->email_object->company->account->isPremium() ? 'email.template.client_premium' :'email.template.client',
+ default => $this->template = 'email.template.client',
};
$this->email->email_object->html_template = $this->template;
@@ -123,7 +123,7 @@ class EmailDefaults
*/
private function setFrom(): self
{
- if (Ninja::isHosted() && $this->email->email_object->settings->email_sending_method == 'default') {
+ if (Ninja::isHosted() && in_array($this->email->email_object->settings->email_sending_method,['default', 'mailgun'])) {
if ($this->email->company->account->isPaid() && property_exists($this->email->email_object->settings, 'email_from_name') && strlen($this->email->email_object->settings->email_from_name) > 1) {
$email_from_name = $this->email->email_object->settings->email_from_name;
} else {
diff --git a/app/Services/Scheduler/EmailReport.php b/app/Services/Scheduler/EmailReport.php
index 2351153bfff1..b4d5b0809321 100644
--- a/app/Services/Scheduler/EmailReport.php
+++ b/app/Services/Scheduler/EmailReport.php
@@ -11,34 +11,35 @@
namespace App\Services\Scheduler;
-use App\Export\CSV\ClientExport;
-use App\Export\CSV\ContactExport;
-use App\Export\CSV\CreditExport;
-use App\Export\CSV\DocumentExport;
-use App\Export\CSV\ExpenseExport;
-use App\Export\CSV\InvoiceExport;
-use App\Export\CSV\InvoiceItemExport;
-use App\Export\CSV\PaymentExport;
-use App\Export\CSV\ProductExport;
-use App\Export\CSV\ProductSalesExport;
-use App\Export\CSV\QuoteExport;
-use App\Export\CSV\QuoteItemExport;
-use App\Export\CSV\RecurringInvoiceExport;
-use App\Export\CSV\TaskExport;
-use App\Jobs\Mail\NinjaMailerJob;
-use App\Jobs\Mail\NinjaMailerObject;
-use App\Mail\DownloadReport;
use App\Models\Client;
use App\Models\Scheduler;
+use App\Mail\DownloadReport;
+use App\Export\CSV\TaskExport;
+use App\Export\CSV\QuoteExport;
+use App\Utils\Traits\MakesHash;
+use App\Export\CSV\ClientExport;
+use App\Export\CSV\CreditExport;
+use App\Utils\Traits\MakesDates;
+use App\Export\CSV\ContactExport;
+use App\Export\CSV\ExpenseExport;
+use App\Export\CSV\InvoiceExport;
+use App\Export\CSV\PaymentExport;
+use App\Export\CSV\ProductExport;
+use App\Jobs\Mail\NinjaMailerJob;
+use App\Export\CSV\ActivityExport;
+use App\Export\CSV\DocumentExport;
+use App\Export\CSV\QuoteItemExport;
+use App\Services\Report\ProfitLoss;
+use App\Jobs\Mail\NinjaMailerObject;
+use App\Export\CSV\InvoiceItemExport;
+use App\Export\CSV\ProductSalesExport;
use App\Services\Report\ARDetailReport;
use App\Services\Report\ARSummaryReport;
-use App\Services\Report\ClientBalanceReport;
-use App\Services\Report\ClientSalesReport;
-use App\Services\Report\ProfitLoss;
-use App\Services\Report\TaxSummaryReport;
use App\Services\Report\UserSalesReport;
-use App\Utils\Traits\MakesDates;
-use App\Utils\Traits\MakesHash;
+use App\Services\Report\TaxSummaryReport;
+use App\Export\CSV\RecurringInvoiceExport;
+use App\Services\Report\ClientSalesReport;
+use App\Services\Report\ClientBalanceReport;
class EmailReport
{
@@ -77,19 +78,33 @@ class EmailReport
'client_sales' => $export = (new ClientSalesReport($this->scheduler->company, $data)),
'user_sales' => $export = (new UserSalesReport($this->scheduler->company, $data)),
'profitloss' => $export = (new ProfitLoss($this->scheduler->company, $data)),
+ 'activity' => $export = (new ActivityExport($this->scheduler->company, $data)),
+ 'activities' => $export = (new ActivityExport($this->scheduler->company, $data)),
'client' => $export = (new ClientExport($this->scheduler->company, $data)),
+ 'clients' => $export = (new ClientExport($this->scheduler->company, $data)),
'client_contact' => $export = (new ContactExport($this->scheduler->company, $data)),
+ 'client_contacts' => $export = (new ContactExport($this->scheduler->company, $data)),
'credit' => $export = (new CreditExport($this->scheduler->company, $data)),
+ 'credits' => $export = (new CreditExport($this->scheduler->company, $data)),
'document' => $export = (new DocumentExport($this->scheduler->company, $data)),
+ 'documents' => $export = (new DocumentExport($this->scheduler->company, $data)),
'expense' => $export = (new ExpenseExport($this->scheduler->company, $data)),
+ 'expenses' => $export = (new ExpenseExport($this->scheduler->company, $data)),
'invoice' => $export = (new InvoiceExport($this->scheduler->company, $data)),
+ 'invoices' => $export = (new InvoiceExport($this->scheduler->company, $data)),
'invoice_item' => $export = (new InvoiceItemExport($this->scheduler->company, $data)),
+ 'invoice_items' => $export = (new InvoiceItemExport($this->scheduler->company, $data)),
'quote' => $export = (new QuoteExport($this->scheduler->company, $data)),
+ 'quotes' => $export = (new QuoteExport($this->scheduler->company, $data)),
'quote_item' => $export = (new QuoteItemExport($this->scheduler->company, $data)),
+ 'quote_items' => $export = (new QuoteItemExport($this->scheduler->company, $data)),
'recurring_invoice' => $export = (new RecurringInvoiceExport($this->scheduler->company, $data)),
+ 'recurring_invoices' => $export = (new RecurringInvoiceExport($this->scheduler->company, $data)),
'payment' => $export = (new PaymentExport($this->scheduler->company, $data)),
+ 'payments' => $export = (new PaymentExport($this->scheduler->company, $data)),
'product' => $export = (new ProductExport($this->scheduler->company, $data)),
- 'task' => $export = (new TaskExport($this->scheduler->company, $data)),
+ 'products' => $export = (new ProductExport($this->scheduler->company, $data)),
+ 'tasks' => $export = (new TaskExport($this->scheduler->company, $data)),
default => $export = false,
};
diff --git a/app/Services/Template/TemplateService.php b/app/Services/Template/TemplateService.php
index 9ab4eaa25d35..e9fcced20a5e 100644
--- a/app/Services/Template/TemplateService.php
+++ b/app/Services/Template/TemplateService.php
@@ -717,7 +717,7 @@ class TemplateService
return collect($payment->refund_meta)
->map(function ($refund) use ($payment) {
- $date = \Carbon\Carbon::parse($refund['date'])->addSeconds($payment->client->timezone_offset());
+ $date = \Carbon\Carbon::parse($refund['date'] ?? $payment->date)->addSeconds($payment->client->timezone_offset());
$date = $this->translateDate($date, $payment->client->date_format(), $payment->client->locale());
$entity = ctrans('texts.invoice');
@@ -1032,6 +1032,8 @@ class TemplateService
'payment_balance' => $purchase_order->client->payment_balance,
'credit_balance' => $purchase_order->client->credit_balance,
'vat_number' => $purchase_order->client->vat_number ?? '',
+ 'address' => $purchase_order->client->present()->address(),
+ 'shipping_address' => $purchase_order->client->present()->shipping_address(),
] : [],
'status_id' => (string)($purchase_order->status_id ?: 1),
'status' => PurchaseOrder::stringStatus($purchase_order->status_id ?? 1),
diff --git a/app/Transformers/CreditTransformer.php b/app/Transformers/CreditTransformer.php
index ba6484e3d08e..e3833c5f56c4 100644
--- a/app/Transformers/CreditTransformer.php
+++ b/app/Transformers/CreditTransformer.php
@@ -132,6 +132,8 @@ class CreditTransformer extends EntityTransformer
'paid_to_date' => (float) $credit->paid_to_date,
'subscription_id' => $this->encodePrimaryKey($credit->subscription_id),
'invoice_id' => $credit->invoice_id ? $this->encodePrimaryKey($credit->invoice_id) : '',
+ 'tax_info' => $credit->tax_data ?: new \stdClass(),
+
];
}
}
diff --git a/app/Transformers/DocumentTransformer.php b/app/Transformers/DocumentTransformer.php
index c916efe9d440..baab0e4271fd 100644
--- a/app/Transformers/DocumentTransformer.php
+++ b/app/Transformers/DocumentTransformer.php
@@ -52,6 +52,7 @@ class DocumentTransformer extends EntityTransformer
'created_at' => (int) $document->created_at,
'is_deleted' => (bool) false,
'is_public' => (bool) $document->is_public,
+ 'link' => (string) $document->link(),
];
}
}
diff --git a/app/Transformers/ProjectTransformer.php b/app/Transformers/ProjectTransformer.php
index 6f66dd23f15c..227e26571e85 100644
--- a/app/Transformers/ProjectTransformer.php
+++ b/app/Transformers/ProjectTransformer.php
@@ -49,6 +49,12 @@ class ProjectTransformer extends EntityTransformer
public function includeClient(Project $project): \League\Fractal\Resource\Item
{
+
+ if (!$project->client) {
+ nlog("Project {$project->hashed_id} does not have a client attached - this project is in a bad state");
+ return null;
+ }
+
$transformer = new ClientTransformer($this->serializer);
return $this->includeItem($project->client, $transformer, Client::class);
diff --git a/app/Transformers/PurchaseOrderTransformer.php b/app/Transformers/PurchaseOrderTransformer.php
index d8015a7b26bd..25005e2853a5 100644
--- a/app/Transformers/PurchaseOrderTransformer.php
+++ b/app/Transformers/PurchaseOrderTransformer.php
@@ -149,6 +149,7 @@ class PurchaseOrderTransformer extends EntityTransformer
'subscription_id' => $this->encodePrimaryKey($purchase_order->subscription_id),
'expense_id' => $this->encodePrimaryKey($purchase_order->expense_id),
'currency_id' => $purchase_order->currency_id ? (string) $purchase_order->currency_id : '',
+ 'tax_info' => $purchase_order->tax_data ?: new \stdClass(),
];
}
}
diff --git a/app/Transformers/QuoteTransformer.php b/app/Transformers/QuoteTransformer.php
index 649b9995e24c..8a12b2c46a0e 100644
--- a/app/Transformers/QuoteTransformer.php
+++ b/app/Transformers/QuoteTransformer.php
@@ -148,7 +148,7 @@ class QuoteTransformer extends EntityTransformer
'paid_to_date' => (float) $quote->paid_to_date,
'project_id' => $this->encodePrimaryKey($quote->project_id),
'subscription_id' => $this->encodePrimaryKey($quote->subscription_id),
-
+ 'tax_info' => $quote->tax_data ?: new \stdClass(),
];
}
}
diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php
index db365f1e8dff..36abc81f784f 100644
--- a/app/Utils/HtmlEngine.php
+++ b/app/Utils/HtmlEngine.php
@@ -397,7 +397,8 @@ class HtmlEngine
$data['$credit.date'] = ['value' => $this->translateDate($this->entity->date, $this->client->date_format(), $this->client->locale()), 'label' => ctrans('texts.credit_date')];
$data['$balance'] = ['value' => Number::formatMoney($this->getBalance(), $this->client) ?: ' ', 'label' => ctrans('texts.balance')];
$data['$credit.balance'] = ['value' => Number::formatMoney($this->entity_calc->getBalance(), $this->client) ?: ' ', 'label' => ctrans('texts.credit_balance')];
-
+ $data['$client.credit_balance'] = &$data['$credit.balance'];
+
$data['$invoice.balance'] = &$data['$balance'];
$data['$taxes'] = ['value' => Number::formatMoney($this->entity_calc->getItemTotalTaxes(), $this->client) ?: ' ', 'label' => ctrans('texts.taxes')];
$data['$invoice.taxes'] = &$data['$taxes'];
@@ -621,6 +622,33 @@ class HtmlEngine
$data['$task.task3'] = ['value' => '', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'task3')];
$data['$task.task4'] = ['value' => '', 'label' => $this->helpers->makeCustomField($this->company->custom_fields, 'task4')];
+
+ if($this->entity->vendor) {
+
+ $data['$vendor_name'] = ['value' => $this->entity->vendor->present()->name() ?: ' ', 'label' => ctrans('texts.vendor_name')];
+ $data['$vendor.name'] = &$data['$vendor_name'];
+ $data['$vendor'] = &$data['$vendor_name'];
+ $data['$vendor.address1'] = ['value' => $this->entity->vendor->address1 ?: ' ', 'label' => ctrans('texts.address1')];
+ $data['$vendor.address2'] = ['value' => $this->entity->vendor->address2 ?: ' ', 'label' => ctrans('texts.address2')];
+ $data['$vendor.id_number'] = ['value' => $this->entity->vendor->id_number ?: ' ', 'label' => ctrans('texts.id_number')];
+ $data['$vendor.number'] = ['value' => $this->entity->vendor->number ?: ' ', 'label' => ctrans('texts.number')];
+ $data['$vendor.vat_number'] = ['value' => $this->entity->vendor->vat_number ?: ' ', 'label' => ctrans('texts.vat_number')];
+ $data['$vendor.website'] = ['value' => $this->entity->vendor->present()->website() ?: ' ', 'label' => ctrans('texts.website')];
+ $data['$vendor.phone'] = ['value' => $this->entity->vendor->present()->phone() ?: ' ', 'label' => ctrans('texts.phone')];
+ $data['$vendor.country'] = ['value' => isset($this->entity->vendor->country->name) ? ctrans('texts.country_' . $this->entity->vendor->country->name) : '', 'label' => ctrans('texts.country')];
+ $data['$vendor.country_2'] = ['value' => isset($this->entity->vendor->country) ? $this->entity->vendor->country->iso_3166_2 : '', 'label' => ctrans('texts.country')];
+ $data['$vendor_address'] = ['value' => $this->entity->vendor->present()->address() ?: ' ', 'label' => ctrans('texts.address')];
+ $data['$vendor.address'] = &$data['$vendor_address'];
+ $data['$vendor.postal_code'] = ['value' => $this->entity->vendor->postal_code ?: ' ', 'label' => ctrans('texts.postal_code')];
+ $data['$vendor.public_notes'] = ['value' => $this->entity->vendor->public_notes ?: ' ', 'label' => ctrans('texts.notes')];
+ $data['$vendor.city'] = ['value' => $this->entity->vendor->city ?: ' ', 'label' => ctrans('texts.city')];
+ $data['$vendor.state'] = ['value' => $this->entity->vendor->state ?: ' ', 'label' => ctrans('texts.state')];
+ $data['$vendor.city_state_postal'] = ['value' => $this->entity->vendor->present()->cityStateZip($this->entity->vendor->city, $this->entity->vendor->state, $this->entity->vendor->postal_code, false) ?: ' ', 'label' => ctrans('texts.city_state_postal')];
+ $data['$vendor.postal_city_state'] = ['value' => $this->entity->vendor->present()->cityStateZip($this->entity->vendor->city, $this->entity->vendor->state, $this->entity->vendor->postal_code, true) ?: ' ', 'label' => ctrans('texts.postal_city_state')];
+ $data['$vendor.postal_city'] = ['value' => $this->entity->vendor->present()->cityStateZip($this->entity->vendor->city, null, $this->entity->vendor->postal_code, true) ?: ' ', 'label' => ctrans('texts.postal_city')];
+
+ }
+
if ($this->settings->signature_on_pdf) {
$data['$contact.signature'] = ['value' => $this->invitation->signature_base64, 'label' => ctrans('texts.signature')];
$data['$contact.signature_date'] = ['value' => $this->translateDate($this->invitation->signature_date, $this->client->date_format(), $this->client->locale()), 'label' => ctrans('texts.date')];
diff --git a/app/Utils/Number.php b/app/Utils/Number.php
index ca7a8ad59eca..16e82c823194 100644
--- a/app/Utils/Number.php
+++ b/app/Utils/Number.php
@@ -86,6 +86,33 @@ class Number
return rtrim(rtrim(number_format($value, $precision, $decimal, $thousand), '0'), $decimal);
}
+ public static function parseFloat($value)
+ {
+
+ if(!$value)
+ return 0;
+
+ //remove everything except for numbers, decimals, commas and hyphens
+ $value = preg_replace('/[^0-9.,-]+/', '', $value);
+
+ $decimal = strpos($value, '.');
+ $comma = strpos($value, ',');
+
+ if($comma === false) //no comma must be a decimal number already
+ return (float) $value;
+
+ if($decimal < $comma){ //decimal before a comma = euro
+ $value = str_replace(['.',','], ['','.'], $value);
+ return (float) $value;
+ }
+
+ //comma first = traditional thousand separator
+ $value = str_replace(',', '', $value);
+
+ return (float)$value;
+
+
+ }
/**
* Formats a given value based on the clients currency
* BACK to a float.
@@ -93,56 +120,79 @@ class Number
* @param string $value The formatted number to be converted back to float
* @return float The formatted value
*/
- public static function parseFloat($value)
+ public static function parseFloatXX($value)
{
+
if(!$value)
return 0;
- //remove everything except for numbers, decimals, commas and hyphens
+ $multiplier = false;
+
+ if(substr($value, 0,1) == '-')
+ $multiplier = -1;
+
+ $s = str_replace(',', '.', $value);
+
+ $s = preg_replace("/[^0-9\.]/", '', $s);
+
+ if ($s < 1) {
+ return (float) $s;
+ }
+
+ $s = str_replace('.', '', substr($s, 0, -3)).substr($s, -3);
+
+ if($multiplier)
+ $s = floatval($s)*-1;
+
+ return (float) $s;
+ }
+
+
+ //next iteration of float parsing
+ public static function parseFloat2($value)
+ {
+
+ if(!$value) {
+ return 0;
+ }
+
+ //remove everything except for numbers, decimals, commas and hyphens
$value = preg_replace('/[^0-9.,-]+/', '', $value);
$decimal = strpos($value, '.');
$comma = strpos($value, ',');
-
- if(!$comma) //no comma must be a decimal number already
- return (float) $value;
- if($decimal < $comma){ //decimal before a comma = euro
- $value = str_replace(['.',','], ['','.'], $value);
- // $value = str_replace(',', '.', $value);
+ //check the 3rd last character
+ if(!in_array(substr($value, -3, 1), [".", ","])) {
+
+ if($comma && (substr($value, -3, 1) != ".")) {
+ $value .= ".00";
+ } elseif($decimal && (substr($value, -3, 1) != ",")) {
+ $value .= ",00";
+ }
+
+ }
+
+ $decimal = strpos($value, '.');
+ $comma = strpos($value, ',');
+
+ if($comma === false) { //no comma must be a decimal number already
return (float) $value;
}
- //comma first = traditional thousan separator
+ if($decimal < $comma) { //decimal before a comma = euro
+ $value = str_replace(['.',','], ['','.'], $value);
+ return (float) $value;
+ }
+
+ //comma first = traditional thousand separator
$value = str_replace(',', '', $value);
-
+
return (float)$value;
-
-
- // if(!$value)
- // return 0;
- // $multiplier = false;
-
- // if(substr($value, 0,1) == '-')
- // $multiplier = -1;
-
- // $s = str_replace(',', '.', $value);
-
- // $s = preg_replace("/[^0-9\.]/", '', $s);
-
- // if ($s < 1) {
- // return (float) $s;
- // }
-
- // $s = str_replace('.', '', substr($s, 0, -3)).substr($s, -3);
-
- // if($multiplier)
- // $s = floatval($s)*-1;
-
- // return (float) $s;
}
-
+
+
public static function parseStringFloat($value)
{
$value = preg_replace('/[^0-9-.]+/', '', $value);
diff --git a/app/Utils/SystemHealth.php b/app/Utils/SystemHealth.php
index 6b60a7d845e7..c862091c162e 100644
--- a/app/Utils/SystemHealth.php
+++ b/app/Utils/SystemHealth.php
@@ -84,6 +84,7 @@ class SystemHealth
'trailing_slash' => (bool) self::checkUrlState(),
'file_permissions' => (string) self::checkFileSystem(),
'exchange_rate_api_not_configured' => (bool)self::checkCurrencySanity(),
+ 'api_version' => (string) config('ninja.app_version'),
];
}
diff --git a/composer.lock b/composer.lock
index a3e7b2141f21..e98d7af09bfc 100644
--- a/composer.lock
+++ b/composer.lock
@@ -707,16 +707,16 @@
},
{
"name": "amphp/socket",
- "version": "v2.2.3",
+ "version": "v2.2.4",
"source": {
"type": "git",
"url": "https://github.com/amphp/socket.git",
- "reference": "40c80bdc67a9f975ecb5f4083e3c84ef9f23eace"
+ "reference": "4223324c627cc26d44800630411e64856d3344bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/socket/zipball/40c80bdc67a9f975ecb5f4083e3c84ef9f23eace",
- "reference": "40c80bdc67a9f975ecb5f4083e3c84ef9f23eace",
+ "url": "https://api.github.com/repos/amphp/socket/zipball/4223324c627cc26d44800630411e64856d3344bc",
+ "reference": "4223324c627cc26d44800630411e64856d3344bc",
"shasum": ""
},
"require": {
@@ -779,7 +779,7 @@
],
"support": {
"issues": "https://github.com/amphp/socket/issues",
- "source": "https://github.com/amphp/socket/tree/v2.2.3"
+ "source": "https://github.com/amphp/socket/tree/v2.2.4"
},
"funding": [
{
@@ -787,7 +787,7 @@
"type": "github"
}
],
- "time": "2024-02-13T21:03:09+00:00"
+ "time": "2024-02-28T15:56:06+00:00"
},
{
"name": "amphp/sync",
@@ -918,16 +918,16 @@
},
{
"name": "apimatic/core",
- "version": "0.3.5",
+ "version": "0.3.6",
"source": {
"type": "git",
"url": "https://github.com/apimatic/core-lib-php.git",
- "reference": "0ccfb70c2b01bde35c30b451546ab6510193a992"
+ "reference": "2236fa751f265397d97ab2cb8a5c72641cf9480f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/0ccfb70c2b01bde35c30b451546ab6510193a992",
- "reference": "0ccfb70c2b01bde35c30b451546ab6510193a992",
+ "url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/2236fa751f265397d97ab2cb8a5c72641cf9480f",
+ "reference": "2236fa751f265397d97ab2cb8a5c72641cf9480f",
"shasum": ""
},
"require": {
@@ -965,22 +965,22 @@
],
"support": {
"issues": "https://github.com/apimatic/core-lib-php/issues",
- "source": "https://github.com/apimatic/core-lib-php/tree/0.3.5"
+ "source": "https://github.com/apimatic/core-lib-php/tree/0.3.6"
},
- "time": "2024-01-17T13:46:44+00:00"
+ "time": "2024-02-26T04:16:28+00:00"
},
{
"name": "apimatic/core-interfaces",
- "version": "0.1.2",
+ "version": "0.1.3",
"source": {
"type": "git",
"url": "https://github.com/apimatic/core-interfaces-php.git",
- "reference": "183214195a79784c382a446795c46ca8c1f43cc1"
+ "reference": "fad0d992a3900636865bc4b3a7c4dd77ae10d22f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/apimatic/core-interfaces-php/zipball/183214195a79784c382a446795c46ca8c1f43cc1",
- "reference": "183214195a79784c382a446795c46ca8c1f43cc1",
+ "url": "https://api.github.com/repos/apimatic/core-interfaces-php/zipball/fad0d992a3900636865bc4b3a7c4dd77ae10d22f",
+ "reference": "fad0d992a3900636865bc4b3a7c4dd77ae10d22f",
"shasum": ""
},
"require": {
@@ -1008,9 +1008,9 @@
],
"support": {
"issues": "https://github.com/apimatic/core-interfaces-php/issues",
- "source": "https://github.com/apimatic/core-interfaces-php/tree/0.1.2"
+ "source": "https://github.com/apimatic/core-interfaces-php/tree/0.1.3"
},
- "time": "2023-04-04T06:40:52+00:00"
+ "time": "2024-03-07T04:56:42+00:00"
},
{
"name": "apimatic/jsonmapper",
@@ -1227,25 +1227,25 @@
},
{
"name": "awobaz/compoships",
- "version": "2.2.3",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/topclaudy/compoships.git",
- "reference": "404901e2ebd6794f70d2710a56edd4b0c500ce1f"
+ "reference": "25a4ed2aeeb22033cd951e71e661eed235d58698"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/topclaudy/compoships/zipball/404901e2ebd6794f70d2710a56edd4b0c500ce1f",
- "reference": "404901e2ebd6794f70d2710a56edd4b0c500ce1f",
+ "url": "https://api.github.com/repos/topclaudy/compoships/zipball/25a4ed2aeeb22033cd951e71e661eed235d58698",
+ "reference": "25a4ed2aeeb22033cd951e71e661eed235d58698",
"shasum": ""
},
"require": {
- "fakerphp/faker": "^1.18",
- "illuminate/database": ">=5.6 <11.0"
+ "illuminate/database": ">=5.6 <12.0"
},
"require-dev": {
"ext-sqlite3": "*",
- "phpunit/phpunit": "^6.0|^8.0|^9.0"
+ "fakerphp/faker": "^1.18",
+ "phpunit/phpunit": "^6.0|^8.0|^9.0|^10.0"
},
"suggest": {
"awobaz/blade-active": "Blade directives for the Laravel 'Active' package",
@@ -1277,7 +1277,7 @@
],
"support": {
"issues": "https://github.com/topclaudy/compoships/issues",
- "source": "https://github.com/topclaudy/compoships/tree/2.2.3"
+ "source": "https://github.com/topclaudy/compoships/tree/2.3.0"
},
"funding": [
{
@@ -1285,7 +1285,7 @@
"type": "custom"
}
],
- "time": "2023-02-22T16:52:55+00:00"
+ "time": "2024-02-28T22:21:15+00:00"
},
{
"name": "aws/aws-crt-php",
@@ -1343,16 +1343,16 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.296.6",
+ "version": "3.300.13",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "11d0a94f8b2539d587e2f6db7c2fa8e39fe78a67"
+ "reference": "b1eb7307d30ebcfa4e156971f658c2d177434db3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/11d0a94f8b2539d587e2f6db7c2fa8e39fe78a67",
- "reference": "11d0a94f8b2539d587e2f6db7c2fa8e39fe78a67",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b1eb7307d30ebcfa4e156971f658c2d177434db3",
+ "reference": "b1eb7307d30ebcfa4e156971f658c2d177434db3",
"shasum": ""
},
"require": {
@@ -1432,9 +1432,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.296.6"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.300.13"
},
- "time": "2024-01-19T19:14:55+00:00"
+ "time": "2024-03-07T19:14:04+00:00"
},
{
"name": "bacon/bacon-qr-code",
@@ -1544,16 +1544,16 @@
},
{
"name": "braintree/braintree_php",
- "version": "6.16.0",
+ "version": "6.17.0",
"source": {
"type": "git",
"url": "https://github.com/braintree/braintree_php.git",
- "reference": "fe3d852149ae7f0c3a8f193c7875468ea4e2d5f7"
+ "reference": "37c187c91416003708632a58c230d03dbe88fb67"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/braintree/braintree_php/zipball/fe3d852149ae7f0c3a8f193c7875468ea4e2d5f7",
- "reference": "fe3d852149ae7f0c3a8f193c7875468ea4e2d5f7",
+ "url": "https://api.github.com/repos/braintree/braintree_php/zipball/37c187c91416003708632a58c230d03dbe88fb67",
+ "reference": "37c187c91416003708632a58c230d03dbe88fb67",
"shasum": ""
},
"require": {
@@ -1587,9 +1587,9 @@
"description": "Braintree PHP Client Library",
"support": {
"issues": "https://github.com/braintree/braintree_php/issues",
- "source": "https://github.com/braintree/braintree_php/tree/6.16.0"
+ "source": "https://github.com/braintree/braintree_php/tree/6.17.0"
},
- "time": "2024-01-09T22:07:58+00:00"
+ "time": "2024-03-06T20:01:30+00:00"
},
{
"name": "brick/math",
@@ -1851,16 +1851,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.4.0",
+ "version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "b66d11b7479109ab547f9405b97205640b17d385"
+ "reference": "3ce240142f6d59b808dd65c1f52f7a1c252e6cfd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b66d11b7479109ab547f9405b97205640b17d385",
- "reference": "b66d11b7479109ab547f9405b97205640b17d385",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/3ce240142f6d59b808dd65c1f52f7a1c252e6cfd",
+ "reference": "3ce240142f6d59b808dd65c1f52f7a1c252e6cfd",
"shasum": ""
},
"require": {
@@ -1907,7 +1907,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.4.0"
+ "source": "https://github.com/composer/ca-bundle/tree/1.4.1"
},
"funding": [
{
@@ -1923,7 +1923,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-18T12:05:55+00:00"
+ "time": "2024-02-23T10:16:52+00:00"
},
{
"name": "dasprid/enum",
@@ -2170,82 +2170,6 @@
},
"time": "2022-10-27T11:44:00+00:00"
},
- {
- "name": "doctrine/annotations",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/annotations.git",
- "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f",
- "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f",
- "shasum": ""
- },
- "require": {
- "doctrine/lexer": "^2 || ^3",
- "ext-tokenizer": "*",
- "php": "^7.2 || ^8.0",
- "psr/cache": "^1 || ^2 || ^3"
- },
- "require-dev": {
- "doctrine/cache": "^2.0",
- "doctrine/coding-standard": "^10",
- "phpstan/phpstan": "^1.8.0",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "symfony/cache": "^5.4 || ^6",
- "vimeo/psalm": "^4.10"
- },
- "suggest": {
- "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "Docblock Annotations Parser",
- "homepage": "https://www.doctrine-project.org/projects/annotations.html",
- "keywords": [
- "annotations",
- "docblock",
- "parser"
- ],
- "support": {
- "issues": "https://github.com/doctrine/annotations/issues",
- "source": "https://github.com/doctrine/annotations/tree/2.0.1"
- },
- "time": "2023-02-02T22:02:53+00:00"
- },
{
"name": "doctrine/cache",
"version": "2.2.0",
@@ -2341,16 +2265,16 @@
},
{
"name": "doctrine/dbal",
- "version": "3.8.2",
+ "version": "3.8.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "a19a1d05ca211f41089dffcc387733a6875196cb"
+ "reference": "db922ba9436b7b18a23d1653a0b41ff2369ca41c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/a19a1d05ca211f41089dffcc387733a6875196cb",
- "reference": "a19a1d05ca211f41089dffcc387733a6875196cb",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/db922ba9436b7b18a23d1653a0b41ff2369ca41c",
+ "reference": "db922ba9436b7b18a23d1653a0b41ff2369ca41c",
"shasum": ""
},
"require": {
@@ -2366,12 +2290,12 @@
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
"jetbrains/phpstorm-stubs": "2023.1",
- "phpstan/phpstan": "1.10.57",
+ "phpstan/phpstan": "1.10.58",
"phpstan/phpstan-strict-rules": "^1.5",
"phpunit/phpunit": "9.6.16",
"psalm/plugin-phpunit": "0.18.4",
"slevomat/coding-standard": "8.13.1",
- "squizlabs/php_codesniffer": "3.8.1",
+ "squizlabs/php_codesniffer": "3.9.0",
"symfony/cache": "^5.4|^6.0|^7.0",
"symfony/console": "^4.4|^5.4|^6.0|^7.0",
"vimeo/psalm": "4.30.0"
@@ -2434,7 +2358,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.8.2"
+ "source": "https://github.com/doctrine/dbal/tree/3.8.3"
},
"funding": [
{
@@ -2450,7 +2374,7 @@
"type": "tidelift"
}
],
- "time": "2024-02-12T18:36:36+00:00"
+ "time": "2024-03-03T15:55:06+00:00"
},
{
"name": "doctrine/deprecations",
@@ -2592,16 +2516,16 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.9",
+ "version": "2.0.10",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65"
+ "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65",
- "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+ "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
"shasum": ""
},
"require": {
@@ -2663,7 +2587,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.9"
+ "source": "https://github.com/doctrine/inflector/tree/2.0.10"
},
"funding": [
{
@@ -2679,7 +2603,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-15T18:05:13+00:00"
+ "time": "2024-02-18T20:23:39+00:00"
},
{
"name": "doctrine/instantiator",
@@ -2958,16 +2882,16 @@
},
{
"name": "endroid/qr-code",
- "version": "5.0.4",
+ "version": "5.0.6",
"source": {
"type": "git",
"url": "https://github.com/endroid/qr-code.git",
- "reference": "0efd071a3640af323e23c94122fe92cfd5199833"
+ "reference": "3a9cc61d2d34df93f6edc2140e7880966ee7860f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/endroid/qr-code/zipball/0efd071a3640af323e23c94122fe92cfd5199833",
- "reference": "0efd071a3640af323e23c94122fe92cfd5199833",
+ "url": "https://api.github.com/repos/endroid/qr-code/zipball/3a9cc61d2d34df93f6edc2140e7880966ee7860f",
+ "reference": "3a9cc61d2d34df93f6edc2140e7880966ee7860f",
"shasum": ""
},
"require": {
@@ -3021,7 +2945,7 @@
],
"support": {
"issues": "https://github.com/endroid/qr-code/issues",
- "source": "https://github.com/endroid/qr-code/tree/5.0.4"
+ "source": "https://github.com/endroid/qr-code/tree/5.0.6"
},
"funding": [
{
@@ -3029,7 +2953,7 @@
"type": "github"
}
],
- "time": "2023-12-24T13:47:07+00:00"
+ "time": "2024-03-06T22:34:02+00:00"
},
{
"name": "eway/eway-rapid-php",
@@ -3531,16 +3455,16 @@
},
{
"name": "google/apiclient-services",
- "version": "v0.335.0",
+ "version": "v0.338.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client-services.git",
- "reference": "3e6cea8f43066378babdf00e718f01c7c55233fd"
+ "reference": "52aeb042c8d30ac0f98f4051dd4bc523708b1306"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/3e6cea8f43066378babdf00e718f01c7c55233fd",
- "reference": "3e6cea8f43066378babdf00e718f01c7c55233fd",
+ "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/52aeb042c8d30ac0f98f4051dd4bc523708b1306",
+ "reference": "52aeb042c8d30ac0f98f4051dd4bc523708b1306",
"shasum": ""
},
"require": {
@@ -3569,22 +3493,22 @@
],
"support": {
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
- "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.335.0"
+ "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.338.0"
},
- "time": "2024-02-12T01:08:15+00:00"
+ "time": "2024-03-03T00:56:15+00:00"
},
{
"name": "google/auth",
- "version": "v1.35.0",
+ "version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-auth-library-php.git",
- "reference": "6e9c9fd4e2bbd7042f50083076346e4a1eff4e4b"
+ "reference": "5f16f67375b6f202b857183d7ef4e076acd7d4aa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/6e9c9fd4e2bbd7042f50083076346e4a1eff4e4b",
- "reference": "6e9c9fd4e2bbd7042f50083076346e4a1eff4e4b",
+ "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/5f16f67375b6f202b857183d7ef4e076acd7d4aa",
+ "reference": "5f16f67375b6f202b857183d7ef4e076acd7d4aa",
"shasum": ""
},
"require": {
@@ -3627,9 +3551,9 @@
"support": {
"docs": "https://googleapis.github.io/google-auth-library-php/main/",
"issues": "https://github.com/googleapis/google-auth-library-php/issues",
- "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.35.0"
+ "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.37.0"
},
- "time": "2024-02-01T20:41:08+00:00"
+ "time": "2024-02-21T17:03:52+00:00"
},
{
"name": "graham-campbell/result-type",
@@ -4949,16 +4873,16 @@
},
{
"name": "invoiceninja/ubl_invoice",
- "version": "v2.0.2",
+ "version": "v2.0.3",
"source": {
"type": "git",
"url": "https://github.com/invoiceninja/UBL_invoice.git",
- "reference": "02735339bf89f9a48da7d8b11d991dbe812d713e"
+ "reference": "ed10f4f5804e6bcce15d0491b5d35c10ea7cd9f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/invoiceninja/UBL_invoice/zipball/02735339bf89f9a48da7d8b11d991dbe812d713e",
- "reference": "02735339bf89f9a48da7d8b11d991dbe812d713e",
+ "url": "https://api.github.com/repos/invoiceninja/UBL_invoice/zipball/ed10f4f5804e6bcce15d0491b5d35c10ea7cd9f1",
+ "reference": "ed10f4f5804e6bcce15d0491b5d35c10ea7cd9f1",
"shasum": ""
},
"require": {
@@ -5007,9 +4931,9 @@
"xml invoice"
],
"support": {
- "source": "https://github.com/invoiceninja/UBL_invoice/tree/v2.0.2"
+ "source": "https://github.com/invoiceninja/UBL_invoice/tree/v2.0.3"
},
- "time": "2024-02-05T02:16:14+00:00"
+ "time": "2024-02-17T06:34:35+00:00"
},
{
"name": "jean85/pretty-package-versions",
@@ -5136,27 +5060,27 @@
},
{
"name": "jms/serializer",
- "version": "3.29.1",
+ "version": "3.30.0",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/serializer.git",
- "reference": "111451f43abb448ce297361a8ab96a9591e848cd"
+ "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/111451f43abb448ce297361a8ab96a9591e848cd",
- "reference": "111451f43abb448ce297361a8ab96a9591e848cd",
+ "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/bf1105358123d7c02ee6cad08ea33ab535a09d5e",
+ "reference": "bf1105358123d7c02ee6cad08ea33ab535a09d5e",
"shasum": ""
},
"require": {
- "doctrine/annotations": "^1.14 || ^2.0",
"doctrine/instantiator": "^1.3.1 || ^2.0",
"doctrine/lexer": "^2.0 || ^3.0",
"jms/metadata": "^2.6",
- "php": "^7.2 || ^8.0",
+ "php": "^7.4 || ^8.0",
"phpstan/phpdoc-parser": "^1.20"
},
"require-dev": {
+ "doctrine/annotations": "^1.14 || ^2.0",
"doctrine/coding-standard": "^12.0",
"doctrine/orm": "^2.14 || ^3.0",
"doctrine/persistence": "^2.5.2 || ^3.0",
@@ -5166,16 +5090,17 @@
"ocramius/proxy-manager": "^1.0 || ^2.0",
"phpbench/phpbench": "^1.0",
"phpstan/phpstan": "^1.0.2",
- "phpunit/phpunit": "^8.5.21 || ^9.0 || ^10.0",
+ "phpunit/phpunit": "^9.0 || ^10.0",
"psr/container": "^1.0 || ^2.0",
- "symfony/dependency-injection": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
- "symfony/expression-language": "^3.2 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
- "symfony/filesystem": "^4.2 || ^5.0 || ^6.0 || ^7.0",
- "symfony/form": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
- "symfony/translation": "^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
- "symfony/uid": "^5.1 || ^6.0 || ^7.0",
- "symfony/validator": "^3.1.9 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
- "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0",
+ "rector/rector": "^0.19.0",
+ "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0",
+ "symfony/expression-language": "^5.4 || ^6.0 || ^7.0",
+ "symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
+ "symfony/form": "^5.4 || ^6.0 || ^7.0",
+ "symfony/translation": "^5.4 || ^6.0 || ^7.0",
+ "symfony/uid": "^5.4 || ^6.0 || ^7.0",
+ "symfony/validator": "^5.4 || ^6.0 || ^7.0",
+ "symfony/yaml": "^5.4 || ^6.0 || ^7.0",
"twig/twig": "^1.34 || ^2.4 || ^3.0"
},
"suggest": {
@@ -5220,7 +5145,7 @@
],
"support": {
"issues": "https://github.com/schmittjoh/serializer/issues",
- "source": "https://github.com/schmittjoh/serializer/tree/3.29.1"
+ "source": "https://github.com/schmittjoh/serializer/tree/3.30.0"
},
"funding": [
{
@@ -5228,7 +5153,7 @@
"type": "github"
}
],
- "time": "2023-12-14T15:25:09+00:00"
+ "time": "2024-02-24T14:12:14+00:00"
},
{
"name": "josemmo/facturae-php",
@@ -5446,16 +5371,16 @@
},
{
"name": "laravel/framework",
- "version": "v10.41.0",
+ "version": "v10.47.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "da31969bd35e6ee0bbcd9e876f88952dc754b012"
+ "reference": "fce29b8de62733cdecbe12e3bae801f83fff2ea4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/da31969bd35e6ee0bbcd9e876f88952dc754b012",
- "reference": "da31969bd35e6ee0bbcd9e876f88952dc754b012",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/fce29b8de62733cdecbe12e3bae801f83fff2ea4",
+ "reference": "fce29b8de62733cdecbe12e3bae801f83fff2ea4",
"shasum": ""
},
"require": {
@@ -5648,20 +5573,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2024-01-16T15:23:58+00:00"
+ "time": "2024-03-05T15:18:36+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.1.15",
+ "version": "v0.1.16",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "d814a27514d99b03c85aa42b22cfd946568636c1"
+ "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/d814a27514d99b03c85aa42b22cfd946568636c1",
- "reference": "d814a27514d99b03c85aa42b22cfd946568636c1",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
+ "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781",
"shasum": ""
},
"require": {
@@ -5703,9 +5628,9 @@
],
"support": {
"issues": "https://github.com/laravel/prompts/issues",
- "source": "https://github.com/laravel/prompts/tree/v0.1.15"
+ "source": "https://github.com/laravel/prompts/tree/v0.1.16"
},
- "time": "2023-12-29T22:37:42+00:00"
+ "time": "2024-02-21T19:25:27+00:00"
},
{
"name": "laravel/serializable-closure",
@@ -5966,16 +5891,16 @@
},
{
"name": "laravel/ui",
- "version": "v4.4.0",
+ "version": "v4.5.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/ui.git",
- "reference": "7335d7049b2cde345c029e9d2de839b80af62bc0"
+ "reference": "da3811f409297d13feccd5858ce748e7474b3d11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/ui/zipball/7335d7049b2cde345c029e9d2de839b80af62bc0",
- "reference": "7335d7049b2cde345c029e9d2de839b80af62bc0",
+ "url": "https://api.github.com/repos/laravel/ui/zipball/da3811f409297d13feccd5858ce748e7474b3d11",
+ "reference": "da3811f409297d13feccd5858ce748e7474b3d11",
"shasum": ""
},
"require": {
@@ -5986,8 +5911,8 @@
"php": "^8.0"
},
"require-dev": {
- "orchestra/testbench": "^7.0|^8.0|^9.0",
- "phpunit/phpunit": "^9.3|^10.4"
+ "orchestra/testbench": "^7.35|^8.15|^9.0",
+ "phpunit/phpunit": "^9.3|^10.4|^11.0"
},
"type": "library",
"extra": {
@@ -6022,9 +5947,9 @@
"ui"
],
"support": {
- "source": "https://github.com/laravel/ui/tree/v4.4.0"
+ "source": "https://github.com/laravel/ui/tree/v4.5.0"
},
- "time": "2024-01-12T15:56:45+00:00"
+ "time": "2024-03-04T13:58:27+00:00"
},
{
"name": "lcobucci/clock",
@@ -6354,16 +6279,16 @@
},
{
"name": "league/csv",
- "version": "9.14.0",
+ "version": "9.15.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
- "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
+ "reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
- "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
+ "url": "https://api.github.com/repos/thephpleague/csv/zipball/fa7e2441c0bc9b2360f4314fd6c954f7ff40d435",
+ "reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435",
"shasum": ""
},
"require": {
@@ -6378,12 +6303,12 @@
"ext-xdebug": "*",
"friendsofphp/php-cs-fixer": "^v3.22.0",
"phpbench/phpbench": "^1.2.15",
- "phpstan/phpstan": "^1.10.50",
+ "phpstan/phpstan": "^1.10.57",
"phpstan/phpstan-deprecation-rules": "^1.1.4",
"phpstan/phpstan-phpunit": "^1.3.15",
"phpstan/phpstan-strict-rules": "^1.5.2",
- "phpunit/phpunit": "^10.5.3",
- "symfony/var-dumper": "^6.4.0"
+ "phpunit/phpunit": "^10.5.9",
+ "symfony/var-dumper": "^6.4.2"
},
"suggest": {
"ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
@@ -6439,7 +6364,7 @@
"type": "github"
}
],
- "time": "2023-12-29T07:34:53+00:00"
+ "time": "2024-02-20T20:00:00+00:00"
},
{
"name": "league/flysystem",
@@ -7097,16 +7022,16 @@
},
{
"name": "livewire/livewire",
- "version": "v3.4.4",
+ "version": "v3.4.7",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
- "reference": "c0489d4a76382f6dcf6e2702112f86aa089d0c8d"
+ "reference": "05f25dab062cd6a1ec24d8df9e889f890c832cb0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/livewire/zipball/c0489d4a76382f6dcf6e2702112f86aa089d0c8d",
- "reference": "c0489d4a76382f6dcf6e2702112f86aa089d0c8d",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/05f25dab062cd6a1ec24d8df9e889f890c832cb0",
+ "reference": "05f25dab062cd6a1ec24d8df9e889f890c832cb0",
"shasum": ""
},
"require": {
@@ -7160,7 +7085,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
- "source": "https://github.com/livewire/livewire/tree/v3.4.4"
+ "source": "https://github.com/livewire/livewire/tree/v3.4.7"
},
"funding": [
{
@@ -7168,7 +7093,7 @@
"type": "github"
}
],
- "time": "2024-01-28T19:07:11+00:00"
+ "time": "2024-03-05T15:54:03+00:00"
},
{
"name": "maennchen/zipstream-php",
@@ -8148,16 +8073,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v5.0.0",
+ "version": "v5.0.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc"
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
- "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
"shasum": ""
},
"require": {
@@ -8200,9 +8125,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
},
- "time": "2024-01-07T17:17:35+00:00"
+ "time": "2024-03-05T20:51:40+00:00"
},
{
"name": "nordigen/nordigen-php",
@@ -8870,16 +8795,16 @@
},
{
"name": "payfast/payfast-php-sdk",
- "version": "v1.1.5",
+ "version": "v1.1.6",
"source": {
"type": "git",
"url": "https://github.com/Payfast/payfast-php-sdk.git",
- "reference": "902b2cfa7318ad947ed0eba953eea4a3831c526a"
+ "reference": "015efcd2df3e580e023dae6e16c943328d38bb78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Payfast/payfast-php-sdk/zipball/902b2cfa7318ad947ed0eba953eea4a3831c526a",
- "reference": "902b2cfa7318ad947ed0eba953eea4a3831c526a",
+ "url": "https://api.github.com/repos/Payfast/payfast-php-sdk/zipball/015efcd2df3e580e023dae6e16c943328d38bb78",
+ "reference": "015efcd2df3e580e023dae6e16c943328d38bb78",
"shasum": ""
},
"require": {
@@ -8888,12 +8813,14 @@
"php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9"
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9",
+ "squizlabs/php_codesniffer": "^3.8"
},
"type": "library",
"autoload": {
"psr-4": {
- "Payfast\\": "lib/"
+ "PayFast\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -8915,10 +8842,10 @@
],
"support": {
"issues": "https://github.com/Payfast/payfast-php-sdk/issues",
- "source": "https://github.com/Payfast/payfast-php-sdk/tree/v1.1.5"
+ "source": "https://github.com/Payfast/payfast-php-sdk/tree/v1.1.6"
},
"abandoned": true,
- "time": "2023-10-11T09:57:01+00:00"
+ "time": "2024-02-28T09:54:10+00:00"
},
{
"name": "php-http/client-common",
@@ -9188,16 +9115,16 @@
},
{
"name": "php-http/message",
- "version": "1.16.0",
+ "version": "1.16.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
- "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd"
+ "reference": "5997f3289332c699fa2545c427826272498a2088"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/message/zipball/47a14338bf4ebd67d317bf1144253d7db4ab55fd",
- "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd",
+ "url": "https://api.github.com/repos/php-http/message/zipball/5997f3289332c699fa2545c427826272498a2088",
+ "reference": "5997f3289332c699fa2545c427826272498a2088",
"shasum": ""
},
"require": {
@@ -9251,9 +9178,9 @@
],
"support": {
"issues": "https://github.com/php-http/message/issues",
- "source": "https://github.com/php-http/message/tree/1.16.0"
+ "source": "https://github.com/php-http/message/tree/1.16.1"
},
- "time": "2023-05-17T06:43:38+00:00"
+ "time": "2024-03-07T13:22:09+00:00"
},
{
"name": "php-http/message-factory",
@@ -9529,21 +9456,21 @@
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.8.0",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc"
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc",
- "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
- "php": "^7.4 || ^8.0",
+ "php": "^7.3 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
"phpstan/phpdoc-parser": "^1.13"
},
@@ -9581,9 +9508,9 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.0"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2"
},
- "time": "2024-01-11T11:49:22+00:00"
+ "time": "2024-02-23T11:10:43+00:00"
},
{
"name": "phpoffice/phpspreadsheet",
@@ -9767,16 +9694,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "3.0.35",
+ "version": "3.0.37",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "4b1827beabce71953ca479485c0ae9c51287f2fe"
+ "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4b1827beabce71953ca479485c0ae9c51287f2fe",
- "reference": "4b1827beabce71953ca479485c0ae9c51287f2fe",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/cfa2013d0f68c062055180dd4328cc8b9d1f30b8",
+ "reference": "cfa2013d0f68c062055180dd4328cc8b9d1f30b8",
"shasum": ""
},
"require": {
@@ -9857,7 +9784,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
- "source": "https://github.com/phpseclib/phpseclib/tree/3.0.35"
+ "source": "https://github.com/phpseclib/phpseclib/tree/3.0.37"
},
"funding": [
{
@@ -9873,20 +9800,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-29T01:59:53+00:00"
+ "time": "2024-03-03T02:14:58+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.25.0",
+ "version": "1.26.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240"
+ "reference": "231e3186624c03d7e7c890ec662b81e6b0405227"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240",
- "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227",
+ "reference": "231e3186624c03d7e7c890ec662b81e6b0405227",
"shasum": ""
},
"require": {
@@ -9918,9 +9845,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.25.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0"
},
- "time": "2024-01-04T17:06:16+00:00"
+ "time": "2024-02-23T16:05:55+00:00"
},
{
"name": "pragmarx/google2fa",
@@ -11646,16 +11573,16 @@
},
{
"name": "smalot/pdfparser",
- "version": "v2.8.0",
+ "version": "v2.9.0",
"source": {
"type": "git",
"url": "https://github.com/smalot/pdfparser.git",
- "reference": "268a620b96523eb4244c42931885024c8db8dae1"
+ "reference": "6b53144fcb24af77093d4150dd7d0dd571f25761"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/smalot/pdfparser/zipball/268a620b96523eb4244c42931885024c8db8dae1",
- "reference": "268a620b96523eb4244c42931885024c8db8dae1",
+ "url": "https://api.github.com/repos/smalot/pdfparser/zipball/6b53144fcb24af77093d4150dd7d0dd571f25761",
+ "reference": "6b53144fcb24af77093d4150dd7d0dd571f25761",
"shasum": ""
},
"require": {
@@ -11691,9 +11618,9 @@
],
"support": {
"issues": "https://github.com/smalot/pdfparser/issues",
- "source": "https://github.com/smalot/pdfparser/tree/v2.8.0"
+ "source": "https://github.com/smalot/pdfparser/tree/v2.9.0"
},
- "time": "2023-12-01T11:13:56+00:00"
+ "time": "2024-03-01T09:51:10+00:00"
},
{
"name": "socialiteproviders/apple",
@@ -11769,26 +11696,26 @@
},
{
"name": "socialiteproviders/manager",
- "version": "v4.4.0",
+ "version": "v4.5.1",
"source": {
"type": "git",
"url": "https://github.com/SocialiteProviders/Manager.git",
- "reference": "df5e45b53d918ec3d689f014d98a6c838b98ed96"
+ "reference": "a67f194f0f4c4c7616c549afc697b78df9658d44"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/df5e45b53d918ec3d689f014d98a6c838b98ed96",
- "reference": "df5e45b53d918ec3d689f014d98a6c838b98ed96",
+ "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/a67f194f0f4c4c7616c549afc697b78df9658d44",
+ "reference": "a67f194f0f4c4c7616c549afc697b78df9658d44",
"shasum": ""
},
"require": {
- "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0",
- "laravel/socialite": "~5.0",
+ "illuminate/support": "^8.0 || ^9.0 || ^10.0 || ^11.0",
+ "laravel/socialite": "^5.2",
"php": "^8.0"
},
"require-dev": {
"mockery/mockery": "^1.2",
- "phpunit/phpunit": "^6.0 || ^9.0"
+ "phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
@@ -11839,26 +11766,26 @@
"issues": "https://github.com/socialiteproviders/manager/issues",
"source": "https://github.com/socialiteproviders/manager"
},
- "time": "2023-08-27T23:46:34+00:00"
+ "time": "2024-02-17T08:58:03+00:00"
},
{
"name": "socialiteproviders/microsoft",
- "version": "4.2.2",
+ "version": "4.2.3",
"source": {
"type": "git",
"url": "https://github.com/SocialiteProviders/Microsoft.git",
- "reference": "19bc79810d7319c466f38552546b2c233b634059"
+ "reference": "92c6f245a6175bcb51f4c7e0542b1e2891646edb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SocialiteProviders/Microsoft/zipball/19bc79810d7319c466f38552546b2c233b634059",
- "reference": "19bc79810d7319c466f38552546b2c233b634059",
+ "url": "https://api.github.com/repos/SocialiteProviders/Microsoft/zipball/92c6f245a6175bcb51f4c7e0542b1e2891646edb",
+ "reference": "92c6f245a6175bcb51f4c7e0542b1e2891646edb",
"shasum": ""
},
"require": {
"ext-json": "*",
- "php": "^7.4 || ^8.0",
- "socialiteproviders/manager": "~4.0"
+ "php": "^8.0",
+ "socialiteproviders/manager": "^4.4"
},
"type": "library",
"autoload": {
@@ -11889,20 +11816,20 @@
"issues": "https://github.com/socialiteproviders/providers/issues",
"source": "https://github.com/socialiteproviders/providers"
},
- "time": "2023-03-02T09:58:36+00:00"
+ "time": "2024-02-28T14:16:00+00:00"
},
{
"name": "spatie/laravel-data",
- "version": "3.11.0",
+ "version": "3.11.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-data.git",
- "reference": "e9cb66136974b6a6e290d6d2e2d484bac1727537"
+ "reference": "21b4d115a502dfd96ab2b11c62746325e9a28924"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-data/zipball/e9cb66136974b6a6e290d6d2e2d484bac1727537",
- "reference": "e9cb66136974b6a6e290d6d2e2d484bac1727537",
+ "url": "https://api.github.com/repos/spatie/laravel-data/zipball/21b4d115a502dfd96ab2b11c62746325e9a28924",
+ "reference": "21b4d115a502dfd96ab2b11c62746325e9a28924",
"shasum": ""
},
"require": {
@@ -11966,7 +11893,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-data/issues",
- "source": "https://github.com/spatie/laravel-data/tree/3.11.0"
+ "source": "https://github.com/spatie/laravel-data/tree/3.11.2"
},
"funding": [
{
@@ -11974,20 +11901,20 @@
"type": "github"
}
],
- "time": "2023-12-21T12:31:34+00:00"
+ "time": "2024-02-22T08:34:10+00:00"
},
{
"name": "spatie/laravel-package-tools",
- "version": "1.16.2",
+ "version": "1.16.3",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
- "reference": "e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15"
+ "reference": "59db18c2e20d49a0b6d447bb1c654f6c123beb9e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15",
- "reference": "e62eeb1fe8a8a0b2e83227a6c279c8c59f7d3a15",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/59db18c2e20d49a0b6d447bb1c654f6c123beb9e",
+ "reference": "59db18c2e20d49a0b6d447bb1c654f6c123beb9e",
"shasum": ""
},
"require": {
@@ -12026,7 +11953,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
- "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.2"
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.3"
},
"funding": [
{
@@ -12034,7 +11961,7 @@
"type": "github"
}
],
- "time": "2024-01-11T08:43:00+00:00"
+ "time": "2024-03-07T07:35:57+00:00"
},
{
"name": "spatie/php-structure-discoverer",
@@ -12302,16 +12229,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e"
+ "reference": "0d9e4eb5ad413075624378f474c4167ea202de78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e",
- "reference": "2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e",
+ "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78",
+ "reference": "0d9e4eb5ad413075624378f474c4167ea202de78",
"shasum": ""
},
"require": {
@@ -12376,7 +12303,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.3"
+ "source": "https://github.com/symfony/console/tree/v6.4.4"
},
"funding": [
{
@@ -12392,7 +12319,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:51:35+00:00"
+ "time": "2024-02-22T20:27:10+00:00"
},
{
"name": "symfony/css-selector",
@@ -12528,16 +12455,16 @@
},
{
"name": "symfony/error-handler",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "6dc3c76a278b77f01d864a6005d640822c6f26a6"
+ "reference": "c725219bdf2afc59423c32793d5019d2a904e13a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/6dc3c76a278b77f01d864a6005d640822c6f26a6",
- "reference": "6dc3c76a278b77f01d864a6005d640822c6f26a6",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a",
+ "reference": "c725219bdf2afc59423c32793d5019d2a904e13a",
"shasum": ""
},
"require": {
@@ -12583,7 +12510,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v6.4.3"
+ "source": "https://github.com/symfony/error-handler/tree/v6.4.4"
},
"funding": [
{
@@ -12599,7 +12526,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-29T15:40:36+00:00"
+ "time": "2024-02-22T20:27:10+00:00"
},
{
"name": "symfony/event-dispatcher",
@@ -12886,16 +12813,16 @@
},
{
"name": "symfony/http-client",
- "version": "v7.0.2",
+ "version": "v6.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "db714986d3b84330bb6196fdb201c9f79b3a8853"
+ "reference": "f3c86a60a3615f466333a11fd42010d4382a82c7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/db714986d3b84330bb6196fdb201c9f79b3a8853",
- "reference": "db714986d3b84330bb6196fdb201c9f79b3a8853",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/f3c86a60a3615f466333a11fd42010d4382a82c7",
+ "reference": "f3c86a60a3615f466333a11fd42010d4382a82c7",
"shasum": ""
},
"require": {
@@ -12958,7 +12885,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v7.0.2"
+ "source": "https://github.com/symfony/http-client/tree/v6.4.5"
},
"funding": [
{
@@ -12974,7 +12901,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-02T12:51:19+00:00"
+ "time": "2024-03-02T12:45:30+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -13056,16 +12983,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "5677bdf7cade4619cb17fc9e1e7b31ec392244a9"
+ "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5677bdf7cade4619cb17fc9e1e7b31ec392244a9",
- "reference": "5677bdf7cade4619cb17fc9e1e7b31ec392244a9",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304",
+ "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304",
"shasum": ""
},
"require": {
@@ -13113,7 +13040,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-foundation/tree/v6.4.3"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.4.4"
},
"funding": [
{
@@ -13129,20 +13056,20 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:51:35+00:00"
+ "time": "2024-02-08T15:01:18+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.4.3",
+ "version": "v6.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "9c6ec4e543044f7568a53a76ab1484ecd30637a2"
+ "reference": "f6947cb939d8efee137797382cb4db1af653ef75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9c6ec4e543044f7568a53a76ab1484ecd30637a2",
- "reference": "9c6ec4e543044f7568a53a76ab1484ecd30637a2",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f6947cb939d8efee137797382cb4db1af653ef75",
+ "reference": "f6947cb939d8efee137797382cb4db1af653ef75",
"shasum": ""
},
"require": {
@@ -13191,7 +13118,7 @@
"symfony/process": "^5.4|^6.0|^7.0",
"symfony/property-access": "^5.4.5|^6.0.5|^7.0",
"symfony/routing": "^5.4|^6.0|^7.0",
- "symfony/serializer": "^6.3|^7.0",
+ "symfony/serializer": "^6.4.4|^7.0.4",
"symfony/stopwatch": "^5.4|^6.0|^7.0",
"symfony/translation": "^5.4|^6.0|^7.0",
"symfony/translation-contracts": "^2.5|^3",
@@ -13226,7 +13153,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/http-kernel/tree/v6.4.3"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.4.5"
},
"funding": [
{
@@ -13242,7 +13169,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-31T07:21:29+00:00"
+ "time": "2024-03-04T21:00:47+00:00"
},
{
"name": "symfony/intl",
@@ -13328,16 +13255,16 @@
},
{
"name": "symfony/mailer",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "74412c62f88a85a41b61f0b71ab0afcaad6f03ee"
+ "reference": "791c5d31a8204cf3db0c66faab70282307f4376b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/74412c62f88a85a41b61f0b71ab0afcaad6f03ee",
- "reference": "74412c62f88a85a41b61f0b71ab0afcaad6f03ee",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b",
+ "reference": "791c5d31a8204cf3db0c66faab70282307f4376b",
"shasum": ""
},
"require": {
@@ -13388,7 +13315,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v6.4.3"
+ "source": "https://github.com/symfony/mailer/tree/v6.4.4"
},
"funding": [
{
@@ -13404,20 +13331,20 @@
"type": "tidelift"
}
],
- "time": "2024-01-29T15:01:07+00:00"
+ "time": "2024-02-03T21:33:47+00:00"
},
{
"name": "symfony/mailgun-mailer",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailgun-mailer.git",
- "reference": "96d23bb0e773ecfc3fb8d21cdabfbb3f4d6abf04"
+ "reference": "8c018872b40ce050590b6d18cf741db0c8313435"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/96d23bb0e773ecfc3fb8d21cdabfbb3f4d6abf04",
- "reference": "96d23bb0e773ecfc3fb8d21cdabfbb3f4d6abf04",
+ "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/8c018872b40ce050590b6d18cf741db0c8313435",
+ "reference": "8c018872b40ce050590b6d18cf741db0c8313435",
"shasum": ""
},
"require": {
@@ -13457,7 +13384,7 @@
"description": "Symfony Mailgun Mailer Bridge",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.3"
+ "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.4"
},
"funding": [
{
@@ -13473,7 +13400,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-29T15:01:07+00:00"
+ "time": "2024-02-14T06:31:46+00:00"
},
{
"name": "symfony/mime",
@@ -14423,16 +14350,16 @@
},
{
"name": "symfony/postmark-mailer",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/postmark-mailer.git",
- "reference": "59afae48341cf02fcab049eee368cbb9dc0b4481"
+ "reference": "2e73040e6b5ccf35025e86692a2080ef176a0d8d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/postmark-mailer/zipball/59afae48341cf02fcab049eee368cbb9dc0b4481",
- "reference": "59afae48341cf02fcab049eee368cbb9dc0b4481",
+ "url": "https://api.github.com/repos/symfony/postmark-mailer/zipball/2e73040e6b5ccf35025e86692a2080ef176a0d8d",
+ "reference": "2e73040e6b5ccf35025e86692a2080ef176a0d8d",
"shasum": ""
},
"require": {
@@ -14473,7 +14400,7 @@
"description": "Symfony Postmark Mailer Bridge",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/postmark-mailer/tree/v6.4.3"
+ "source": "https://github.com/symfony/postmark-mailer/tree/v6.4.4"
},
"funding": [
{
@@ -14489,20 +14416,20 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:51:35+00:00"
+ "time": "2024-02-09T11:00:58+00:00"
},
{
"name": "symfony/process",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "31642b0818bfcff85930344ef93193f8c607e0a3"
+ "reference": "710e27879e9be3395de2b98da3f52a946039f297"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/31642b0818bfcff85930344ef93193f8c607e0a3",
- "reference": "31642b0818bfcff85930344ef93193f8c607e0a3",
+ "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297",
+ "reference": "710e27879e9be3395de2b98da3f52a946039f297",
"shasum": ""
},
"require": {
@@ -14534,7 +14461,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.3"
+ "source": "https://github.com/symfony/process/tree/v6.4.4"
},
"funding": [
{
@@ -14550,7 +14477,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:51:35+00:00"
+ "time": "2024-02-20T12:31:00+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@@ -14643,16 +14570,16 @@
},
{
"name": "symfony/routing",
- "version": "v6.4.3",
+ "version": "v6.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842"
+ "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/3b2957ad54902f0f544df83e3d58b38d7e8e5842",
- "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/7fe30068e207d9c31c0138501ab40358eb2d49a4",
+ "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4",
"shasum": ""
},
"require": {
@@ -14706,7 +14633,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.4.3"
+ "source": "https://github.com/symfony/routing/tree/v6.4.5"
},
"funding": [
{
@@ -14722,7 +14649,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-30T13:55:02+00:00"
+ "time": "2024-02-27T12:33:30+00:00"
},
{
"name": "symfony/service-contracts",
@@ -14808,16 +14735,16 @@
},
{
"name": "symfony/string",
- "version": "v7.0.2",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5"
+ "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/cc78f14f91f5e53b42044d0620961c48028ff9f5",
- "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5",
+ "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9",
+ "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9",
"shasum": ""
},
"require": {
@@ -14874,7 +14801,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.0.2"
+ "source": "https://github.com/symfony/string/tree/v6.4.4"
},
"funding": [
{
@@ -14890,20 +14817,20 @@
"type": "tidelift"
}
],
- "time": "2023-12-10T16:54:46+00:00"
+ "time": "2024-02-01T13:16:41+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "637c51191b6b184184bbf98937702bcf554f7d04"
+ "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/637c51191b6b184184bbf98937702bcf554f7d04",
- "reference": "637c51191b6b184184bbf98937702bcf554f7d04",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e",
+ "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e",
"shasum": ""
},
"require": {
@@ -14969,7 +14896,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.4.3"
+ "source": "https://github.com/symfony/translation/tree/v6.4.4"
},
"funding": [
{
@@ -14985,7 +14912,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-29T13:11:52+00:00"
+ "time": "2024-02-20T13:16:58+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -15141,16 +15068,16 @@
},
{
"name": "symfony/validator",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
- "reference": "9c1d8bb4edce5304fcefca7923741085f1ca5b60"
+ "reference": "1cf92edc9a94d16275efef949fa6748d11cc8f47"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/validator/zipball/9c1d8bb4edce5304fcefca7923741085f1ca5b60",
- "reference": "9c1d8bb4edce5304fcefca7923741085f1ca5b60",
+ "url": "https://api.github.com/repos/symfony/validator/zipball/1cf92edc9a94d16275efef949fa6748d11cc8f47",
+ "reference": "1cf92edc9a94d16275efef949fa6748d11cc8f47",
"shasum": ""
},
"require": {
@@ -15217,7 +15144,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/validator/tree/v6.4.3"
+ "source": "https://github.com/symfony/validator/tree/v6.4.4"
},
"funding": [
{
@@ -15233,20 +15160,20 @@
"type": "tidelift"
}
],
- "time": "2024-01-29T15:01:07+00:00"
+ "time": "2024-02-22T20:27:10+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.4.3",
+ "version": "v6.4.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "0435a08f69125535336177c29d56af3abc1f69da"
+ "reference": "b439823f04c98b84d4366c79507e9da6230944b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0435a08f69125535336177c29d56af3abc1f69da",
- "reference": "0435a08f69125535336177c29d56af3abc1f69da",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1",
+ "reference": "b439823f04c98b84d4366c79507e9da6230944b1",
"shasum": ""
},
"require": {
@@ -15302,7 +15229,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.4.3"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.4.4"
},
"funding": [
{
@@ -15318,7 +15245,7 @@
"type": "tidelift"
}
],
- "time": "2024-01-23T14:53:30+00:00"
+ "time": "2024-02-15T11:23:52+00:00"
},
{
"name": "symfony/yaml",
@@ -16068,16 +15995,16 @@
"packages-dev": [
{
"name": "barryvdh/laravel-debugbar",
- "version": "v3.10.5",
+ "version": "v3.10.6",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "d1a48965f2b25a6cec2eea07d719b568a37c9a88"
+ "reference": "1fcb37307ebb32207dce16fa160a92b14d8b671f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/d1a48965f2b25a6cec2eea07d719b568a37c9a88",
- "reference": "d1a48965f2b25a6cec2eea07d719b568a37c9a88",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/1fcb37307ebb32207dce16fa160a92b14d8b671f",
+ "reference": "1fcb37307ebb32207dce16fa160a92b14d8b671f",
"shasum": ""
},
"require": {
@@ -16091,7 +16018,7 @@
"require-dev": {
"mockery/mockery": "^1.3.3",
"orchestra/testbench-dusk": "^5|^6|^7|^8|^9",
- "phpunit/phpunit": "^8.5.30|^9.0",
+ "phpunit/phpunit": "^9.6|^10.5",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
@@ -16136,7 +16063,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
- "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.10.5"
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.10.6"
},
"funding": [
{
@@ -16148,7 +16075,7 @@
"type": "github"
}
],
- "time": "2024-02-15T10:45:45+00:00"
+ "time": "2024-03-01T14:41:13+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",
@@ -16526,16 +16453,16 @@
},
{
"name": "composer/pcre",
- "version": "3.1.1",
+ "version": "3.1.2",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
- "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9"
+ "reference": "4775f35b2d70865807c89d32c8e7385b86eb0ace"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9",
- "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/4775f35b2d70865807c89d32c8e7385b86eb0ace",
+ "reference": "4775f35b2d70865807c89d32c8e7385b86eb0ace",
"shasum": ""
},
"require": {
@@ -16577,7 +16504,7 @@
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.1.1"
+ "source": "https://github.com/composer/pcre/tree/3.1.2"
},
"funding": [
{
@@ -16593,7 +16520,7 @@
"type": "tidelift"
}
],
- "time": "2023-10-11T07:11:09+00:00"
+ "time": "2024-03-07T15:38:35+00:00"
},
{
"name": "composer/semver",
@@ -16876,16 +16803,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.48.0",
+ "version": "v3.51.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "a92472c6fb66349de25211f31c77eceae3df024e"
+ "reference": "127fa74f010da99053e3f5b62672615b72dd6efd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/a92472c6fb66349de25211f31c77eceae3df024e",
- "reference": "a92472c6fb66349de25211f31c77eceae3df024e",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/127fa74f010da99053e3f5b62672615b72dd6efd",
+ "reference": "127fa74f010da99053e3f5b62672615b72dd6efd",
"shasum": ""
},
"require": {
@@ -16895,7 +16822,7 @@
"ext-json": "*",
"ext-tokenizer": "*",
"php": "^7.4 || ^8.0",
- "sebastian/diff": "^4.0 || ^5.0",
+ "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
"symfony/console": "^5.4 || ^6.0 || ^7.0",
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
@@ -16916,7 +16843,8 @@
"php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4",
- "phpunit/phpunit": "^9.6 || ^10.5.5",
+ "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2",
+ "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
},
"suggest": {
@@ -16955,7 +16883,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.48.0"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.51.0"
},
"funding": [
{
@@ -16963,7 +16891,7 @@
"type": "github"
}
],
- "time": "2024-01-19T21:44:39+00:00"
+ "time": "2024-02-28T19:50:06+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -17077,16 +17005,16 @@
},
{
"name": "larastan/larastan",
- "version": "v2.9.0",
+ "version": "v2.9.2",
"source": {
"type": "git",
"url": "https://github.com/larastan/larastan.git",
- "reference": "35fa9cbe1895e76215bbe74571a344f2705fbe01"
+ "reference": "a79b46b96060504b400890674b83f66aa7f5db6d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/larastan/larastan/zipball/35fa9cbe1895e76215bbe74571a344f2705fbe01",
- "reference": "35fa9cbe1895e76215bbe74571a344f2705fbe01",
+ "url": "https://api.github.com/repos/larastan/larastan/zipball/a79b46b96060504b400890674b83f66aa7f5db6d",
+ "reference": "a79b46b96060504b400890674b83f66aa7f5db6d",
"shasum": ""
},
"require": {
@@ -17103,6 +17031,7 @@
"phpstan/phpstan": "^1.10.50"
},
"require-dev": {
+ "doctrine/coding-standard": "^12.0",
"nikic/php-parser": "^4.17.1",
"orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.0",
"orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.0",
@@ -17154,7 +17083,7 @@
],
"support": {
"issues": "https://github.com/larastan/larastan/issues",
- "source": "https://github.com/larastan/larastan/tree/v2.9.0"
+ "source": "https://github.com/larastan/larastan/tree/v2.9.2"
},
"funding": [
{
@@ -17174,7 +17103,7 @@
"type": "patreon"
}
],
- "time": "2024-02-13T11:49:22+00:00"
+ "time": "2024-02-27T03:16:03+00:00"
},
{
"name": "maximebf/debugbar",
@@ -17482,20 +17411,21 @@
},
{
"name": "phar-io/manifest",
- "version": "2.0.3",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-libxml": "*",
"ext-phar": "*",
"ext-xmlwriter": "*",
"phar-io/version": "^3.0.1",
@@ -17536,9 +17466,15 @@
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
"issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
},
- "time": "2021-07-20T11:28:43+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
},
{
"name": "phar-io/version",
@@ -17681,16 +17617,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.10.58",
+ "version": "1.10.60",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "a23518379ec4defd9e47cbf81019526861623ec2"
+ "reference": "95dcea7d6c628a3f2f56d091d8a0219485a86bbe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a23518379ec4defd9e47cbf81019526861623ec2",
- "reference": "a23518379ec4defd9e47cbf81019526861623ec2",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/95dcea7d6c628a3f2f56d091d8a0219485a86bbe",
+ "reference": "95dcea7d6c628a3f2f56d091d8a0219485a86bbe",
"shasum": ""
},
"require": {
@@ -17739,20 +17675,20 @@
"type": "tidelift"
}
],
- "time": "2024-02-12T20:02:57+00:00"
+ "time": "2024-03-07T13:30:19+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.11",
+ "version": "10.1.12",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "78c3b7625965c2513ee96569a4dbb62601784145"
+ "reference": "842f72662d6b9edda84c4b6f13885fd9cd53dc63"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145",
- "reference": "78c3b7625965c2513ee96569a4dbb62601784145",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/842f72662d6b9edda84c4b6f13885fd9cd53dc63",
+ "reference": "842f72662d6b9edda84c4b6f13885fd9cd53dc63",
"shasum": ""
},
"require": {
@@ -17809,7 +17745,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.12"
},
"funding": [
{
@@ -17817,7 +17753,7 @@
"type": "github"
}
],
- "time": "2023-12-21T15:38:30+00:00"
+ "time": "2024-03-02T07:22:05+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -18064,16 +18000,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.8",
+ "version": "10.5.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "08f4fa74d5fbfff1ef22abffee47aaedcaea227e"
+ "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/08f4fa74d5fbfff1ef22abffee47aaedcaea227e",
- "reference": "08f4fa74d5fbfff1ef22abffee47aaedcaea227e",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4",
+ "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4",
"shasum": ""
},
"require": {
@@ -18145,7 +18081,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.8"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.11"
},
"funding": [
{
@@ -18161,20 +18097,20 @@
"type": "tidelift"
}
],
- "time": "2024-01-19T07:07:27+00:00"
+ "time": "2024-02-25T14:05:00+00:00"
},
{
"name": "sebastian/cli-parser",
- "version": "2.0.0",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae"
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae",
- "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
"shasum": ""
},
"require": {
@@ -18209,7 +18145,8 @@
"homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0"
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
},
"funding": [
{
@@ -18217,7 +18154,7 @@
"type": "github"
}
],
- "time": "2023-02-03T06:58:15+00:00"
+ "time": "2024-03-02T07:12:49+00:00"
},
{
"name": "sebastian/code-unit",
@@ -18467,16 +18404,16 @@
},
{
"name": "sebastian/diff",
- "version": "5.1.0",
+ "version": "5.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f"
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f",
- "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
"shasum": ""
},
"require": {
@@ -18484,7 +18421,7 @@
},
"require-dev": {
"phpunit/phpunit": "^10.0",
- "symfony/process": "^4.2 || ^5"
+ "symfony/process": "^6.4"
},
"type": "library",
"extra": {
@@ -18522,7 +18459,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"security": "https://github.com/sebastianbergmann/diff/security/policy",
- "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0"
+ "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
},
"funding": [
{
@@ -18530,7 +18467,7 @@
"type": "github"
}
],
- "time": "2023-12-22T10:55:06+00:00"
+ "time": "2024-03-02T07:15:17+00:00"
},
{
"name": "sebastian/environment",
@@ -18598,16 +18535,16 @@
},
{
"name": "sebastian/exporter",
- "version": "5.1.1",
+ "version": "5.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc"
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc",
- "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
"shasum": ""
},
"require": {
@@ -18664,7 +18601,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"security": "https://github.com/sebastianbergmann/exporter/security/policy",
- "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
},
"funding": [
{
@@ -18672,20 +18609,20 @@
"type": "github"
}
],
- "time": "2023-09-24T13:22:09+00:00"
+ "time": "2024-03-02T07:17:12+00:00"
},
{
"name": "sebastian/global-state",
- "version": "6.0.1",
+ "version": "6.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4"
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4",
- "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
"shasum": ""
},
"require": {
@@ -18719,14 +18656,14 @@
}
],
"description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"security": "https://github.com/sebastianbergmann/global-state/security/policy",
- "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
},
"funding": [
{
@@ -18734,7 +18671,7 @@
"type": "github"
}
],
- "time": "2023-07-19T07:19:23+00:00"
+ "time": "2024-03-02T07:19:19+00:00"
},
{
"name": "sebastian/lines-of-code",
@@ -19586,16 +19523,16 @@
},
{
"name": "theseer/tokenizer",
- "version": "1.2.2",
+ "version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96"
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
- "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
"shasum": ""
},
"require": {
@@ -19624,7 +19561,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.2"
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
},
"funding": [
{
@@ -19632,7 +19569,7 @@
"type": "github"
}
],
- "time": "2023-11-20T00:12:19+00:00"
+ "time": "2024-03-03T12:36:25+00:00"
}
],
"aliases": [],
diff --git a/config/ninja.php b/config/ninja.php
index 2590f40a04ad..9004e8d22d3f 100644
--- a/config/ninja.php
+++ b/config/ninja.php
@@ -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.30'),
- 'app_tag' => env('APP_TAG', '5.8.30'),
+ 'app_version' => env('APP_VERSION', '5.8.37'),
+ 'app_tag' => env('APP_TAG', '5.8.37'),
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', false),
diff --git a/config/services.php b/config/services.php
index b9218c37270d..e8f12e34cb4d 100644
--- a/config/services.php
+++ b/config/services.php
@@ -35,7 +35,10 @@ return [
],
'postmark-outlook' => [
- 'token' => env('POSTMARK_OUTLOOK_SECRET','')
+ 'token' => env('POSTMARK_OUTLOOK_SECRET',''),
+ 'from' => [
+ 'address' => env('POSTMARK_OUTLOOK_FROM_ADDRESS', '')
+ ],
],
'microsoft' => [
diff --git a/database/migrations/2024_03_07_195116_add_tax_data_to_quotes.php b/database/migrations/2024_03_07_195116_add_tax_data_to_quotes.php
new file mode 100644
index 000000000000..8af39c02029f
--- /dev/null
+++ b/database/migrations/2024_03_07_195116_add_tax_data_to_quotes.php
@@ -0,0 +1,36 @@
+mediumText('tax_data')->nullable(); //json object
+ });
+
+ Schema::table('credits', function (Blueprint $table) {
+ $table->mediumText('tax_data')->nullable(); //json object
+ });
+
+ Schema::table('purchase_orders', function (Blueprint $table) {
+ $table->mediumText('tax_data')->nullable(); //json object
+ });
+
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+
+ }
+};
diff --git a/database/migrations/2024_03_14_201844_adjust_discount_column_max_resolution.php b/database/migrations/2024_03_14_201844_adjust_discount_column_max_resolution.php
new file mode 100644
index 000000000000..3aa0099e3cf0
--- /dev/null
+++ b/database/migrations/2024_03_14_201844_adjust_discount_column_max_resolution.php
@@ -0,0 +1,45 @@
+decimal('discount', 20, 6)->default(0)->change();
+ });
+
+
+ Schema::table('credits', function (Blueprint $table) {
+ $table->decimal('discount', 20, 6)->default(0)->change();
+ });
+
+ Schema::table('quotes', function (Blueprint $table) {
+ $table->decimal('discount', 20, 6)->default(0)->change();
+ });
+
+ Schema::table('purchase_orders', function (Blueprint $table) {
+ $table->decimal('discount', 20, 6)->default(0)->change();
+ });
+
+ Schema::table('recurring_invoices', function (Blueprint $table) {
+ $table->decimal('discount', 20, 6)->default(0)->change();
+ });
+
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ //
+ }
+};
diff --git a/lang/ar/texts.php b/lang/ar/texts.php
index 1d97f0f5c811..b8dbdba21b8f 100644
--- a/lang/ar/texts.php
+++ b/lang/ar/texts.php
@@ -453,7 +453,7 @@ $lang = array(
'edit_token' => 'تحرير الرمز',
'delete_token' => 'حذف الرمز المميز',
'token' => 'رمز',
- 'add_gateway' => 'إضافة بوابة',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'حذف البوابة',
'edit_gateway' => 'تحرير البوابة',
'updated_gateway' => 'تم تحديث البوابة بنجاح',
@@ -499,8 +499,8 @@ $lang = array(
'auto_wrap' => 'التفاف خط السيارات',
'duplicate_post' => 'تحذير: الصفحة السابقة قدمت مرتين. تم تجاهل التقديم الثاني.',
'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' => 'فواتير مجانية عبر الإنترنت',
+ 'app_description' => 'يعد Invoice Ninja حلاً مجانيًا مفتوح الرمز لإعداد الفواتير وإعداد الفواتير للعملاء. باستخدام Invoice Ninja، يمكنك بسهولة إنشاء وإرسال فواتير جميلة من أي جهاز لديه إمكانية الوصول إلى الويب. يمكن لعملائك طباعة فواتيرك، وتنزيلها كملفات pdf، وحتى الدفع لك عبر الإنترنت من داخل النظام.',
'rows' => 'صفوف',
'www' => 'www',
'logo' => 'شعار',
@@ -686,9 +686,9 @@ $lang = array(
'disable' => 'إبطال',
'invoice_quote_number' => 'أرقام الفاتورة والاقتباس',
'invoice_charges' => 'رسوم الفاتورة الإضافية',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'لم نتمكن من تسليم الفاتورة :invoice إلى :contact .
:error',
'notification_invoice_bounced_subject' => 'تعذر تسليم الفاتورة :invoice',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'لم نتمكن من تسليم عرض الأسعار :invoice إلى :contact .
:error',
'notification_quote_bounced_subject' => 'غير قادر على تسليم اقتباس :invoice',
'custom_invoice_link' => 'رابط الفاتورة المخصصة',
'total_invoiced' => 'إجمالي الفاتورة',
@@ -2991,7 +2991,7 @@ $lang = array(
'hosted_login' => 'مستضاف تسجيل الدخول',
'selfhost_login' => 'تسجيل الدخول إلى Selfhost',
'google_login' => 'جوجل تسجيل الدخول',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'نشكرك على سعة صدرك بينما نعمل على تنفيذ هذه الميزات.
ونأمل أن يتم الانتهاء منها في الأشهر القليلة المقبلة.
وحتى ذلك الحين سنواصل دعمنا',
'legacy_mobile_app' => 'تطبيق جوال قديم',
'today' => 'اليوم',
'current' => 'حاضِر',
@@ -3849,7 +3849,7 @@ $lang = array(
'cancellation_pending' => 'الإلغاء معلق ، سنكون على اتصال!',
'list_of_payments' => 'قائمة المدفوعات',
'payment_details' => 'تفاصيل الدفع',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'الفواتير المرتبطة',
'list_of_payment_methods' => 'قائمة طرق الدفع',
'payment_method_details' => 'تفاصيل طريقة الدفع',
'permanently_remove_payment_method' => 'قم بإزالة طريقة الدفع هذه بشكل دائم.',
@@ -4906,7 +4906,7 @@ $lang = array(
'no_assigned_tasks' => 'لا توجد مهام قابلة للفوترة لهذا المشروع',
'authorization_failure' => 'أذونات غير كافية لتنفيذ هذا الإجراء',
'authorization_sms_failure' => 'يرجى التحقق من حسابك لإرسال رسائل البريد الإلكتروني.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'شكرًا لك على شراء ترخيص العلامة البيضاء.
مفتاح الترخيص الخاص بك هو:
:license_key
يمكنك إدارة الترخيص الخاص بك هنا: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'كلارنا',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'مستحق الدفع paydate: صافي أيام الدفع payeddue: تاريخ الدفع',
@@ -5071,7 +5071,7 @@ $lang = array(
'region' => 'منطقة',
'county' => 'مقاطعة',
'tax_details' => 'التفاصيل الضريبية',
- 'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
+ 'activity_10_online' => ':contact تم الدفع :payment للفاتورة :invoice لـ :client',
'activity_10_manual' => ':user الدفعة المدخلة :payment للفاتورة :invoice لـ :client',
'default_payment_type' => 'نوع الدفع الافتراضي',
'number_precision' => 'دقة العدد',
@@ -5101,7 +5101,7 @@ $lang = array(
'set_private' => 'تعيين خاص',
'individual' => 'فردي',
'business' => 'عمل',
- 'partnership' => 'Partnership',
+ 'partnership' => 'شراكة',
'trust' => 'يثق',
'charity' => 'صدقة',
'government' => 'حكومة',
@@ -5182,42 +5182,59 @@ $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' => 'لم تقم الخدمة بإرجاع أي حسابات صالحة. فكر في إعادة تشغيل التدفق.',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
'nordigen_handler_restart' => 'إعادة تشغيل التدفق.',
'nordigen_handler_return' => 'العودة إلى التطبيق.',
- '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.
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.
: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',
- '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',
+ 'lang_Lao' => 'لاو',
+ 'currency_lao_kip' => 'لاو كيب',
+ 'yodlee_regions' => 'المناطق: الولايات المتحدة الأمريكية والمملكة المتحدة وأستراليا والهند',
+ 'nordigen_regions' => 'المناطق: أوروبا والمملكة المتحدة',
+ 'select_provider' => 'حدد الموفر',
+ 'nordigen_requisition_subject' => 'انتهت صلاحية الطلب، يرجى إعادة المصادقة.',
+ 'nordigen_requisition_body' => 'انتهت صلاحية الوصول إلى خلاصات حساب البنك كما هو محدد في اتفاقية المستخدم النهائي.
يرجى تسجيل الدخول إلى Invoice Ninja وإعادة المصادقة مع البنوك التي تتعامل معها لمواصلة تلقي المعاملات.',
+ 'participant' => 'مشارك',
+ 'participant_name' => 'اسم المشارك',
+ 'client_unsubscribed' => 'تم إلغاء اشتراك العميل من رسائل البريد الإلكتروني.',
+ 'client_unsubscribed_help' => 'لقد قام العميل :client بإلغاء اشتراكه في رسائل البريد الإلكتروني الخاصة بك. يحتاج العميل إلى الموافقة على تلقي رسائل البريد الإلكتروني المستقبلية منك.',
+ 'resubscribe' => 'إعادة الاشتراك',
+ 'subscribe' => 'يشترك',
+ 'subscribe_help' => 'أنت مشترك حاليًا وستستمر في تلقي اتصالات البريد الإلكتروني.',
+ 'unsubscribe_help' => 'أنت غير مشترك حاليًا، وبالتالي لن تتلقى رسائل بريد إلكتروني في الوقت الحالي.',
+ 'notification_purchase_order_bounced' => 'لم نتمكن من تسليم طلب الشراء :invoice إلى :contact .
:error',
+ 'notification_purchase_order_bounced_subject' => 'غير قادر على تسليم أمر الشراء :invoice',
+ 'show_pdfhtml_on_mobile' => 'عرض إصدار HTML للكيان عند العرض على الهاتف المحمول',
+ 'show_pdfhtml_on_mobile_help' => 'لتحسين التصور، يتم عرض نسخة HTML من الفاتورة/عرض الأسعار عند عرضها على الهاتف المحمول.',
+ 'please_select_an_invoice_or_credit' => 'الرجاء تحديد فاتورة أو رصيد',
+ 'mobile_version' => 'اصدار المحمول',
+ 'venmo' => 'فينمو',
+ 'my_bank' => 'بنكي',
+ 'pay_later' => 'ادفع لاحقا',
+ 'local_domain' => 'المجال المحلي',
+ 'verify_peer' => 'التحقق من النظير',
+ 'nordigen_help' => 'ملاحظة: يتطلب ربط حساب مفتاح GoCardless/Nordigen API',
+ 'ar_detailed' => 'حسابات القبض مفصلة',
+ 'ar_summary' => 'ملخص حسابات القبض',
+ 'client_sales' => 'مبيعات العملاء',
+ 'user_sales' => 'مبيعات المستخدم',
+ 'iframe_url' => 'عنوان URL لإطار iFrame',
+ 'user_unsubscribed' => 'تم إلغاء اشتراك المستخدم من رسائل البريد الإلكتروني :link',
+ 'use_available_payments' => 'استخدم المدفوعات المتاحة',
+ 'test_email_sent' => 'تم إرسال البريد الإلكتروني بنجاح',
+ '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',
+ 'payment_terms_help' => 'يضبط تاريخ استحقاق الفاتورة الافتراضي',
+ 'payment_type_help' => 'يعيّن نوع الدفع اليدوي الافتراضي.',
+ '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',
+
);
return $lang;
diff --git a/lang/bg/texts.php b/lang/bg/texts.php
index d0581989d197..c7f59537993a 100644
--- a/lang/bg/texts.php
+++ b/lang/bg/texts.php
@@ -461,7 +461,7 @@ $lang = array(
'edit_token' => 'Редакция на токън',
'delete_token' => 'Изтриване на токън',
'token' => 'Токън',
- 'add_gateway' => 'Добавяне на Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Изтриване на Gateway',
'edit_gateway' => 'Редакция на Gateway',
'updated_gateway' => 'Успешно актуализиран Gateway',
@@ -3869,7 +3869,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4926,7 +4926,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5121,7 +5121,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5202,7 +5202,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5222,6 +5222,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Задава падеж на фактурата по подразбиране',
+ 'payment_type_help' => 'Задава тип за ръчно плащане по подразбиране.',
+ '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',
);
diff --git a/lang/ca/texts.php b/lang/ca/texts.php
index 4e92139f804d..9e5b077a8a21 100644
--- a/lang/ca/texts.php
+++ b/lang/ca/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Edit Token',
'delete_token' => 'Delete Token',
'token' => 'Token',
- 'add_gateway' => 'Add Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Delete Gateway',
'edit_gateway' => 'Edit Gateway',
'updated_gateway' => 'Successfully updated gateway',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5237,6 +5237,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'Sets the default invoice due date',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
+
);
return $lang;
diff --git a/lang/cs/texts.php b/lang/cs/texts.php
index 474f0177f85b..7d1c0f4ffaf7 100644
--- a/lang/cs/texts.php
+++ b/lang/cs/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Editovat token',
'delete_token' => 'Smazat Token',
'token' => 'Token',
- 'add_gateway' => 'Přidat platební bránu',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Smazat platební bránu',
'edit_gateway' => 'Editovat bránu',
'updated_gateway' => 'Brána úspěšně změněna',
@@ -5202,7 +5202,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5238,6 +5238,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'Nastaví jako výchozí datum splatnosti faktury',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
+
);
return $lang;
diff --git a/lang/da/texts.php b/lang/da/texts.php
index 7794b7b986e8..e21df25cd5ce 100644
--- a/lang/da/texts.php
+++ b/lang/da/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Redigér token',
'delete_token' => 'Slet token',
'token' => 'Token',
- 'add_gateway' => 'Tilføj gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Slet gateway',
'edit_gateway' => 'Redigér gateway',
'updated_gateway' => 'Gateway blev opdateret',
@@ -5200,7 +5200,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5236,6 +5236,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'Sætter standard faktura forfalds dato',
+ 'payment_type_help' => 'Indstiller den manuelle Betaling 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',
+
);
return $lang;
diff --git a/lang/de/texts.php b/lang/de/texts.php
index c08170ef7b81..e8d473729f42 100644
--- a/lang/de/texts.php
+++ b/lang/de/texts.php
@@ -461,7 +461,7 @@ $lang = array(
'edit_token' => 'Token bearbeiten',
'delete_token' => 'Token löschen',
'token' => 'Token',
- 'add_gateway' => 'Zahlungsanbieter hinzufügen',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Zahlungsanbieter löschen',
'edit_gateway' => 'Zahlungsanbieter bearbeiten',
'updated_gateway' => 'Zahlungsanbieter aktualisiert',
@@ -507,8 +507,8 @@ $lang = array(
'auto_wrap' => 'Automatischer Zeilenumbruch',
'duplicate_post' => 'Achtung: Die vorherige Seite wurde zweimal übermittelt. Die zweite Übermittlung wurde ignoriert.',
'view_documentation' => 'Dokumentation anzeigen',
- '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' => 'Kostenlose Online-Rechnung',
+ 'app_description' => 'Invoice Ninja ist eine kostenlose Open-Code-Lösung für die Rechnungsstellung und Abrechnung mit Kunden. Mit Invoice Ninja können Sie ganz einfach schöne Rechnungen erstellen und versenden, von jedem Gerät aus, das Zugriff auf das Internet hat. Ihre Kunden können Ihre Rechnungen ausdrucken, als PDF-Dateien herunterladen und sogar online über das System bezahlen.',
'rows' => 'Zeilen',
'www' => 'www',
'logo' => 'Logo',
@@ -1902,7 +1902,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'require_quote_signature_help' => 'Erfordern Sie die Unterschrift des Kunden bei Angeboten.',
'i_agree' => 'Ich stimme den Bedingungen zu',
'sign_here' => 'Bitte unterschreiben Sie hier:',
- 'sign_here_ux_tip' => 'Use the mouse or your touchpad to trace your signature.',
+ 'sign_here_ux_tip' => 'Verwenden Sie die Maus oder Ihr Touchpad, um Ihre Signatur nachzuzeichnen.',
'authorization' => 'Genehmigung',
'signed' => 'unterzeichnet',
@@ -3011,7 +3011,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'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.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'Vielen Dank für Ihre Geduld, während wir an der Implementierung dieser Funktionen arbeiten.
Wir hoffen, sie in den nächsten Monaten fertigstellen zu können.
Bis dahin unterstützen wir weiterhin die',
'legacy_mobile_app' => 'legacy Mobile App',
'today' => 'Heute',
'current' => 'Aktuell',
@@ -3329,7 +3329,7 @@ Sobald Sie die Beträge erhalten haben, kommen Sie bitte wieder zurück zu diese
'credit_number_counter' => 'Gutschriftnummernzähler',
'reset_counter_date' => 'Zählerdatum zurücksetzen',
'counter_padding' => 'Zähler-Innenabstand',
- 'shared_invoice_quote_counter' => 'Share Invoice/Quote Counter',
+ 'shared_invoice_quote_counter' => 'Share Invoice/ Angebot / Kostenvoranschlag Counter',
'default_tax_name_1' => 'Standard-Steuername 1',
'default_tax_rate_1' => 'Standard-Steuersatz 1',
'default_tax_name_2' => 'Standard-Steuername 2',
@@ -3870,7 +3870,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'cancellation_pending' => 'Kündigung in Bearbeitung! Wir melden uns bei Ihnen...',
'list_of_payments' => 'Liste der Zahlungen',
'payment_details' => 'Details zu der Zahlung',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'Rechnungen zuordnen',
'list_of_payment_methods' => 'Liste der Zahlungsmethoden',
'payment_method_details' => 'Details zu der Zahlungsmethode',
'permanently_remove_payment_method' => 'Zahlungsmethode endgültig entfernen.',
@@ -4219,7 +4219,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'direct_debit' => 'Lastschriftverfahren',
'clone_to_expense' => 'Klonen zu Ausgabe',
'checkout' => 'Kasse',
- 'acss' => 'ACSS Debit',
+ 'acss' => 'ACSS-Lastschrift',
'invalid_amount' => 'Ungültiger Betrag. Nur Zahlen/Dezimalwerte.',
'client_payment_failure_body' => 'Zahlung für Rechnung :invoice for amount :amount fehlgeschlagen.',
'browser_pay' => 'Google Pay, Apple Pay, Microsoft Pay',
@@ -4927,7 +4927,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'no_assigned_tasks' => 'Keine abzurechenden Aufgaben für diese Rechnung',
'authorization_failure' => 'Unzureichende Berechtigungen um diese Aktion auszuführen',
'authorization_sms_failure' => 'Bitte bestätigen Sie Ihr Konto um E-Mails zu versenden',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'Vielen Dank, dass Sie eine White-Label-Lizenz erworben haben.
Ihr Lizenzschlüssel lautet:
:license_key
Sie können Ihre Lizenz hier verwalten: https://invoiceninja.invoicing.co/ Kunde /login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E-Übertragung',
'xinvoice_payable' => 'Zahlbar innerhalb von :payeddue Tagen netto bis :paydate',
@@ -5092,7 +5092,7 @@ https://invoiceninja.github.io/docs/migration/#troubleshooting',
'region' => 'Region',
'county' => 'Landkreis',
'tax_details' => 'Steuerdetails',
- 'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
+ 'activity_10_online' => ':contact hat die Zahlung :payment für die Rechnung :invoice für :client geleistet',
'activity_10_manual' => ':user hat die Zahlung :payment für die Rechnung :invoice des Kunden :client eingegeben',
'default_payment_type' => 'Standard Zahlungsart',
'number_precision' => 'Genauigkeit der Nummern',
@@ -5150,7 +5150,7 @@ Leistungsempfängers',
'payment_receipt' => 'Zahlungsbeleg #:number',
'load_template_description' => 'Das Template wird auf Folgendes angewendet:',
'run_template' => 'Template anwenden',
- 'statement_design' => 'Statement Design',
+ 'statement_design' => 'Statement-Design',
'delivery_note_design' => 'Lieferschein Design',
'payment_receipt_design' => 'Zahlungsbeleg Design',
'payment_refund_design' => 'Gutschrift Design',
@@ -5159,88 +5159,105 @@ Leistungsempfängers',
'view_extension' => 'Erweiterung ansehen',
'reactivate_email' => 'E-Mail reaktivieren',
'email_reactivated' => 'Email erfolgreich reaktiviert',
- 'template_help' => 'Enable using the design as a template',
+ 'template_help' => 'Aktivieren Sie die Verwendung des Designs als Vorlage',
'quarter' => 'Quartal',
- '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',
+ 'item_description' => 'Artikelbeschreibung',
+ 'task_item' => 'Aufgabe',
+ 'record_state' => 'Aufnahmestatus',
+ 'save_files_to_this_folder' => 'Speichern Sie Dateien in diesem Ordner',
+ 'downloads_folder' => 'Downloads-Ordner',
+ 'total_invoiced_quotes' => 'Angebote auf Rechnung',
+ 'total_invoice_paid_quotes' => 'Auf Rechnung bezahlte Angebote',
+ 'downloads_folder_does_not_exist' => 'Der Download-Ordner existiert nicht :value',
+ 'user_logged_in_notification' => 'Benachrichtigung über angemeldeten Benutzer',
+ 'user_logged_in_notification_help' => 'Senden Sie eine E-Mail, wenn Sie sich von einem neuen Standort aus anmelden',
+ 'payment_email_all_contacts' => 'Zahlungs-E-Mail an alle Kontakte',
+ 'payment_email_all_contacts_help' => 'Sendet die Zahlungs-E-Mail an alle Kontakte, wenn diese Option aktiviert ist',
'add_line' => 'Zeile hinzufügen',
- '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.
[Transaction Reference: :transaction_reference]',
- 'receipt' => 'Receipt',
- 'charges' => 'Charges',
+ 'activity_139' => 'Ausgabe :expense Benachrichtigung an :contact gesendet',
+ 'vendor_notification_subject' => 'Zahlungsbestätigung :amount gesendet an :vendor',
+ 'vendor_notification_body' => 'Zahlung für :amount vom :payment _date verarbeitet.
[Transaktionsreferenz: :transaction_reference ]',
+ 'receipt' => 'Quittung',
+ 'charges' => 'Gebühren',
'email_report' => 'E-Mail-Bericht',
'payment_type_Pay Later' => 'Später bezahlen',
- 'payment_type_credit' => 'Payment Type Credit',
- 'payment_type_debit' => 'Payment Type Debit',
+ 'payment_type_credit' => 'Zahlungsart Gutschrift',
+ 'payment_type_debit' => 'Zahlungsart Lastschrift',
'send_emails_to' => 'Sende E-Mails an',
'primary_contact' => 'Primärkontakt',
'all_contacts' => 'Alle Kontakte',
'insert_below' => 'Darunter einfügen',
- 'nordigen_handler_subtitle' => 'Bank account authentication. Selecting your institution to complete the request with your account credentials.',
+ 'nordigen_handler_subtitle' => 'Authentifizierung des Bankkontos. Wählen Sie Ihre Institution aus, um die Anfrage mit Ihren Kontoanmeldeinformationen abzuschließen.',
'nordigen_handler_error_heading_unknown' => 'Ein Fehler ist aufgetreten',
'nordigen_handler_error_contents_unknown' => 'Ein unbekannter Fehler ist aufgetreten. Grund:',
'nordigen_handler_error_heading_token_invalid' => 'Ungültiges Token',
- 'nordigen_handler_error_contents_token_invalid' => 'The provided token was invalid. Contact support for help, if this issue persists.',
+ 'nordigen_handler_error_contents_token_invalid' => 'Das bereitgestellte Token war ungültig. Wenn das Problem weiterhin besteht, wenden Sie sich an den Support.',
'nordigen_handler_error_heading_account_config_invalid' => 'Fehlende Zugangsdaten',
- '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_contents_account_config_invalid' => 'Ungültige oder fehlende Zugangsdaten für Gocardless Bankverbindung . Wenn das Problem weiterhin besteht, wenden Sie sich an den Support.',
'nordigen_handler_error_heading_not_available' => 'Nicht verfügbar',
'nordigen_handler_error_contents_not_available' => 'Funktion ist nur im Enterprise-Tarif verfügbar.',
- '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_institution_invalid' => 'Ungültige Institution',
+ 'nordigen_handler_error_contents_institution_invalid' => 'Die angegebene Institutions-ID ist ungültig oder nicht mehr gültig.',
'nordigen_handler_error_heading_ref_invalid' => 'Ungültige Referenz',
- '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. Considder restarting the flow.',
- 'nordigen_handler_restart' => 'Restart flow.',
- 'nordigen_handler_return' => 'Return to application.',
- '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.
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.
: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',
+ 'nordigen_handler_error_contents_ref_invalid' => 'GoCardless hat keine gültige Referenz angegeben. Bitte führen Sie Flow erneut aus und wenden Sie sich an den Support, wenn das Problem weiterhin besteht.',
+ 'nordigen_handler_error_heading_not_found' => 'Ungültige Anforderung',
+ 'nordigen_handler_error_contents_not_found' => 'GoCardless hat keine gültige Referenz angegeben. Bitte führen Sie Flow erneut aus und wenden Sie sich an den Support, wenn das Problem weiterhin besteht.',
+ 'nordigen_handler_error_heading_requisition_invalid_status' => 'Nicht bereit',
+ 'nordigen_handler_error_contents_requisition_invalid_status' => 'Sie haben diese Seite zu früh aufgerufen. Bitte schließen Sie die Autorisierung ab und aktualisieren Sie diese Seite. Wenn das Problem weiterhin besteht, wenden Sie sich an den Support.',
+ 'nordigen_handler_error_heading_requisition_no_accounts' => 'Keine Konten ausgewählt',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
+ 'nordigen_handler_restart' => 'Fluss neu starten.',
+ 'nordigen_handler_return' => 'Zurück zur Bewerbung.',
+ 'lang_Lao' => 'Laotisch',
+ 'currency_lao_kip' => 'Laotischer Kip',
+ 'yodlee_regions' => 'Regionen: USA, Großbritannien, Australien und Indien',
+ 'nordigen_regions' => 'Regionen: Europa und Großbritannien',
+ 'select_provider' => 'Wählen Sie Anbieter aus',
+ 'nordigen_requisition_subject' => 'Die Anforderung ist abgelaufen. Bitte authentifizieren Sie sich erneut.',
+ 'nordigen_requisition_body' => 'Der Zugriff auf Bankkonto-Feeds ist gemäß der Endbenutzervereinbarung abgelaufen.
Bitte melden Sie sich bei Invoice Ninja an und authentifizieren Sie sich erneut bei Ihren Banken, um weiterhin Transaktionen zu erhalten.',
+ 'participant' => 'Teilnehmer',
+ 'participant_name' => 'Teilnehmername',
+ 'client_unsubscribed' => 'Kunde hat sich von E-Mails abgemeldet.',
+ 'client_unsubscribed_help' => 'Kunde :client hat sich von Ihren E-Mails abgemeldet. Der Kunde muss zustimmen, künftige E-Mails von Ihnen zu erhalten.',
+ 'resubscribe' => 'Abonnieren Sie erneut',
+ 'subscribe' => 'Abonnieren',
+ 'subscribe_help' => 'Sie sind derzeit angemeldet und erhalten weiterhin E-Mail-Mitteilungen.',
+ 'unsubscribe_help' => 'Sie sind derzeit nicht abonniert und erhalten daher derzeit keine E-Mails.',
+ 'notification_purchase_order_bounced' => 'Wir konnten die Bestellung :invoice nicht an :contact liefern.
:error',
+ 'notification_purchase_order_bounced_subject' => 'Bestellung :invoice kann nicht geliefert werden',
+ 'show_pdfhtml_on_mobile' => 'Zeigt die HTML-Version der Entität an, wenn sie auf Mobilgeräten angezeigt wird',
+ 'show_pdfhtml_on_mobile_help' => 'Zur besseren Visualisierung wird bei der Anzeige auf Mobilgeräten eine HTML-Version der Rechnung/ Angebot / Kostenvoranschlag angezeigt.',
+ 'please_select_an_invoice_or_credit' => 'Bitte wählen Sie eine Rechnung oder Gutschrift aus',
'mobile_version' => 'Mobile Version',
'venmo' => 'Venmo',
- 'my_bank' => 'MyBank',
+ 'my_bank' => 'Meine Bank',
'pay_later' => 'Später Zahlen',
- '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',
+ 'local_domain' => 'Lokale Domäne',
+ 'verify_peer' => 'Peer überprüfen',
+ 'nordigen_help' => 'Hinweis: Für die Verbindung eines Kontos ist ein GoCardless/Nordigen-API-Schlüssel erforderlich',
+ 'ar_detailed' => 'Detaillierte Debitorenbuchhaltung',
+ 'ar_summary' => 'Zusammenfassung der Debitorenbuchhaltung',
+ 'client_sales' => 'Kunde',
+ 'user_sales' => 'Benutzerverkäufe',
+ 'iframe_url' => 'iFrame-URL',
+ 'user_unsubscribed' => 'Der Benutzer hat die E-Mails :link abgemeldet',
+ 'use_available_payments' => 'Verwenden Sie verfügbare Zahlungen',
+ 'test_email_sent' => 'E-Mail erfolgreich gesendet',
+ 'gateway_type' => 'Gateway-Typ',
+ 'save_template_body' => 'Möchten Sie diese Importzuordnung als Vorlage für die zukünftige Verwendung speichern?',
+ 'save_as_template' => 'Vorlagenzuordnung speichern',
+ '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',
+ 'payment_terms_help' => 'Setzt das Standardfälligkeitsdatum',
+ 'payment_type_help' => 'Setze die Standard manuelle Zahlungsmethode.',
+ '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',
+
);
return $lang;
diff --git a/lang/el/texts.php b/lang/el/texts.php
index 55eca879770a..e90b83714245 100644
--- a/lang/el/texts.php
+++ b/lang/el/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Επεξεργασία Διακριτικού',
'delete_token' => 'Διαγραφή Διακριτικού',
'token' => 'Διακριτικό',
- 'add_gateway' => 'Προσθήκη Πύλης Πληρωμών (Gateway)',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Διαγραφή Πύλης Πληρωμών (Gateway)',
'edit_gateway' => 'Επεξεργασία Πύλης Πληρωμών (Gateway)',
'updated_gateway' => 'Επιτυχής ενημέρωση πύλης πληρωμών (Gateway)',
@@ -3868,7 +3868,7 @@ $lang = array(
'cancellation_pending' => 'Η ακύρωση εκκρεμεί, θα επικοινωνήσουμε μαζί σας!',
'list_of_payments' => 'Λίστα Πληρωμών',
'payment_details' => 'Details of the payment',
- 'list_of_payment_invoices' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Οριστική αφαίρεσηε αυτής της μεθόδου πληρωμής',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'Δεν υπάρχουν χρεώσιμες εργασίες για αυτό το έργο',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Ορίζει την προεπιλεγμένη ημερομηνία ολοκλήρωσης των τιμολογίων',
+ 'payment_type_help' => 'Ορίζει τον προεπιλεγμένο τρόπο χειροκίνητης πληρωμής.',
+ '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',
);
diff --git a/lang/en/texts.php b/lang/en/texts.php
index 3daeed073024..e6a226b2c595 100644
--- a/lang/en/texts.php
+++ b/lang/en/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Edit Token',
'delete_token' => 'Delete Token',
'token' => 'Token',
- 'add_gateway' => 'Add Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Delete Gateway',
'edit_gateway' => 'Edit Gateway',
'updated_gateway' => 'Successfully updated gateway',
@@ -5203,7 +5203,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5242,6 +5242,22 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'The number of days after the invoice date that payment is due',
+ 'payment_type_help' => 'The default payment type to be used for payments',
+ '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',
+ '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',
);
return $lang;
diff --git a/lang/es/texts.php b/lang/es/texts.php
index b8822da7f21c..a9c4f01a989f 100644
--- a/lang/es/texts.php
+++ b/lang/es/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Editar Token',
'delete_token' => 'Eliminar Token',
'token' => 'Token',
- 'add_gateway' => 'Agregar Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Eliminar Gateway',
'edit_gateway' => 'Editar Gateway',
'updated_gateway' => 'Gateway actualizado con éxito',
@@ -506,8 +506,8 @@ $lang = array(
'auto_wrap' => 'Ajuste Automático de Línea',
'duplicate_post' => 'Advertencia: la página anterior fue enviada dos veces. El segundo envío ha sido ignorado.',
'view_documentation' => 'Ver Documentación',
- '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ón en línea gratuita',
+ 'app_description' => 'Invoice Ninja es una solución gratuita de código abierto para facturar y facturar a los clientes. Con Invoice Ninja, puedes crear y enviar fácilmente hermosas facturas desde cualquier dispositivo que tenga acceso a la web. Sus clientes pueden imprimir sus facturas, descargarlas como archivos pdf e incluso pagarle en línea desde el sistema.',
'rows' => 'filas',
'www' => 'www',
'logo' => 'Logo',
@@ -693,9 +693,9 @@ $lang = array(
'disable' => 'Deshabilitado',
'invoice_quote_number' => 'Números de Cotización y Factura',
'invoice_charges' => 'Cargos de Factura',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'No pudimos entregar la factura :invoice a :contact .
:error',
'notification_invoice_bounced_subject' => 'No fue posible entregar la Factura :invoice',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'No pudimos entregar la cotización :invoice a :contact .
:error',
'notification_quote_bounced_subject' => 'No nos fue posible entregar la Cotización :invoice',
'custom_invoice_link' => 'Link Personalizado de Factura',
'total_invoiced' => 'Total Facturado',
@@ -3009,7 +3009,7 @@ $lang = array(
'hosted_login' => 'Inicio de sesión alojado',
'selfhost_login' => 'Iniciar sesión',
'google_login' => 'Inicio de sesión de Google',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'Gracias por su paciencia mientras trabajamos para implementar estas funciones.
Esperamos tenerlos terminados en los próximos meses.
Hasta entonces seguiremos apoyando a la',
'legacy_mobile_app' => 'aplicación móvil heredada',
'today' => 'Hoy',
'current' => 'Actual',
@@ -3867,7 +3867,7 @@ $lang = array(
'cancellation_pending' => 'Cancelación pendiente, ¡nos pondremos en contacto!',
'list_of_payments' => 'Lista de pagos',
'payment_details' => 'Detalles del pago',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'Facturas asociadas',
'list_of_payment_methods' => 'Lista de métodos de pago',
'payment_method_details' => 'Detalles del método de pago',
'permanently_remove_payment_method' => 'Eliminar permanentemente este método de pago.',
@@ -4924,7 +4924,7 @@ $lang = array(
'no_assigned_tasks' => 'No hay tareas facturables para este proyecto',
'authorization_failure' => 'Permisos insuficientes para realizar esta acción',
'authorization_sms_failure' => 'Por favor verifique su cuenta para enviar correos electrónicos.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'Gracias por adquirir una licencia de marca blanca.
Su clave de licencia es:
:license_key
Puedes gestionar tu licencia aquí: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Transferencia Interac E',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5119,7 +5119,7 @@ $lang = array(
'set_private' => 'Establecer privado',
'individual' => 'Individual',
'business' => 'Negocio',
- 'partnership' => 'Partnership',
+ 'partnership' => 'Camaradería',
'trust' => 'Confianza',
'charity' => 'Caridad',
'government' => 'Gobierno',
@@ -5200,7 +5200,7 @@ $lang = array(
'nordigen_handler_error_heading_requisition_invalid_status' => 'No está listo',
'nordigen_handler_error_contents_requisition_invalid_status' => 'Llamaste a este sitio demasiado pronto. Finalice la autorización y actualice esta página. Póngase en contacto con el soporte para obtener ayuda si este problema persiste.',
'nordigen_handler_error_heading_requisition_no_accounts' => 'No hay cuentas seleccionadas',
- 'nordigen_handler_error_contents_requisition_no_accounts' => 'El servicio no ha devuelto ninguna cuenta válida. Considere reiniciar el flujo.',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
'nordigen_handler_restart' => 'Reiniciar el flujo.',
'nordigen_handler_return' => 'Volver a la aplicación.',
'lang_Lao' => 'laosiano',
@@ -5210,32 +5210,49 @@ $lang = array(
'select_provider' => 'Seleccionar Proveedor',
'nordigen_requisition_subject' => 'La solicitud expiró, vuelva a autenticarse.',
'nordigen_requisition_body' => 'El acceso a los feeds de cuentas bancarias ha caducado según lo establecido en el Acuerdo de usuario final.
Inicie sesión en Invoice Ninja y vuelva a autenticarse con sus bancos para continuar recibiendo transacciones.',
- '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.
: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' => 'Partícipe',
+ 'participant_name' => 'Nombre del participante',
+ 'client_unsubscribed' => 'El cliente se dio de baja de los correos electrónicos.',
+ 'client_unsubscribed_help' => 'El cliente :client se ha dado de baja de sus correos electrónicos. El cliente debe dar su consentimiento para recibir futuros correos electrónicos suyos.',
+ 'resubscribe' => 'Volver a suscribirse',
+ 'subscribe' => 'Suscribir',
+ 'subscribe_help' => 'Actualmente está suscrito y seguirá recibiendo comunicaciones por correo electrónico.',
+ 'unsubscribe_help' => 'Actualmente no estás suscrito y, por lo tanto, no recibirás correos electrónicos en este momento.',
+ 'notification_purchase_order_bounced' => 'No pudimos entregar la orden de compra :invoice a :contact .
:error',
+ 'notification_purchase_order_bounced_subject' => 'No se puede entregar la orden de compra :invoice',
+ 'show_pdfhtml_on_mobile' => 'Mostrar la versión HTML de la entidad cuando se visualiza en un dispositivo móvil',
+ 'show_pdfhtml_on_mobile_help' => 'Para una visualización mejorada, muestra una versión HTML de la factura/cotización cuando se visualiza en el dispositivo móvil.',
+ 'please_select_an_invoice_or_credit' => 'Por favor seleccione una factura o crédito',
+ 'mobile_version' => 'Version móvil',
'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',
+ 'my_bank' => 'Mi banco',
+ 'pay_later' => 'Paga después',
+ 'local_domain' => 'Dominio local',
+ 'verify_peer' => 'Verificar par',
+ 'nordigen_help' => 'Nota: conectar una cuenta requiere una clave API de GoCardless/Nordigen',
+ 'ar_detailed' => 'Cuentas por cobrar detalladas',
+ 'ar_summary' => 'Resumen de cuentas por cobrar',
+ 'client_sales' => 'Ventas al cliente',
+ 'user_sales' => 'Ventas de usuarios',
+ 'iframe_url' => 'URL del marco flotante',
+ 'user_unsubscribed' => 'Usuario dado de baja de los correos electrónicos :link',
+ 'use_available_payments' => 'Usar pagos disponibles',
+ 'test_email_sent' => 'Correo electrónico enviado correctamente',
+ 'gateway_type' => 'Tipo de puerta de enlace',
+ 'save_template_body' => '¿Le gustaría guardar este mapeo de importación como plantilla para uso futuro?',
+ 'save_as_template' => 'Guardar asignación de plantilla',
+ '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',
+ 'payment_terms_help' => 'Establecer fecha de vencimiento de la factura por defecto',
+ 'payment_type_help' => 'Establecer el tipo de pago manual por defecto.',
+ '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',
+
);
return $lang;
diff --git a/lang/es_ES/texts.php b/lang/es_ES/texts.php
index 91fd1c22fa63..70e4c4208d99 100644
--- a/lang/es_ES/texts.php
+++ b/lang/es_ES/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Editar Token',
'delete_token' => 'Eliminar Token',
'token' => 'Token',
- 'add_gateway' => 'Agregar Pasarela',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Eliminar Pasarela',
'edit_gateway' => 'Editar Pasarela',
'updated_gateway' => 'Pasarela actualizada correctamente',
@@ -4921,7 +4921,7 @@ Una vez que tenga los montos, vuelva a esta página de métodos de pago y haga c
'no_assigned_tasks' => 'No hay tareas facturables para este proyecto',
'authorization_failure' => 'Permisos insuficientes para realizar esta acción',
'authorization_sms_failure' => 'Por favor verifique su cuenta para enviar correos electrónicos.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'Gracias por adquirir una licencia de marca blanca.
Su clave de licencia es:
:license_key
Puedes gestionar tu licencia aquí: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Pagadero dentro de :payeddue días de pago vencido neto hasta :paydate',
@@ -5198,7 +5198,7 @@ De lo contrario, este campo deberá dejarse en blanco.',
'nordigen_handler_error_heading_requisition_invalid_status' => 'No listo',
'nordigen_handler_error_contents_requisition_invalid_status' => 'Llamaste a este sitio demasiado pronto. Finalice la autorización y actualice esta página. Póngase en contacto con el soporte para obtener ayuda si este problema persiste.',
'nordigen_handler_error_heading_requisition_no_accounts' => 'No hay cuentas seleccionadas',
- 'nordigen_handler_error_contents_requisition_no_accounts' => 'El servicio no ha devuelto ninguna cuenta válida. Considere reiniciar el flujo.',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
'nordigen_handler_restart' => 'Reiniciar el flujo.',
'nordigen_handler_return' => 'Volver a la aplicación.',
'lang_Lao' => 'Lao',
@@ -5234,6 +5234,23 @@ De lo contrario, este campo deberá dejarse en blanco.',
'user_sales' => 'Ventas de usuarios',
'iframe_url' => 'iFrame URL',
'user_unsubscribed' => 'Usuario dado de baja de los correos electrónicos :link',
+ 'use_available_payments' => 'Usar pagos disponibles',
+ 'test_email_sent' => 'Correo electrónico enviado correctamente',
+ 'gateway_type' => 'Tipo de puerta de enlace',
+ 'save_template_body' => '¿Le gustaría guardar este mapeo de importación como plantilla para uso futuro?',
+ 'save_as_template' => 'Guardar asignación de plantilla',
+ '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',
+ 'payment_terms_help' => 'Establezca la fecha límite de pago de factura por defecto',
+ 'payment_type_help' => 'Establece el tipo de pago manual predeterminado.',
+ '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',
+
);
return $lang;
diff --git a/lang/et/texts.php b/lang/et/texts.php
index b9dd9d9a00a2..e0323fe259d0 100644
--- a/lang/et/texts.php
+++ b/lang/et/texts.php
@@ -461,7 +461,7 @@ $lang = array(
'edit_token' => 'Redigeeri Tokenit',
'delete_token' => 'Kustuta Token',
'token' => 'Token',
- 'add_gateway' => 'Lisa Lüüs',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Kustuta Lüüs',
'edit_gateway' => 'Muuda Lüüsi',
'updated_gateway' => 'Makselahendus uuendatud',
@@ -3868,7 +3868,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Määrab vaikimisi arve tähtaeg',
+ 'payment_type_help' => 'Määrab vaikimisi käsitsimakse tüüp.',
+ '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',
);
diff --git a/lang/fa/texts.php b/lang/fa/texts.php
index c565507b7940..4d0ee721d0e6 100644
--- a/lang/fa/texts.php
+++ b/lang/fa/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Edit Token',
'delete_token' => 'Delete Token',
'token' => 'Token',
- 'add_gateway' => 'Add Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Delete Gateway',
'edit_gateway' => 'Edit Gateway',
'updated_gateway' => 'Successfully updated gateway',
@@ -3868,7 +3868,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Sets the default invoice due date',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/fi/texts.php b/lang/fi/texts.php
index a7e2351a4e1c..67325c4878a0 100644
--- a/lang/fi/texts.php
+++ b/lang/fi/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Muokkaa tokenia',
'delete_token' => 'Poista token',
'token' => 'Token',
- 'add_gateway' => 'Lisää maksunvälittäjä',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Poista maksunvälittäjä',
'edit_gateway' => 'Muokkaa maksunvälittäjää',
'updated_gateway' => 'Maksunvälittäjä päivitetty onnistuneesti',
@@ -3868,7 +3868,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'Lista maksutavoista',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4925,7 +4925,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ Kun saat summat, palaa tälle maksutapasivulle ja klikkaa "Saata loppuun todenta
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Asettaa eräpäivään vakioasetuksen',
+ 'payment_type_help' => 'Asettaa oletuksena manuaalisen maksutavan.',
+ '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',
);
diff --git a/lang/fr/texts.php b/lang/fr/texts.php
index f5fccd2ec5f2..cfa4cf961d7e 100644
--- a/lang/fr/texts.php
+++ b/lang/fr/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Éditer ce jeton',
'delete_token' => 'Supprimer ce jeton',
'token' => 'Jeton',
- 'add_gateway' => 'Ajouter une passerelle',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Supprimer la passerelle',
'edit_gateway' => 'Éditer la passerelle',
'updated_gateway' => 'Passerelle mise à jour avec succès',
@@ -506,8 +506,8 @@ $lang = array(
'auto_wrap' => 'Retour à la ligne automatique',
'duplicate_post' => 'Attention: la page précédente a été soumise deux fois. La deuxième soumission a été ignorée.',
'view_documentation' => 'Voir 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' => 'Facturation en ligne gratuite',
+ 'app_description' => 'Invoice Ninja est une solution gratuite et à code ouvert pour la facturation et la facturation des clients. Avec Invoice Ninja, vous pouvez facilement créer et envoyer de belles factures depuis n'importe quel appareil ayant accès au Web. Vos clients peuvent imprimer vos factures, les télécharger sous forme de fichiers PDF et même vous payer en ligne depuis le système.',
'rows' => 'lignes',
'www' => 'www',
'logo' => 'Logo',
@@ -693,9 +693,9 @@ $lang = array(
'disable' => 'Désactiver',
'invoice_quote_number' => 'Numéro des devis & factures',
'invoice_charges' => 'Majoration de facture',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'Nous n'avons pas pu transmettre la facture :invoice à :contact .
:error',
'notification_invoice_bounced_subject' => 'Impossible d\'envoyer la facture :invoice',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'Nous n'avons pas pu transmettre le devis :invoice à :contact .
:error',
'notification_quote_bounced_subject' => 'Impossible d\'envoyer le devis :invoice',
'custom_invoice_link' => 'Personnaliser le lien de la facture',
'total_invoiced' => 'Total facturé',
@@ -3010,7 +3010,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'hosted_login' => 'Authentification Hosted',
'selfhost_login' => 'Authentification Selfhost',
'google_login' => 'Authentification Google',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'Merci de votre patience pendant que nous travaillons à la mise en œuvre de ces fonctionnalités.
Nous espérons les terminer dans les prochains mois.
D'ici là, nous continuerons à soutenir le',
'legacy_mobile_app' => 'Ancienne App mobile',
'today' => 'Aujourd\'hui',
'current' => 'Actuel',
@@ -3868,7 +3868,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'cancellation_pending' => 'Annulation en cours, nous vous contacterons !',
'list_of_payments' => 'Liste des paiements',
'payment_details' => 'Détails du paiement',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'Factures associées',
'list_of_payment_methods' => 'Liste des moyens de paiement',
'payment_method_details' => 'Détails du mode de paiement',
'permanently_remove_payment_method' => 'Supprimer définitivement ce mode de paiement.',
@@ -4925,7 +4925,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'no_assigned_tasks' => 'Aucune tâche facturable pour ce projet',
'authorization_failure' => 'Autorisations insuffisantes pour effectuer cette action',
'authorization_sms_failure' => 'Veuillez vérifier votre compte pour envoyer des e-mails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'Merci d'avoir acheté une licence en marque blanche.
Votre clé de licence est :
:license_key
Vous pouvez gérer votre licence ici : https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Virement Interac E',
'xinvoice_payable' => 'Payable sous :payeddue days net jusqu\'au :paydate',
@@ -5090,7 +5090,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'region' => 'Région',
'county' => 'Comté',
'tax_details' => 'Détails fiscaux',
- 'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
+ 'activity_10_online' => ':contact a effectué le paiement :payment pour la facture :invoice pour :client',
'activity_10_manual' => ':user a saisi le paiement :payment pour la facture :invoice pour :client',
'default_payment_type' => 'Type de paiement par défaut',
'number_precision' => 'Précision du nombre',
@@ -5120,7 +5120,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'set_private' => 'Définir comme privé',
'individual' => 'Individuel',
'business' => 'Entreprise',
- 'partnership' => 'Partnership',
+ 'partnership' => 'Partenariat',
'trust' => 'Confiance',
'charity' => 'Charité',
'government' => 'Gouvernement',
@@ -5201,42 +5201,59 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'nordigen_handler_error_heading_requisition_invalid_status' => 'Pas prêt',
'nordigen_handler_error_contents_requisition_invalid_status' => 'Vous avez appelé ce site trop tôt. Veuillez terminer l'autorisation et actualiser cette page. Contactez le support pour obtenir de l'aide si ce problème persiste.',
'nordigen_handler_error_heading_requisition_no_accounts' => 'Aucun compte sélectionné',
- 'nordigen_handler_error_contents_requisition_no_accounts' => 'Le service n'a renvoyé aucun compte valide. Pensez à redémarrer le flux.',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
'nordigen_handler_restart' => 'Redémarrez le flux.',
'nordigen_handler_return' => 'Retour à la candidature.',
- '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.
Please log into Invoice Ninja and re-authenticate with your banks to continue receiving transactions.',
+ 'lang_Lao' => 'Laotien',
+ 'currency_lao_kip' => 'Kip laotien',
+ 'yodlee_regions' => 'Régions : États-Unis, Royaume-Uni, Australie et Inde',
+ 'nordigen_regions' => 'Régions : Europe et Royaume-Uni',
+ 'select_provider' => 'Sélectionnez le fournisseur',
+ 'nordigen_requisition_subject' => 'La demande a expiré, veuillez vous authentifier à nouveau.',
+ 'nordigen_requisition_body' => 'L'accès aux flux des comptes bancaires a expiré comme indiqué dans le Contrat de l'utilisateur final.
Veuillez vous connecter à Invoice Ninja et vous authentifier à nouveau auprès de vos banques pour continuer à recevoir des 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.
: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 du participant',
+ 'client_unsubscribed' => 'Client désabonné des e-mails.',
+ 'client_unsubscribed_help' => 'Le client :client s'est désabonné de vos e-mails. Le client doit consentir à recevoir de futurs e-mails de votre part.',
+ 'resubscribe' => 'Réabonnez-vous',
+ 'subscribe' => 'S'abonner',
+ 'subscribe_help' => 'Vous êtes actuellement abonné et continuerez à recevoir des communications par courrier électronique.',
+ 'unsubscribe_help' => 'Vous n'êtes actuellement pas abonné et ne recevrez donc pas d'e-mails pour le moment.',
+ 'notification_purchase_order_bounced' => 'Nous n'avons pas pu livrer le bon de commande :invoice à :contact .
:error',
+ 'notification_purchase_order_bounced_subject' => 'Impossible de livrer le bon de commande :invoice',
+ 'show_pdfhtml_on_mobile' => 'Afficher la version HTML de l'entité lors de la visualisation sur mobile',
+ 'show_pdfhtml_on_mobile_help' => 'Pour une visualisation améliorée, affiche une version HTML de la facture/devis lors de la visualisation sur mobile.',
+ 'please_select_an_invoice_or_credit' => 'Veuillez sélectionner une facture ou un crédit',
+ 'mobile_version' => 'Version mobile',
'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',
+ 'my_bank' => 'Ma banque',
+ 'pay_later' => 'Payer plus tard',
+ 'local_domain' => 'Domaine local',
+ 'verify_peer' => 'Vérifier le pair',
+ 'nordigen_help' => 'Remarque : la connexion d'un compte nécessite une clé API GoCardless/Nordigen',
+ 'ar_detailed' => 'Comptes clients détaillés',
+ 'ar_summary' => 'Sommaire des comptes clients',
+ 'client_sales' => 'Ventes clients',
+ 'user_sales' => 'Ventes aux utilisateurs',
+ 'iframe_url' => 'URL iFrame',
+ 'user_unsubscribed' => 'Utilisateur désabonné des e-mails :link',
+ 'use_available_payments' => 'Utiliser les paiements disponibles',
+ 'test_email_sent' => 'E-mail envoyé avec succès',
+ 'gateway_type' => 'Type de passerelle',
+ 'save_template_body' => 'Souhaitez-vous enregistrer ce mappage d’importation en tant que modèle pour une utilisation future ?',
+ 'save_as_template' => 'Enregistrer le mappage de modèle',
+ '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',
+ 'payment_terms_help' => 'Définit la date d\'échéance de la facture par défaut ',
+ 'payment_type_help' => 'Définit le type de paiement manuel par défaut.',
+ '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',
+
);
return $lang;
diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php
index 1020490d5777..9faef9cfe54c 100644
--- a/lang/fr_CA/texts.php
+++ b/lang/fr_CA/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Éditer le jeton',
'delete_token' => 'Supprimer le jeton',
'token' => 'Jeton',
- 'add_gateway' => 'Ajouter une passerelle',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Supprimer la passerelle',
'edit_gateway' => 'Éditer la passerelle',
'updated_gateway' => 'La passerelle a été mise à jour',
@@ -5198,7 +5198,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'nordigen_handler_error_heading_requisition_invalid_status' => 'Pas prêt',
'nordigen_handler_error_contents_requisition_invalid_status' => 'Vous avez contacté ce site trop tôt. Veuillez terminer l\'autorisation et rafraîchir cette page. Contactez le support pour obtenir de l\'aide si ce problème persiste.',
'nordigen_handler_error_heading_requisition_no_accounts' => 'Aucun compte sélectionné',
- 'nordigen_handler_error_contents_requisition_no_accounts' => 'Le service n\'a retourné aucun compte valide. Veuillez redémarrer le processus.',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'Le service n’a retourné aucun compte valide. Veuillez redémarrer le processus.',
'nordigen_handler_restart' => 'Redémarrer le processus',
'nordigen_handler_return' => 'Retour à l\'application',
'lang_Lao' => 'Lao',
@@ -5234,6 +5234,23 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'user_sales' => 'Ventes de l\'utilisateur',
'iframe_url' => 'URL de l\'iFrame',
'user_unsubscribed' => 'Utilisateur désabonné des courriels :link',
+ 'use_available_payments' => 'Utilisez les paiements disponibles',
+ 'test_email_sent' => 'Le courriel a été envoyé',
+ 'gateway_type' => 'Type de passerelle',
+ 'save_template_body' => 'Souhaitez-vous enregistrer cette correspondance d\'importation en tant que modèle pour une utilisation future ?',
+ 'save_as_template' => 'Enregistrer la correspondance de modèle',
+ 'auto_bill_standard_invoices_help' => 'Facturer automatiquement les factures régulières à la date d\'échéance',
+ 'auto_bill_on_help' => 'Facturation automatique à la date d\'envoi OU à la date d\'échéance (factures récurrentes)',
+ 'use_available_credits_help' => 'Appliquer tout solde de crédit aux paiements avant de facturer une méthode de paiement',
+ 'use_unapplied_payments' => 'Utiliser les paiements non appliqués',
+ 'use_unapplied_payments_help' => 'Appliquer tout solde de paiement avant de facturer une méthode de paiement',
+ 'payment_terms_help' => 'Définit la date d\'échéance de la facture par défaut',
+ 'payment_type_help' => 'Définit le type de paiement manuel par défaut.',
+ 'quote_valid_until_help' => 'Le nombre de jours pour lesquels la soumission est valide',
+ 'expense_payment_type_help' => 'Le type de paiement de dépenses par défaut à utiliser',
+ 'paylater' => 'Pay in 4',
+ 'payment_provider' => 'Payment Provider',
+
);
return $lang;
diff --git a/lang/fr_CH/texts.php b/lang/fr_CH/texts.php
index 03716645652f..4b2c73a51f73 100644
--- a/lang/fr_CH/texts.php
+++ b/lang/fr_CH/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Éditer le jeton',
'delete_token' => 'Supprimer le jeton',
'token' => 'Jeton',
- 'add_gateway' => 'Ajouter une passerelle',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Supprimer la passerelle',
'edit_gateway' => 'Éditer la passerelle',
'updated_gateway' => 'La passerelle a été mise à jour avec succès',
@@ -506,8 +506,8 @@ $lang = array(
'auto_wrap' => 'Retour à la ligne automatique',
'duplicate_post' => 'Avertissement: la page précédente a été envoyée deux fois. Le deuxième envoi a été ignoré.',
'view_documentation' => 'Voir la 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' => 'Facturation en ligne gratuite',
+ 'app_description' => 'Invoice Ninja est une solution gratuite et à code ouvert pour la facturation et la facturation des clients. Avec Invoice Ninja, vous pouvez facilement créer et envoyer de belles factures depuis n'importe quel appareil ayant accès au Web. Vos clients peuvent imprimer vos factures, les télécharger sous forme de fichiers PDF et même vous payer en ligne depuis le système.',
'rows' => 'lignes',
'www' => 'www',
'logo' => 'Logo',
@@ -693,9 +693,9 @@ $lang = array(
'disable' => 'Désactiver',
'invoice_quote_number' => 'Numéro des offres & factures',
'invoice_charges' => 'Suppléments de facture',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'Nous n'avons pas pu transmettre la facture :invoice à :contact .
:error',
'notification_invoice_bounced_subject' => 'Impossible d\'envoyer la facture :invoice',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'Nous n'avons pas pu transmettre le devis :invoice à :contact .
:error',
'notification_quote_bounced_subject' => 'Impossible d\'envoyer l\'offre :invoice',
'custom_invoice_link' => 'Lien de facture personnalisé',
'total_invoiced' => 'Total facturé',
@@ -3007,7 +3007,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'hosted_login' => 'Connexion hébergée',
'selfhost_login' => 'Connexion autohébergée',
'google_login' => 'Connexion Google',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'Merci de votre patience pendant que nous travaillons à la mise en œuvre de ces fonctionnalités.
Nous espérons les terminer dans les prochains mois.
D'ici là, nous continuerons à soutenir le',
'legacy_mobile_app' => 'Ancienne App mobile',
'today' => 'Aujourd\'hui',
'current' => 'En cours',
@@ -3865,7 +3865,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'cancellation_pending' => 'Annulation en attente. Nous vous tiendrons au courant.',
'list_of_payments' => 'Liste des paiements',
'payment_details' => 'Détails du paiement',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'Factures associées',
'list_of_payment_methods' => 'Liste des modes de paiement',
'payment_method_details' => 'Détails du mode de paiement',
'permanently_remove_payment_method' => 'Supprimer de façon définitive ce mode de paiement',
@@ -4922,7 +4922,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'no_assigned_tasks' => 'Aucune intervetion facturable pour ce projet',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'Merci d'avoir acheté une licence en marque blanche.
Votre clé de licence est :
:license_key
Vous pouvez gérer votre licence ici : https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable sous :payeddue jours net jusqu'à :paydate',
@@ -5117,7 +5117,7 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'set_private' => 'Définir comme privé',
'individual' => 'Individuel',
'business' => 'Entreprise',
- 'partnership' => 'Partnership',
+ 'partnership' => 'Partenariat',
'trust' => 'Confiance',
'charity' => 'Charité',
'government' => 'Gouvernement',
@@ -5198,42 +5198,59 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'nordigen_handler_error_heading_requisition_invalid_status' => 'Pas prêt',
'nordigen_handler_error_contents_requisition_invalid_status' => 'Vous avez appelé ce site trop tôt. Veuillez terminer l'autorisation et actualiser cette page. Contactez le support pour obtenir de l'aide si ce problème persiste.',
'nordigen_handler_error_heading_requisition_no_accounts' => 'Aucun compte sélectionné',
- 'nordigen_handler_error_contents_requisition_no_accounts' => 'Le service n'a renvoyé aucun compte valide. Pensez à redémarrer le flux.',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
'nordigen_handler_restart' => 'Redémarrez le flux.',
'nordigen_handler_return' => 'Retour à la candidature.',
- '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.
Please log into Invoice Ninja and re-authenticate with your banks to continue receiving transactions.',
+ 'lang_Lao' => 'Laotien',
+ 'currency_lao_kip' => 'Kip laotien',
+ 'yodlee_regions' => 'Régions : États-Unis, Royaume-Uni, Australie et Inde',
+ 'nordigen_regions' => 'Régions : Europe et Royaume-Uni',
+ 'select_provider' => 'Sélectionnez le fournisseur',
+ 'nordigen_requisition_subject' => 'La demande a expiré, veuillez vous authentifier à nouveau.',
+ 'nordigen_requisition_body' => 'L'accès aux flux des comptes bancaires a expiré comme indiqué dans le Contrat de l'utilisateur final.
Veuillez vous connecter à Invoice Ninja et vous authentifier à nouveau auprès de vos banques pour continuer à recevoir des 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.
: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 du participant',
+ 'client_unsubscribed' => 'Client désabonné des e-mails.',
+ 'client_unsubscribed_help' => 'Le client :client s'est désabonné de vos e-mails. Le client doit consentir à recevoir de futurs e-mails de votre part.',
+ 'resubscribe' => 'Réabonnez-vous',
+ 'subscribe' => 'S'abonner',
+ 'subscribe_help' => 'Vous êtes actuellement abonné et continuerez à recevoir des communications par courrier électronique.',
+ 'unsubscribe_help' => 'Vous n'êtes actuellement pas abonné et ne recevrez donc pas d'e-mails pour le moment.',
+ 'notification_purchase_order_bounced' => 'Nous n'avons pas pu livrer le bon de commande :invoice à :contact .
:error',
+ 'notification_purchase_order_bounced_subject' => 'Impossible de livrer le bon de commande :invoice',
+ 'show_pdfhtml_on_mobile' => 'Afficher la version HTML de l'entité lors de la visualisation sur mobile',
+ 'show_pdfhtml_on_mobile_help' => 'Pour une visualisation améliorée, affiche une version HTML de la facture/devis lors de la visualisation sur mobile.',
+ 'please_select_an_invoice_or_credit' => 'Veuillez sélectionner une facture ou un crédit',
+ 'mobile_version' => 'Version mobile',
'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',
+ 'my_bank' => 'Ma banque',
+ 'pay_later' => 'Payer plus tard',
+ 'local_domain' => 'Domaine local',
+ 'verify_peer' => 'Vérifier le pair',
+ 'nordigen_help' => 'Remarque : la connexion d'un compte nécessite une clé API GoCardless/Nordigen',
+ 'ar_detailed' => 'Comptes clients détaillés',
+ 'ar_summary' => 'Sommaire des comptes clients',
+ 'client_sales' => 'Ventes clients',
+ 'user_sales' => 'Ventes aux utilisateurs',
+ 'iframe_url' => 'URL iFrame',
+ 'user_unsubscribed' => 'Utilisateur désabonné des e-mails :link',
+ 'use_available_payments' => 'Utiliser les paiements disponibles',
+ 'test_email_sent' => 'E-mail envoyé avec succès',
+ 'gateway_type' => 'Type de passerelle',
+ 'save_template_body' => 'Souhaitez-vous enregistrer ce mappage d’importation en tant que modèle pour une utilisation future ?',
+ 'save_as_template' => 'Enregistrer le mappage de modèle',
+ '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',
+ 'payment_terms_help' => 'Définit la date d\'échéance de la facture par défaut',
+ 'payment_type_help' => 'Définit le type de paiement manuel par défaut.',
+ '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',
+
);
return $lang;
diff --git a/lang/he/texts.php b/lang/he/texts.php
index 52658c6495de..7784de5f58ff 100644
--- a/lang/he/texts.php
+++ b/lang/he/texts.php
@@ -458,7 +458,7 @@ $lang = array(
'edit_token' => 'עריכת טוקן',
'delete_token' => 'מחיקת טוקן',
'token' => 'טוקן',
- 'add_gateway' => 'הוספת Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'מחיקת Gateway',
'edit_gateway' => 'עריכת Gateway',
'updated_gateway' => 'Gateway עודכן בהצלחה',
@@ -504,8 +504,8 @@ $lang = array(
'auto_wrap' => 'Auto Line Wrap',
'duplicate_post' => 'אזהרה: העמוד הקודם נשמר פעמיים, השמירה השנייה לא בוצעה',
'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' => 'חשבונית מקוונת בחינם',
+ 'app_description' => 'Invoice Ninja הוא פתרון חינמי בקוד פתוח ללקוחות חשבוניות וחיובים. עם Invoice Ninja, אתה יכול בקלות לבנות ולשלוח חשבוניות יפות מכל מכשיר שיש לו גישה לאינטרנט. הלקוחות שלך יכולים להדפיס את החשבוניות שלך, להוריד אותן כקבצי PDF, ואפילו לשלם לך באינטרנט מתוך המערכת.',
'rows' => 'שורות',
'www' => 'www',
'logo' => 'לוגו',
@@ -691,9 +691,9 @@ $lang = array(
'disable' => 'השבת',
'invoice_quote_number' => 'מספרי חשבוניות והצעות מחיר',
'invoice_charges' => 'חשבוניות חיובים נוספים',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'לא הצלחנו לספק חשבונית :invoice ל- :contact .
:error',
'notification_invoice_bounced_subject' => 'שליחת חשבונית נכשלה: חשבונית',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'לא הצלחנו לספק ציטוט :invoice ל- :contact .
:error',
'notification_quote_bounced_subject' => 'שליחת הצעת המחיר נכשלה: חשבונית',
'custom_invoice_link' => 'לינק מותאם אישית לחשבונית',
'total_invoiced' => 'סה"כ חשבוניות נשלחו',
@@ -3008,7 +3008,7 @@ $lang = array(
'hosted_login' => 'התחברות מתארח',
'selfhost_login' => 'Selfhost התחברות',
'google_login' => 'Google Login',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'תודה על הסבלנות שלך בזמן שאנו עובדים על יישום התכונות הללו.
אנו מקווים להשלים אותם בחודשים הקרובים.
עד אז נמשיך לתמוך ב',
'legacy_mobile_app' => 'אפליקציה סלולרית מדור קודם',
'today' => 'היום',
'current' => 'נוֹכְחִי',
@@ -3866,7 +3866,7 @@ $lang = array(
'cancellation_pending' => 'הביטול בהמתנה, ניצור איתך קשר!',
'list_of_payments' => 'רשימת תשלומים',
'payment_details' => 'פרטי התשלום',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'חשבוניות שייך',
'list_of_payment_methods' => 'רשימת אמצעי תשלום',
'payment_method_details' => 'פרטים על אמצעי תשלום',
'permanently_remove_payment_method' => 'הסר לצמיתות את אמצעי התשלום הזה.',
@@ -4923,7 +4923,7 @@ $lang = array(
'no_assigned_tasks' => 'אין משימות שניתנות לחיוב עבור הפרויקט הזה',
'authorization_failure' => 'אין מספיק הרשאות לביצוע פעולה זו',
'authorization_sms_failure' => 'אנא אמת את חשבונך כדי לשלוח אימיילים.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'תודה שרכשת רישיון לבן תווית.
מפתח הרישיון שלך הוא:
:license_key
אתה יכול לנהל את הרישיון שלך כאן: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'קלרנה',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'ניתן לשלם תוך :payeddue ימים נטו עד :paydate',
@@ -5088,7 +5088,7 @@ $lang = array(
'region' => 'אזור',
'county' => 'מָחוֹז',
'tax_details' => 'פרטי מס',
- 'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
+ 'activity_10_online' => ':contact ביצע תשלום :payment עבור חשבונית :invoice עבור :client',
'activity_10_manual' => ':user הזין תשלום :payment עבור חשבונית :invoice עבור :client',
'default_payment_type' => 'סוג תשלום ברירת מחדל',
'number_precision' => 'דיוק מספר',
@@ -5118,7 +5118,7 @@ $lang = array(
'set_private' => 'הגדר פרטי',
'individual' => 'אִישִׁי',
'business' => 'עֵסֶק',
- 'partnership' => 'Partnership',
+ 'partnership' => 'שׁוּתָפוּת',
'trust' => 'אמון',
'charity' => 'צדקה',
'government' => 'מֶמְשָׁלָה',
@@ -5175,66 +5175,83 @@ $lang = array(
'charges' => 'חיובים',
'email_report' => 'דוא"ל דו"ח',
'payment_type_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. Considder restarting the flow.',
- 'nordigen_handler_restart' => 'Restart flow.',
- 'nordigen_handler_return' => 'Return to application.',
- '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.
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.
: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',
- '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',
+ 'payment_type_credit' => 'אשראי מסוג תשלום',
+ 'payment_type_debit' => 'סוג תשלום חיוב',
+ 'send_emails_to' => 'שלח אימיילים אל',
+ 'primary_contact' => 'איש קשר ראשי',
+ 'all_contacts' => 'כל אנשי הקשר',
+ 'insert_below' => 'הכנס למטה',
+ 'nordigen_handler_subtitle' => 'אימות חשבון בנק. בחירת המוסד שלך להשלמת הבקשה עם אישורי החשבון שלך.',
+ 'nordigen_handler_error_heading_unknown' => 'ארעה שגיאה',
+ 'nordigen_handler_error_contents_unknown' => 'אירעה שגיאה לא ידועה! סיבה:',
+ 'nordigen_handler_error_heading_token_invalid' => 'אסימון לא חוקי',
+ 'nordigen_handler_error_contents_token_invalid' => 'האסימון שסופק היה לא חוקי. פנה לתמיכה לקבלת עזרה, אם הבעיה נמשכת.',
+ 'nordigen_handler_error_heading_account_config_invalid' => 'חסרים אישורים',
+ 'nordigen_handler_error_contents_account_config_invalid' => 'אישורים לא חוקיים או חסרים עבור נתוני חשבון בנק ללא Gocard. פנה לתמיכה לקבלת עזרה, אם הבעיה נמשכת.',
+ 'nordigen_handler_error_heading_not_available' => 'לא זמין',
+ 'nordigen_handler_error_contents_not_available' => 'התכונה לא זמינה, תוכנית ארגונית בלבד.',
+ 'nordigen_handler_error_heading_institution_invalid' => 'מוסד לא חוקי',
+ 'nordigen_handler_error_contents_institution_invalid' => 'מזהה המוסד שסופק אינו חוקי או אינו תקף עוד.',
+ 'nordigen_handler_error_heading_ref_invalid' => 'הפניה לא חוקית',
+ 'nordigen_handler_error_contents_ref_invalid' => 'GoCardless לא סיפק הפניה חוקית. אנא הפעל שוב את הזרימה ופנה לתמיכה, אם הבעיה נמשכת.',
+ 'nordigen_handler_error_heading_not_found' => 'דרישה לא חוקית',
+ 'nordigen_handler_error_contents_not_found' => 'GoCardless לא סיפק הפניה חוקית. אנא הפעל שוב את הזרימה ופנה לתמיכה, אם הבעיה נמשכת.',
+ '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_restart' => 'הפעל מחדש את הזרימה.',
+ 'nordigen_handler_return' => 'חזור ליישום.',
+ 'lang_Lao' => 'לאו',
+ 'currency_lao_kip' => 'לאו קיפ',
+ 'yodlee_regions' => 'אזורים: ארה"ב, בריטניה, אוסטרליה והודו',
+ 'nordigen_regions' => 'אזורים: אירופה ובריטניה',
+ 'select_provider' => 'בחר ספק',
+ 'nordigen_requisition_subject' => 'תוקף הדרישה פג, נא לאמת מחדש.',
+ 'nordigen_requisition_body' => 'הגישה לעדכונים של חשבון בנק פג כפי שהוגדר בהסכם משתמש הקצה.
אנא היכנס ל-Invoice Ninja ואמת מחדש עם הבנקים שלך כדי להמשיך לקבל עסקאות.',
+ 'participant' => 'מִשׁתַתֵף',
+ 'participant_name' => 'שם המשתתף',
+ 'client_unsubscribed' => 'הלקוח בוטל מנוי למיילים.',
+ 'client_unsubscribed_help' => 'לקוח :client ביטל את הרישום להודעות הדואר האלקטרוני שלך. הלקוח צריך להסכים לקבל ממך מיילים עתידיים.',
+ 'resubscribe' => 'הירשם מחדש',
+ 'subscribe' => 'הירשם',
+ 'subscribe_help' => 'אתה מנוי כרגע ותמשיך לקבל הודעות דוא"ל.',
+ 'unsubscribe_help' => 'אינך רשום כרגע, ולכן לא תקבל אימיילים בשלב זה.',
+ 'notification_purchase_order_bounced' => 'לא הצלחנו לספק הזמנת רכש :invoice ל- :contact .
:error',
+ 'notification_purchase_order_bounced_subject' => 'לא ניתן לספק הזמנת רכש :invoice',
+ 'show_pdfhtml_on_mobile' => 'הצג את גרסת ה-HTML של הישות בעת צפייה בנייד',
+ 'show_pdfhtml_on_mobile_help' => 'להדמיה משופרת, מציג גרסת HTML של החשבונית/הצעת המחיר בעת צפייה בנייד.',
+ 'please_select_an_invoice_or_credit' => 'אנא בחר חשבונית או זיכוי',
+ 'mobile_version' => 'גרסת נייד',
+ 'venmo' => 'ונמו',
+ 'my_bank' => 'הבנק שלי',
+ 'pay_later' => 'שלם מאוחר יותר',
+ 'local_domain' => 'דומיין מקומי',
+ 'verify_peer' => 'אמת את עמית',
+ 'nordigen_help' => 'הערה: חיבור חשבון דורש מפתח GoCardless/Norden API',
+ 'ar_detailed' => 'פירוט חשבונות חייבים',
+ 'ar_summary' => 'סיכום חשבונות חייבים',
+ 'client_sales' => 'מכירות לקוח',
+ 'user_sales' => 'מכירות משתמשים',
+ 'iframe_url' => 'כתובת אתר iFrame',
+ 'user_unsubscribed' => 'משתמש בוטל מנוי לדוא"ל :link',
+ 'use_available_payments' => 'השתמש בתשלומים זמינים',
+ 'test_email_sent' => 'דוא"ל נשלח בהצלחה',
+ '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',
+ 'payment_terms_help' => 'מגדיר את ברית המחדל תאריך לתשלום ',
+ 'payment_type_help' => 'הגדר כברירת מחדל manual payment type.',
+ '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',
+
);
return $lang;
diff --git a/lang/hr/texts.php b/lang/hr/texts.php
index 3541836ba370..b9f99ba8e62b 100644
--- a/lang/hr/texts.php
+++ b/lang/hr/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Uredi token',
'delete_token' => 'Obriši token',
'token' => 'Token',
- 'add_gateway' => 'Dodaj usmjernik',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Obriši usmjernik',
'edit_gateway' => 'Uredi usmjernik',
'updated_gateway' => 'Uspješno ažuriran usmjernik',
@@ -3869,7 +3869,7 @@ Nevažeći kontakt email',
'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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4926,7 +4926,7 @@ Nevažeći kontakt email',
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5121,7 +5121,7 @@ Nevažeći kontakt email',
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5202,7 +5202,7 @@ Nevažeći kontakt email',
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5222,6 +5222,38 @@ Nevažeći kontakt email',
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Sets the default invoice due date',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/hu/texts.php b/lang/hu/texts.php
index 81cd1da267fd..ab5cdcff9fd0 100644
--- a/lang/hu/texts.php
+++ b/lang/hu/texts.php
@@ -453,7 +453,7 @@ $lang = array(
'edit_token' => 'Token szerkesztése',
'delete_token' => 'Token törlése',
'token' => 'Token',
- 'add_gateway' => 'Szolgáltató hozzáadása',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Szolgáltató törlése',
'edit_gateway' => 'Szolgáltató szerkesztése',
'updated_gateway' => 'Szolgáltató sikeresen frissítve',
@@ -499,8 +499,8 @@ $lang = array(
'auto_wrap' => 'Automatikus sortörés',
'duplicate_post' => 'Kettőzött bejegyzés',
'view_documentation' => 'Dokumentáció megtekintése',
- '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' => 'Ingyenes online számlázás',
+ 'app_description' => 'Az Invoice Ninja egy ingyenes, nyílt kódú megoldás az ügyfelek számlázására és számlázására. Az Invoice Ninja segítségével könnyedén készíthet és küldhet gyönyörű számlákat bármilyen eszközről, amely hozzáfér az internethez. Ügyfelei kinyomtathatják számláit, letölthetik pdf fájlként, és akár online is fizethetnek Önnek a rendszeren belül.',
'rows' => 'sorok',
'www' => 'www',
'logo' => 'Logó',
@@ -686,9 +686,9 @@ $lang = array(
'disable' => 'Letiltás',
'invoice_quote_number' => 'Számla/Árajánlat száma',
'invoice_charges' => 'Számla díjai',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'Nem tudtuk kézbesíteni a :invoice számlát :contact címre.
:error',
'notification_invoice_bounced_subject' => 'Visszapattant számla értesítése',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'Nem tudtuk kézbesíteni a :invoice árajánlatot :contact címre.
:error',
'notification_quote_bounced_subject' => 'Visszapattant árajánlat értesítése',
'custom_invoice_link' => 'Egyedi számla link',
'total_invoiced' => 'Összes számlázott összeg',
@@ -2994,7 +2994,7 @@ adva :date',
'hosted_login' => 'Hostelt bejelentkezés',
'selfhost_login' => 'Önálló bejelentkezés',
'google_login' => 'Google bejelentkezés',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'Köszönjük türelmét, amíg ezen funkciók megvalósításán dolgozunk.
Reméljük, hogy a következő hónapokban elkészülnek velük.
Addig is továbbra is támogatjuk a',
'legacy_mobile_app' => 'Örökölt mobilalkalmazás',
'today' => 'Ma',
'current' => 'Jelenlegi',
@@ -3852,7 +3852,7 @@ adva :date',
'cancellation_pending' => 'Lemondás folyamatban',
'list_of_payments' => 'Fizetések listája',
'payment_details' => 'Fizetési részletek',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'Társított számlák',
'list_of_payment_methods' => 'Fizetési módok listája',
'payment_method_details' => 'Fizetési mód részletei',
'permanently_remove_payment_method' => 'Fizetési mód végleges eltávolítása',
@@ -4909,7 +4909,7 @@ adva :date',
'no_assigned_tasks' => 'nincsenek hozzárendelt feladatok',
'authorization_failure' => 'engedélyezési hiba',
'authorization_sms_failure' => 'engedélyezési SMS-hiba',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'Köszönjük, hogy fehér címkés licencet vásárolt.
Az Ön licenckulcsa:
:license_key
Licencét itt kezelheti: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'fizetési típus: Klarna',
'payment_type_Interac E Transfer' => 'fizetési típus: Interac E átutalás',
'xinvoice_payable' => 'XInvoice fizetendő',
@@ -5074,7 +5074,7 @@ adva :date',
'region' => 'Vidék',
'county' => 'Megye',
'tax_details' => 'Adóadatok',
- 'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
+ 'activity_10_online' => ':contact fizetett :payment :invoice :client számláért',
'activity_10_manual' => ':user beírta a :payment fizetést a :invoice számlához a :client számlához',
'default_payment_type' => 'Alapértelmezett fizetési típus',
'number_precision' => 'Számok pontossága',
@@ -5104,7 +5104,7 @@ adva :date',
'set_private' => 'Privát beállítás',
'individual' => 'Egyedi',
'business' => 'Üzleti',
- 'partnership' => 'Partnership',
+ 'partnership' => 'Partnerség',
'trust' => 'Bizalom',
'charity' => 'Adomány',
'government' => 'Kormány',
@@ -5161,66 +5161,83 @@ adva :date',
'charges' => 'Díjak',
'email_report' => 'Jelentés e-mailben',
'payment_type_Pay Later' => 'Fizess később',
- '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. Considder restarting the flow.',
- 'nordigen_handler_restart' => 'Restart flow.',
- 'nordigen_handler_return' => 'Return to application.',
+ 'payment_type_credit' => 'Fizetési típus Jóváírás',
+ 'payment_type_debit' => 'Fizetési típus Terhelés',
+ 'send_emails_to' => 'E-mailek küldése a címre',
+ 'primary_contact' => 'Elsődleges kapcsolattartó',
+ 'all_contacts' => 'Minden névjegy',
+ 'insert_below' => 'Beszúrás alább',
+ 'nordigen_handler_subtitle' => 'Bankszámla hitelesítés. Intézményének kiválasztása a kérelem kitöltéséhez a fiók hitelesítő adataival.',
+ 'nordigen_handler_error_heading_unknown' => 'Hiba történt',
+ 'nordigen_handler_error_contents_unknown' => 'Ismeretlen hiba lépett fel! Ok:',
+ 'nordigen_handler_error_heading_token_invalid' => 'Érvénytelen kód',
+ 'nordigen_handler_error_contents_token_invalid' => 'A megadott token érvénytelen. Ha a probléma továbbra is fennáll, forduljon az ügyfélszolgálathoz.',
+ 'nordigen_handler_error_heading_account_config_invalid' => 'Hiányzó hitelesítő adatok',
+ 'nordigen_handler_error_contents_account_config_invalid' => 'Érvénytelen vagy hiányzó hitelesítő adatok a Gocardless bankszámlaadatokhoz. Ha a probléma továbbra is fennáll, forduljon az ügyfélszolgálathoz.',
+ 'nordigen_handler_error_heading_not_available' => 'Nem elérhető',
+ 'nordigen_handler_error_contents_not_available' => 'A funkció nem érhető el, csak vállalati csomag.',
+ 'nordigen_handler_error_heading_institution_invalid' => 'Érvénytelen intézmény',
+ 'nordigen_handler_error_contents_institution_invalid' => 'A megadott intézményazonosító érvénytelen vagy már nem érvényes.',
+ 'nordigen_handler_error_heading_ref_invalid' => 'Érvénytelen hivatkozás',
+ 'nordigen_handler_error_contents_ref_invalid' => 'A GoCardless nem adott érvényes referenciát. Futtassa újra a folyamatot, és ha a probléma továbbra is fennáll, forduljon az ügyfélszolgálathoz.',
+ 'nordigen_handler_error_heading_not_found' => 'Érvénytelen igénylés',
+ 'nordigen_handler_error_contents_not_found' => 'A GoCardless nem adott érvényes referenciát. Futtassa újra a folyamatot, és ha a probléma továbbra is fennáll, forduljon az ügyfélszolgálathoz.',
+ 'nordigen_handler_error_heading_requisition_invalid_status' => 'Nem áll készen',
+ 'nordigen_handler_error_contents_requisition_invalid_status' => 'Túl korán hívta fel ezt az oldalt. Kérjük, fejezze be az engedélyezést, és frissítse ezt az oldalt. Ha a probléma továbbra is fennáll, forduljon az ügyfélszolgálathoz.',
+ 'nordigen_handler_error_heading_requisition_no_accounts' => 'Nincsenek kiválasztott fiókok',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
+ 'nordigen_handler_restart' => 'Folyamat újraindítása.',
+ 'nordigen_handler_return' => 'Vissza az alkalmazáshoz.',
'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.
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.
: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',
+ 'currency_lao_kip' => 'laoszi kip',
+ 'yodlee_regions' => 'Régiók: USA, Egyesült Királyság, Ausztrália és India',
+ 'nordigen_regions' => 'Régiók: Európa és az Egyesült Királyság',
+ 'select_provider' => 'Válassza a Szolgáltatót',
+ 'nordigen_requisition_subject' => 'Az igénylés lejárt, kérjük, hitelesítse újra.',
+ 'nordigen_requisition_body' => 'A bankszámla-hírcsatornákhoz való hozzáférés a végfelhasználói szerződésben meghatározottak szerint lejárt.
Kérjük, jelentkezzen be az Invoice Ninja szolgáltatásba, és hitelesítse újra bankjaival a tranzakciók fogadásához.',
+ 'participant' => 'Résztvevő',
+ 'participant_name' => 'Résztvevő neve',
+ 'client_unsubscribed' => 'Az ügyfél leiratkozott az e-mailekről.',
+ 'client_unsubscribed_help' => ':client ügyfél leiratkozott az Ön e-mailjeiről. Az ügyfélnek hozzá kell járulnia ahhoz, hogy a jövőben e-maileket kapjon Öntől.',
+ 'resubscribe' => 'Újra feliratkozás',
+ 'subscribe' => 'Iratkozz fel',
+ 'subscribe_help' => 'Jelenleg feliratkozott, és továbbra is e-mail üzeneteket fog kapni.',
+ 'unsubscribe_help' => 'Ön jelenleg nem iratkozott fel, ezért jelenleg nem fog e-maileket kapni.',
+ 'notification_purchase_order_bounced' => 'Nem tudtuk kézbesíteni a :invoice megrendelést :contact címre.
:error',
+ 'notification_purchase_order_bounced_subject' => 'Nem sikerült kézbesíteni a :invoice beszerzési rendelést',
+ 'show_pdfhtml_on_mobile' => 'Az entitás HTML-verziójának megjelenítése mobilon',
+ 'show_pdfhtml_on_mobile_help' => 'A jobb megjelenítés érdekében a számla/ajánlat HTML-változatát jeleníti meg, ha mobilon nézi.',
+ 'please_select_an_invoice_or_credit' => 'Kérjük, válasszon számlát vagy jóváírást',
+ 'mobile_version' => 'Mobil verzió',
'venmo' => 'Venmo',
'my_bank' => 'MyBank',
- 'pay_later' => 'Pay Later',
- 'local_domain' => 'Local Domain',
+ 'pay_later' => 'Fizess később',
+ 'local_domain' => 'Helyi 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',
+ 'nordigen_help' => 'Megjegyzés: egy fiók összekapcsolásához GoCardless/Nordigen API-kulcs szükséges',
+ 'ar_detailed' => 'Követelések részletes',
+ 'ar_summary' => 'Követelések összefoglalója',
+ 'client_sales' => 'Ügyfél értékesítés',
+ 'user_sales' => 'Felhasználói értékesítés',
'iframe_url' => 'iFrame URL',
- 'user_unsubscribed' => 'User unsubscribed from emails :link',
+ 'user_unsubscribed' => 'A felhasználó leiratkozott az e-mailekről :link',
+ 'use_available_payments' => 'Használja az Elérhető fizetéseket',
+ 'test_email_sent' => 'E-mail sikeresen elküldve',
+ 'gateway_type' => 'Átjáró típusa',
+ 'save_template_body' => 'Szeretné menteni ezt az importleképezést sablonként későbbi használatra?',
+ 'save_as_template' => 'Sablonleképezés mentése',
+ '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',
+ 'payment_terms_help' => 'Alapértelmezett fizetési határidő beállítása',
+ 'payment_type_help' => 'Segítség a fizetési típusokhoz',
+ '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',
+
);
return $lang;
diff --git a/lang/it/texts.php b/lang/it/texts.php
index 5161891bc11e..57ae919439b6 100644
--- a/lang/it/texts.php
+++ b/lang/it/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Modifica token',
'delete_token' => 'Elimina Token',
'token' => 'Token',
- 'add_gateway' => 'Aggiungi Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Elimina Gateway',
'edit_gateway' => 'Modifica Gateway',
'updated_gateway' => 'Piattaforma aggiornata con successo',
@@ -5192,7 +5192,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5228,6 +5228,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'Imposta la scadenza fatturapredefinita',
+ 'payment_type_help' => 'Imposta il tipo di pagamento predefinito.',
+ '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',
+
);
return $lang;
diff --git a/lang/ja/texts.php b/lang/ja/texts.php
index e91cccdee005..54800d9c46dc 100644
--- a/lang/ja/texts.php
+++ b/lang/ja/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'トークンを編集',
'delete_token' => 'トークンを削除',
'token' => 'トークン',
- 'add_gateway' => 'ゲートウェイを追加',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'ゲートウェイを削除',
'edit_gateway' => 'ゲートウェイを編集',
'updated_gateway' => 'ゲートウェイを更新しました。',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5237,6 +5237,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'Sets the default invoice due date',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
+
);
return $lang;
diff --git a/lang/km_KH/texts.php b/lang/km_KH/texts.php
index c7c501a6965c..548193b62bf3 100644
--- a/lang/km_KH/texts.php
+++ b/lang/km_KH/texts.php
@@ -453,7 +453,7 @@ $lang = array(
'edit_token' => 'កែសម្រួលនិមិត្តសញ្ញា',
'delete_token' => 'លុបថូខឹន',
'token' => 'សញ្ញាសម្ងាត់',
- 'add_gateway' => 'បន្ថែមច្រកផ្លូវ',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'លុបច្រកផ្លូវ',
'edit_gateway' => 'កែសម្រួលច្រកផ្លូវ',
'updated_gateway' => 'បានធ្វើបច្ចុប្បន្នភាពច្រកផ្លូវដោយជោគជ័យ',
@@ -5181,7 +5181,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5217,6 +5217,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'កំណត់ កាលបរិច្ឆេទកំណត់វិក្កយបត្រ លំនាំដើម',
+ 'payment_type_help' => 'កំណត់ ប្រភេទការទូទាត់ដោយដៃ លំនាំដើម។',
+ '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',
+
);
return $lang;
diff --git a/lang/lo_LA/texts.php b/lang/lo_LA/texts.php
index 01675e68f642..f9af2c86b552 100644
--- a/lang/lo_LA/texts.php
+++ b/lang/lo_LA/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'ແກ້ໄຂ Token',
'delete_token' => 'ລຶບໂທເຄັນ',
'token' => 'ໂທເຄັນ',
- 'add_gateway' => 'ເພີ່ມປະຕູ',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'ລຶບປະຕູທາງອອກ',
'edit_gateway' => 'ແກ້ໄຂປະຕູ',
'updated_gateway' => 'ປັບປຸງປະຕູທາງສຳເລັດແລ້ວ',
@@ -506,8 +506,8 @@ $lang = array(
'auto_wrap' => 'ຫໍ່ເສັ້ນອັດຕະໂນມັດ',
'duplicate_post' => 'ຄຳເຕືອນ: ໜ້າກ່ອນໜ້ານີ້ຖືກສົ່ງສອງຄັ້ງ. ການຍື່ນສະເຫນີທີສອງໄດ້ຖືກລະເລີຍ.',
'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' => 'ໃບແຈ້ງໜີ້ອອນໄລນ໌ຟຣີ',
+ 'app_description' => 'Invoice Ninja ເປັນການແກ້ໄຂລະຫັດເປີດຟຣີສໍາລັບລູກຄ້າໃບແຈ້ງໜີ້ ແລະໃບບິນ. ດ້ວຍ Invoice Ninja, ທ່ານສາມາດສ້າງ ແລະສົ່ງໃບແຈ້ງໜີ້ທີ່ສວຍງາມໄດ້ຢ່າງງ່າຍດາຍຈາກທຸກອຸປະກອນທີ່ເຂົ້າເຖິງເວັບ. ລູກຄ້າຂອງທ່ານສາມາດພິມໃບເກັບເງິນຂອງທ່ານ, ດາວນ໌ໂຫລດເປັນໄຟລ໌ pdf, ແລະເຖິງແມ່ນວ່າທ່ານຈ່າຍເງິນອອນໄລນ໌ຈາກພາຍໃນລະບົບ.',
'rows' => 'ແຖວ',
'www' => 'www',
'logo' => 'ໂລໂກ້',
@@ -693,9 +693,9 @@ $lang = array(
'disable' => 'ປິດການໃຊ້ງານ',
'invoice_quote_number' => 'ໃບເກັບເງິນ ແລະໝາຍເລກໃບສະເໜີລາຄາ',
'invoice_charges' => 'ການເກັບຄ່າເພີ່ມ',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'ພວກເຮົາບໍ່ສາມາດຈັດສົ່ງໃບແຈ້ງໜີ້ :invoice ໄປໃຫ້ :contact .
:error',
'notification_invoice_bounced_subject' => 'ບໍ່ສາມາດສົ່ງໃບແຈ້ງໜີ້: ໃບເກັບເງິນໄດ້',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'ພວກເຮົາບໍ່ສາມາດສົ່ງ Quote :invoice ຫາ :contact .
:error',
'notification_quote_bounced_subject' => 'ບໍ່ສາມາດສົ່ງ Quote : invoice',
'custom_invoice_link' => 'ລິ້ງໃບເກັບເງິນແບບກຳນົດເອງ',
'total_invoiced' => 'ໃບແຈ້ງໜີ້ທັງໝົດ',
@@ -3010,7 +3010,7 @@ $lang = array(
'hosted_login' => 'ການເຂົ້າສູ່ລະບົບທີ່ເປັນເຈົ້າພາບ',
'selfhost_login' => 'ການເຂົ້າສູ່ລະບົບດ້ວຍຕົນເອງ',
'google_login' => 'ເຂົ້າສູ່ລະບົບ Google',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'ຂອບໃຈສໍາລັບຄວາມອົດທົນຂອງທ່ານໃນຂະນະທີ່ພວກເຮົາເຮັດວຽກເພື່ອປະຕິບັດຄຸນສົມບັດເຫຼົ່ານີ້.
ພວກເຮົາຫວັງວ່າຈະໃຫ້ພວກເຂົາສໍາເລັດໃນສອງສາມເດືອນຂ້າງຫນ້າ.
ຈົນກ່ວານັ້ນ, ພວກເຮົາຈະສືບຕໍ່ສະຫນັບສະຫນູນ',
'legacy_mobile_app' => 'ແອັບຯມືຖືແບບເກົ່າ',
'today' => 'ມື້ນີ້',
'current' => 'ປະຈຸບັນ',
@@ -3868,7 +3868,7 @@ $lang = array(
'cancellation_pending' => 'ລໍຖ້າການຍົກເລີກ, ພວກເຮົາຈະຕິດຕໍ່ຫາ!',
'list_of_payments' => 'ລາຍຊື່ການຈ່າຍເງິນ',
'payment_details' => 'ລາຍລະອຽດຂອງການຈ່າຍເງິນ',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'ໃບແຈ້ງໜີ້ທີ່ກ່ຽວຂ້ອງ',
'list_of_payment_methods' => 'ລາຍຊື່ວິທີຈ່າຍເງິນ',
'payment_method_details' => 'ລາຍລະອຽດຂອງວິທີການຊໍາລະ',
'permanently_remove_payment_method' => 'ລຶບວິທີການຈ່າຍເງິນນີ້ອອກຖາວອນ.',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'ບໍ່ມີໜ້າວຽກທີ່ສາມາດເກັບເງິນໄດ້ສຳລັບໂຄງການນີ້',
'authorization_failure' => 'ການອະນຸຍາດບໍ່ພຽງພໍເພື່ອປະຕິບັດການນີ້',
'authorization_sms_failure' => 'ກະລຸນາກວດສອບບັນຊີຂອງທ່ານເພື່ອສົ່ງອີເມວ.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'ຂໍຂອບໃຈທ່ານສໍາລັບການຊື້ໃບອະນຸຍາດປ້າຍສີຂາວ.
ກະແຈໃບອະນຸຍາດຂອງທ່ານແມ່ນ:
:license_key
ທ່ານສາມາດຈັດການໃບອະນຸຍາດຂອງທ່ານໄດ້ທີ່ນີ້: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'ຄລານາ',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'ຊໍາລະພາຍໃນ: payeddue ວັນສຸດທິຈົນກ່ວາ: paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'ຕັ້ງເປັນສ່ວນຕົວ',
'individual' => 'ບຸກຄົນ',
'business' => 'ທຸລະກິດ',
- 'partnership' => 'Partnership',
+ 'partnership' => 'ຫຸ້ນສ່ວນ',
'trust' => 'ຄວາມໄວ້ວາງໃຈ',
'charity' => 'ການກຸສົນ',
'government' => 'ລັດຖະບານ',
@@ -5201,42 +5201,59 @@ $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' => 'ການບໍລິການບໍ່ໄດ້ສົ່ງຄືນບັນຊີທີ່ຖືກຕ້ອງໃດໆ. ພິຈາລະນາເລີ່ມການໄຫຼເຂົ້າໃໝ່.',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
'nordigen_handler_restart' => 'ເລີ່ມການໄຫຼເຂົ້າໃໝ່.',
'nordigen_handler_return' => 'ກັບຄືນໄປຫາແອັບພລິເຄຊັນ.',
'lang_Lao' => 'ລາວ',
'currency_lao_kip' => 'ລາວກີບ',
- 'yodlee_regions' => 'Regions: USA, UK, Australia & India',
- 'nordigen_regions' => 'Regions: Europe & UK',
+ 'yodlee_regions' => 'ພາກພື້ນ: ສະຫະລັດ, ອັງກິດ, ອົດສະຕາລີ & ອິນເດຍ',
+ 'nordigen_regions' => 'ພາກພື້ນ: ເອີຣົບ & ອັງກິດ',
'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.
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.
: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',
+ 'nordigen_requisition_subject' => 'ການຮ້ອງຂໍໝົດອາຍຸແລ້ວ, ກະລຸນາຢັ້ງຢືນຄືນໃໝ່.',
+ 'nordigen_requisition_body' => 'ການເຂົ້າເຖິງຟີດບັນຊີທະນາຄານໝົດອາຍຸຕາມທີ່ກຳນົດໄວ້ໃນຂໍ້ຕົກລົງຜູ້ໃຊ້ສຸດທ້າຍ.
ກະລຸນາເຂົ້າສູ່ລະບົບ Invoice Ninja ແລະຢືນຢັນຄືນໃໝ່ກັບທະນາຄານຂອງທ່ານເພື່ອສືບຕໍ່ຮັບທຸລະກຳ.',
+ 'participant' => 'ຜູ້ເຂົ້າຮ່ວມ',
+ 'participant_name' => 'ຊື່ຜູ້ເຂົ້າຮ່ວມ',
+ 'client_unsubscribed' => 'ລູກຄ້າເຊົາຕິດຕາມອີເມວແລ້ວ.',
+ 'client_unsubscribed_help' => 'ລູກຄ້າ :client ໄດ້ເຊົາຕິດຕາມອີເມວຂອງເຈົ້າແລ້ວ. ລູກຄ້າຕ້ອງການຍິນຍອມເພື່ອຮັບອີເມວໃນອະນາຄົດຈາກທ່ານ.',
+ 'resubscribe' => 'ສະໝັກໃໝ່',
+ 'subscribe' => 'ຈອງ',
+ 'subscribe_help' => 'ປະຈຸບັນທ່ານສະໝັກສະມາຊິກ ແລະຈະສືບຕໍ່ໄດ້ຮັບການຕິດຕໍ່ທາງອີເມລ໌.',
+ 'unsubscribe_help' => 'ໃນປັດຈຸບັນທ່ານຍັງບໍ່ໄດ້ສະຫມັກ, ແລະດັ່ງນັ້ນ, ຈະບໍ່ໄດ້ຮັບອີເມລ໌ໃນເວລານີ້.',
+ 'notification_purchase_order_bounced' => 'ພວກເຮົາບໍ່ສາມາດຈັດສົ່ງຄຳສັ່ງຊື້ :invoice ຫາ :contact .
:error',
+ 'notification_purchase_order_bounced_subject' => 'ບໍ່ສາມາດຈັດສົ່ງຄໍາສັ່ງສັ່ງຊື້ :invoice',
+ 'show_pdfhtml_on_mobile' => 'ສະແດງສະບັບ HTML ຂອງນິຕິບຸກຄົນໃນເວລາເບິ່ງໃນມືຖື',
+ 'show_pdfhtml_on_mobile_help' => 'ສໍາລັບການປັບປຸງການເບິ່ງເຫັນ, ສະແດງສະບັບ HTML ຂອງໃບແຈ້ງຫນີ້ / ວົງຢືມໃນເວລາເບິ່ງໃນມືຖື.',
+ 'please_select_an_invoice_or_credit' => 'ກະລຸນາເລືອກໃບແຈ້ງໜີ້ ຫຼືສິນເຊື່ອ',
+ 'mobile_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' => 'ຈ່າຍພາຍຫຼັງ',
+ 'local_domain' => 'ໂດເມນທ້ອງຖິ່ນ',
+ 'verify_peer' => 'ຢືນຢັນຄູ່',
+ 'nordigen_help' => 'ໝາຍເຫດ: ການເຊື່ອມຕໍ່ບັນຊີຕ້ອງການລະຫັດ GoCardless/Nordigen API',
+ 'ar_detailed' => 'ລາຍລະອຽດບັນຊີທີ່ຮັບໄດ້',
+ 'ar_summary' => 'ສະຫຼຸບບັນຊີຮັບ',
+ 'client_sales' => 'ການຂາຍລູກຄ້າ',
+ 'user_sales' => 'ການຂາຍຜູ້ໃຊ້',
'iframe_url' => 'iFrame URL',
- 'user_unsubscribed' => 'User unsubscribed from emails :link',
+ 'user_unsubscribed' => 'ຜູ້ໃຊ້ເຊົາຕິດຕາມອີເມວ :link',
+ 'use_available_payments' => 'ໃຊ້ການຈ່າຍເງິນທີ່ມີຢູ່',
+ 'test_email_sent' => 'ສົ່ງອີເມວສຳເລັດແລ້ວ',
+ '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',
+ 'payment_terms_help' => 'ກຳນົດຄ່າເລີ່ມຕົ້ນ ວັນທີຄົບກຳນົດໃບແຈ້ງໜີ້',
+ 'payment_type_help' => 'ຕັ້ງ ປະເພດການຈ່າຍເງິນດ້ວຍມື ເລີ່ມຕົ້ນ.',
+ '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',
+
);
return $lang;
diff --git a/lang/lt/texts.php b/lang/lt/texts.php
index cfdbf49a7d0a..e37511eae7ed 100644
--- a/lang/lt/texts.php
+++ b/lang/lt/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Edit Token',
'delete_token' => 'Delete Token',
'token' => 'Token',
- 'add_gateway' => 'Add Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Delete Gateway',
'edit_gateway' => 'Edit Gateway',
'updated_gateway' => 'Successfully updated gateway',
@@ -3868,7 +3868,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Nustato pagal nutylėjimą sąskaitos terminas',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/lv_LV/texts.php b/lang/lv_LV/texts.php
index b1a039c5f60d..d516957a466e 100644
--- a/lang/lv_LV/texts.php
+++ b/lang/lv_LV/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Edit Token',
'delete_token' => 'Delete Token',
'token' => 'Token',
- 'add_gateway' => 'Add Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Delete Gateway',
'edit_gateway' => 'Edit Gateway',
'updated_gateway' => 'Successfully updated gateway',
@@ -3868,7 +3868,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Sets the default invoice due date',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/mk_MK/texts.php b/lang/mk_MK/texts.php
index 72e690453e76..fb3e46001d08 100644
--- a/lang/mk_MK/texts.php
+++ b/lang/mk_MK/texts.php
@@ -461,7 +461,7 @@ $lang = array(
'edit_token' => 'Измени токен',
'delete_token' => 'Избриши токен',
'token' => 'Токен',
- 'add_gateway' => 'Додади Платен портал',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Избриши Платен портал',
'edit_gateway' => 'Уреди Платен портал',
'updated_gateway' => 'Успешно ажурирање на платен портал',
@@ -3869,7 +3869,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4926,7 +4926,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5121,7 +5121,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5202,7 +5202,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5222,6 +5222,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Го поставува стандардниот датум на достасување на фактура ',
+ 'payment_type_help' => 'Постави стандарден тип на рачно плаќање ',
+ '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',
);
diff --git a/lang/nb_NO/texts.php b/lang/nb_NO/texts.php
index 04795573c679..22fab897421f 100644
--- a/lang/nb_NO/texts.php
+++ b/lang/nb_NO/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Rediger Token',
'delete_token' => 'Slett Token',
'token' => 'Token',
- 'add_gateway' => 'Legg til Tilbyder',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Slett Tilbyder',
'edit_gateway' => 'Rediger Tilbyder',
'updated_gateway' => 'Suksessfullt oppdatert tilbyder',
@@ -3868,7 +3868,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Angir standard fakturaforfall',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/nl/texts.php b/lang/nl/texts.php
index 49b89598c2da..822aeb33bce8 100644
--- a/lang/nl/texts.php
+++ b/lang/nl/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Wijzig token',
'delete_token' => 'Verwijder token',
'token' => 'Token',
- 'add_gateway' => 'Gateway toevoegen',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Gateway verwijderen',
'edit_gateway' => 'Wijzig gateway',
'updated_gateway' => 'De gateway is gewijzigd',
@@ -506,8 +506,8 @@ $lang = array(
'auto_wrap' => 'Automatisch regel afbreken',
'duplicate_post' => 'Opgelet: de volgende pagina is twee keer doorgestuurd. De tweede verzending is genegeerd.',
'view_documentation' => 'Bekijk documentatie',
- '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 facturering',
+ 'app_description' => 'Invoice Ninja is een gratis, open-code oplossing voor facturatie- en factureringsklanten. Met Invoice Ninja kunt u eenvoudig prachtige facturen maken en verzenden vanaf elk apparaat dat toegang heeft tot internet. Uw klanten kunnen uw facturen afdrukken, downloaden als pdf-bestanden en u zelfs online betalen vanuit het systeem.',
'rows' => 'rijen',
'www' => 'www',
'logo' => 'Logo',
@@ -693,9 +693,9 @@ $lang = array(
'disable' => 'Uitzetten',
'invoice_quote_number' => 'Factuur- en offertenummers',
'invoice_charges' => 'Facturatiekosten',
- 'notification_invoice_bounced' => 'We were unable to deliver Invoice :invoice to :contact.
:error',
+ 'notification_invoice_bounced' => 'We konden factuur :invoice niet leveren aan :contact .
:error',
'notification_invoice_bounced_subject' => 'Factuur :invoice kon niet worden afgeleverd',
- 'notification_quote_bounced' => 'We were unable to deliver Quote :invoice to :contact.
:error',
+ 'notification_quote_bounced' => 'We konden Quote :invoice niet leveren aan :contact .
:error',
'notification_quote_bounced_subject' => 'Offerte :invoice kon niet worden afgeleverd',
'custom_invoice_link' => 'Eigen factuurlink',
'total_invoiced' => 'Totaal gefactureerd',
@@ -3007,7 +3007,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'hosted_login' => 'Hosted login',
'selfhost_login' => 'Self-Host login',
'google_login' => 'Google Login',
- 'thanks_for_patience' => 'Thank for your patience while we work to implement these features.
We hope to have them completed in the next few months.
Until then we\'ll continue to support the',
+ 'thanks_for_patience' => 'Bedankt voor uw geduld terwijl we werken aan de implementatie van deze functies.
We hopen ze in de komende maanden af te ronden.
Tot die tijd blijven wij de stichting steunen',
'legacy_mobile_app' => 'oude mobiele app',
'today' => 'Vandaag',
'current' => 'Huidige',
@@ -3865,7 +3865,7 @@ Kom terug naar deze betalingsmethode pagina zodra u de bedragen heeft ontvangen
'cancellation_pending' => 'Annulatie in aanvraag, we nemen contact met u op!',
'list_of_payments' => 'Lijst met betalingen',
'payment_details' => 'Details van de betaling',
- 'list_of_payment_invoices' => 'Associate invoices',
+ 'list_of_payment_invoices' => 'Facturen koppelen',
'list_of_payment_methods' => 'Lijst met betalingsmethodes',
'payment_method_details' => 'Details van betalingsmethodes',
'permanently_remove_payment_method' => 'Verwijder deze betalingsmethode definitief',
@@ -4925,7 +4925,7 @@ Email: :email
',
'no_assigned_tasks' => 'Geen factureerbare taken voor dit project',
'authorization_failure' => 'Onvoldoende machtigingen om deze actie uit te voeren',
'authorization_sms_failure' => 'Verifieer uw account om e-mails te verzenden.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
+ 'white_label_body' => 'Bedankt voor het aanschaffen van een white label-licentie.
Uw licentiesleutel is:
:license_key
U kunt uw licentie hier beheren: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E-overdracht',
'xinvoice_payable' => 'Te betalen binnen :payeddue vervaldagen netto tot :paydate',
@@ -5090,7 +5090,7 @@ Email: :email
',
'region' => 'Regio',
'county' => 'District',
'tax_details' => 'Belastinggegevens',
- 'activity_10_online' => ':contact made payment :payment for invoice :invoice for :client',
+ 'activity_10_online' => ':contact heeft betaling uitgevoerd :payment voor factuur :invoice voor :client',
'activity_10_manual' => ':user ingevoerde betaling :payment voor factuur :invoice voor :client',
'default_payment_type' => 'Standaard betalingstype',
'number_precision' => 'Cijferprecisie',
@@ -5120,7 +5120,7 @@ Email: :email
',
'set_private' => 'Privé instellen',
'individual' => 'Individueel',
'business' => 'Bedrijf',
- 'partnership' => 'Partnership',
+ 'partnership' => 'Vennootschap',
'trust' => 'Vertrouwen',
'charity' => 'Goed doel',
'government' => 'Regering',
@@ -5177,66 +5177,83 @@ Email: :email
',
'charges' => 'Kosten',
'email_report' => 'E-mailrapport',
'payment_type_Pay Later' => 'Betaal 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. Considder restarting the flow.',
- 'nordigen_handler_restart' => 'Restart flow.',
- 'nordigen_handler_return' => 'Return to application.',
- '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.
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.
: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',
+ 'payment_type_credit' => 'Betalingstype Krediet',
+ 'payment_type_debit' => 'Betalingswijze Debet',
+ 'send_emails_to' => 'Stuur e-mails naar',
+ 'primary_contact' => 'Primaire contactpersoon',
+ 'all_contacts' => 'Alle contacten',
+ 'insert_below' => 'Vul hieronder in',
+ 'nordigen_handler_subtitle' => 'Authenticatie van bankrekening. Selecteer uw instelling om het verzoek te voltooien met uw accountgegevens.',
+ 'nordigen_handler_error_heading_unknown' => 'Er is een fout opgetreden',
+ 'nordigen_handler_error_contents_unknown' => 'Er is een onbekende fout opgetreden! Reden:',
+ 'nordigen_handler_error_heading_token_invalid' => 'Ongeldige Token',
+ 'nordigen_handler_error_contents_token_invalid' => 'Het opgegeven token was ongeldig. Neem contact op met de ondersteuning voor hulp als dit probleem zich blijft voordoen.',
+ 'nordigen_handler_error_heading_account_config_invalid' => 'Ontbrekende inloggegevens',
+ 'nordigen_handler_error_contents_account_config_invalid' => 'Ongeldige of ontbrekende inloggegevens voor Gocardless-bankrekeninggegevens. Neem contact op met de ondersteuning voor hulp als dit probleem zich blijft voordoen.',
+ 'nordigen_handler_error_heading_not_available' => 'Niet beschikbaar',
+ 'nordigen_handler_error_contents_not_available' => 'Functie niet beschikbaar, alleen ondernemingsplan.',
+ 'nordigen_handler_error_heading_institution_invalid' => 'Ongeldige instelling',
+ 'nordigen_handler_error_contents_institution_invalid' => 'Het opgegeven instellings-ID is ongeldig of niet meer geldig.',
+ 'nordigen_handler_error_heading_ref_invalid' => 'Ongeldige referentie',
+ 'nordigen_handler_error_contents_ref_invalid' => 'GoCardless heeft geen geldige referentie opgegeven. Voer de stroom opnieuw uit en neem contact op met de ondersteuning als dit probleem zich blijft voordoen.',
+ 'nordigen_handler_error_heading_not_found' => 'Ongeldige aanvraag',
+ 'nordigen_handler_error_contents_not_found' => 'GoCardless heeft geen geldige referentie opgegeven. Voer de stroom opnieuw uit en neem contact op met de ondersteuning als dit probleem zich blijft voordoen.',
+ 'nordigen_handler_error_heading_requisition_invalid_status' => 'Niet klaar',
+ 'nordigen_handler_error_contents_requisition_invalid_status' => 'Je hebt deze site te vroeg gebeld. Voltooi de autorisatie en vernieuw deze pagina. Neem contact op met de ondersteuning voor hulp als dit probleem zich blijft voordoen.',
+ 'nordigen_handler_error_heading_requisition_no_accounts' => 'Geen accounts geselecteerd',
+ 'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Consider restarting the flow.',
+ 'nordigen_handler_restart' => 'Start de stroom opnieuw.',
+ 'nordigen_handler_return' => 'Terug naar applicatie.',
+ 'lang_Lao' => 'Laos',
+ 'currency_lao_kip' => 'Laotiaanse kip',
+ 'yodlee_regions' => 'Regio's: VS, VK, Australië en India',
+ 'nordigen_regions' => 'Regio's: Europa en VK',
+ 'select_provider' => 'Selecteer Aanbieder',
+ 'nordigen_requisition_subject' => 'Aanvraag is verlopen. Authenticeer opnieuw.',
+ 'nordigen_requisition_body' => 'De toegang tot bankrekeningfeeds is verlopen zoals vastgelegd in de Eindgebruikersovereenkomst.
Meld u aan bij Invoice Ninja en authenticeer opnieuw bij uw banken om transacties te blijven ontvangen.',
+ 'participant' => 'Deelnemer',
+ 'participant_name' => 'Naam deelnemer',
+ 'client_unsubscribed' => 'Klant heeft zich afgemeld voor e-mails.',
+ 'client_unsubscribed_help' => 'Klant :client heeft zich afgemeld voor uw e-mails. De klant moet toestemming geven om toekomstige e-mails van u te ontvangen.',
+ 'resubscribe' => 'Opnieuw abonneren',
+ 'subscribe' => 'Abonneren',
+ 'subscribe_help' => 'U bent momenteel geabonneerd en zult e-mailcommunicatie blijven ontvangen.',
+ 'unsubscribe_help' => 'U bent momenteel niet geabonneerd en ontvangt daarom op dit moment geen e-mails.',
+ 'notification_purchase_order_bounced' => 'We kunnen inkooporder :invoice niet leveren aan :contact .
:error',
+ 'notification_purchase_order_bounced_subject' => 'Kan inkooporder :invoice niet leveren',
+ 'show_pdfhtml_on_mobile' => 'Geef de HTML-versie van de entiteit weer bij weergave op mobiel',
+ 'show_pdfhtml_on_mobile_help' => 'Voor een betere visualisatie wordt een HTML-versie van de factuur/offerte weergegeven wanneer deze op mobiel wordt bekeken.',
+ 'please_select_an_invoice_or_credit' => 'Selecteer een factuur of tegoed',
+ 'mobile_version' => 'Mobiele versie',
'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',
+ 'my_bank' => 'Mijn bank',
+ 'pay_later' => 'Betaal later',
+ 'local_domain' => 'Lokaal domein',
+ 'verify_peer' => 'Verifieer peer',
+ 'nordigen_help' => 'Let op: voor het koppelen van een account is een GoCardless/Nordigen API-sleutel vereist',
+ 'ar_detailed' => 'Debiteuren gedetailleerd',
+ 'ar_summary' => 'Overzicht debiteuren',
+ 'client_sales' => 'Verkoop van klanten',
+ 'user_sales' => 'Gebruikersverkoop',
+ 'iframe_url' => 'iFrame-URL',
+ 'user_unsubscribed' => 'Gebruiker heeft zich afgemeld voor e-mails :link',
+ 'use_available_payments' => 'Gebruik beschikbare betalingen',
+ 'test_email_sent' => 'E-mail succesvol verzonden',
+ 'gateway_type' => 'Gatewaytype',
+ 'save_template_body' => 'Wilt u deze importtoewijzing opslaan als sjabloon voor toekomstig gebruik?',
+ 'save_as_template' => 'Sjabloontoewijzing opslaan',
+ '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',
+ 'payment_terms_help' => 'Stel de standaard factuurvervaldatum in.',
+ 'payment_type_help' => 'Stel de standaard manuele betalingsmethode in.',
+ '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',
+
);
return $lang;
diff --git a/lang/pl/texts.php b/lang/pl/texts.php
index 4db2dab2df10..9e41e03dd1e8 100644
--- a/lang/pl/texts.php
+++ b/lang/pl/texts.php
@@ -458,7 +458,7 @@ Przykłady dynamicznych zmiennych:
'edit_token' => 'Edytuj token',
'delete_token' => 'Usuń token',
'token' => 'Token',
- 'add_gateway' => 'Dodaj dostawcę płatności',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Usuń dostawcę płatności',
'edit_gateway' => 'Edytuj dostawcę płatności',
'updated_gateway' => 'Dostawca płatności został zaktualizowany.',
@@ -5199,7 +5199,7 @@ Gdy przelewy zostaną zaksięgowane na Twoim koncie, wróć do tej strony i klik
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5235,6 +5235,23 @@ Gdy przelewy zostaną zaksięgowane na Twoim koncie, wróć do tej strony i klik
'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',
+ 'payment_terms_help' => 'Ustaw domyślny termin zapłaty faktury',
+ 'payment_type_help' => 'Ustaw jako domyślny rodzaj płatności',
+ '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',
+
);
return $lang;
diff --git a/lang/pt_BR/texts.php b/lang/pt_BR/texts.php
index 3c2ef7ce4906..e282ea1cb492 100644
--- a/lang/pt_BR/texts.php
+++ b/lang/pt_BR/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Editar Token',
'delete_token' => 'Excluir Token',
'token' => 'Token',
- 'add_gateway' => 'Adicionar Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Excluir Gateway',
'edit_gateway' => 'Editar Gateway',
'updated_gateway' => 'Gateway atualizado com sucesso',
@@ -5198,7 +5198,7 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5234,6 +5234,23 @@ Quando tiver as quantias, volte a esta página de formas de pagamento e clique "
'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',
+ 'payment_terms_help' => 'Define a data de vencimento padrão da fatura',
+ 'payment_type_help' => 'Define o tipo de pagamento manual padrão.',
+ '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',
+
);
return $lang;
diff --git a/lang/pt_PT/texts.php b/lang/pt_PT/texts.php
index b64f874782a7..27924519e8bc 100644
--- a/lang/pt_PT/texts.php
+++ b/lang/pt_PT/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Editar Símbolo',
'delete_token' => 'Apagar Símbolo',
'token' => 'Símbolo',
- 'add_gateway' => 'Adicionar Terminal',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Apagar Terminal',
'edit_gateway' => 'Editar Terminal',
'updated_gateway' => 'Terminal atualizado',
@@ -5201,7 +5201,7 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5237,6 +5237,23 @@ O envio de E-mails foi suspenso. Será retomado às 23:00 UTC.',
'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',
+ 'payment_terms_help' => 'Definir data de vencimento padrão ',
+ 'payment_type_help' => 'Definir como padrão Tipo de pagamento manual.',
+ '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',
+
);
return $lang;
diff --git a/lang/ro/texts.php b/lang/ro/texts.php
index 98419a4861e6..687e16dc7ca9 100644
--- a/lang/ro/texts.php
+++ b/lang/ro/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Modifica token',
'delete_token' => 'Șterge Token',
'token' => 'Token',
- 'add_gateway' => 'Adaugă Gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Șterge Gateway',
'edit_gateway' => 'Modifică Gateway',
'updated_gateway' => 'Gateway actualizat',
@@ -5202,7 +5202,7 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5238,6 +5238,23 @@ Odată ce sumele au ajuns la dumneavoastră, reveniți la pagina cu metode de pl
'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',
+ 'payment_terms_help' => 'Setați invoice due date implicită',
+ 'payment_type_help' => 'Setează tipul de plată manual implicit.',
+ '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',
+
);
return $lang;
diff --git a/lang/ru_RU/texts.php b/lang/ru_RU/texts.php
index 185351838ebc..91aecb736390 100644
--- a/lang/ru_RU/texts.php
+++ b/lang/ru_RU/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Изменить права',
'delete_token' => 'Удалить права',
'token' => 'Права',
- 'add_gateway' => 'Добавить платёжный шлюз',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Удалить платежный шлюз',
'edit_gateway' => 'Изменить платёжный шлюз',
'updated_gateway' => 'Платёжный шлюз успешно обновлён',
@@ -3869,7 +3869,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4926,7 +4926,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5121,7 +5121,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5202,7 +5202,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5222,6 +5222,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Устанавливает дату выставления счета по умолчанию',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/sk/texts.php b/lang/sk/texts.php
index 47f41dd49fa0..c6f611f971af 100644
--- a/lang/sk/texts.php
+++ b/lang/sk/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Upraviť token',
'delete_token' => 'Zmazať token',
'token' => 'Token',
- 'add_gateway' => 'Pridať bránu',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Odstrániť bránu',
'edit_gateway' => 'Upraviť bránu',
'updated_gateway' => 'Brána úspešne upravená',
@@ -5188,7 +5188,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5224,6 +5224,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => 'Nastavuje predvolený dátum splatnosti ',
+ 'payment_type_help' => 'Nastaví predvolený manuálny typ platby.',
+ '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',
+
);
return $lang;
diff --git a/lang/sl/texts.php b/lang/sl/texts.php
index e18aff446639..1b7fb9ad2e1c 100644
--- a/lang/sl/texts.php
+++ b/lang/sl/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Uredi žeton',
'delete_token' => 'Odstrani žeton',
'token' => 'Žeton',
- 'add_gateway' => 'Dodaj prehod',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Odstrani prehod',
'edit_gateway' => 'Uredi prehod',
'updated_gateway' => 'Prehod uspešno obnovljen',
@@ -3869,7 +3869,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4926,7 +4926,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5121,7 +5121,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5202,7 +5202,7 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5222,6 +5222,38 @@ Ko imate zneske, se vrnite na to stran plačilnega sredstva in kliknite na "Comp
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Privzeto bo izbran ta rok plačila.',
+ 'payment_type_help' => 'Privzeto bo izbran ta način ročnega plačila.',
+ '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',
);
diff --git a/lang/sq/texts.php b/lang/sq/texts.php
index a9f5f71fcd9e..140633365e0c 100644
--- a/lang/sq/texts.php
+++ b/lang/sq/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Edito Tokenin',
'delete_token' => 'Fshi Tokenin',
'token' => 'Token',
- 'add_gateway' => 'Shto kanalin e pagesës',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Fshi kanalin e pagesës',
'edit_gateway' => 'Edito kanalin e pagesës',
'updated_gateway' => 'Kanali i pagesës është perditesuar me sukses',
@@ -3869,7 +3869,7 @@ Pasi të keni pranuar shumat, kthehuni në faqen e metodave të pagesës dhe kli
'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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4926,7 +4926,7 @@ Pasi të keni pranuar shumat, kthehuni në faqen e metodave të pagesës dhe kli
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5121,7 +5121,7 @@ Pasi të keni pranuar shumat, kthehuni në faqen e metodave të pagesës dhe kli
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5202,7 +5202,7 @@ Pasi të keni pranuar shumat, kthehuni në faqen e metodave të pagesës dhe kli
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5222,6 +5222,38 @@ Pasi të keni pranuar shumat, kthehuni në faqen e metodave të pagesës dhe kli
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Sets the default invoice due date',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/sr/texts.php b/lang/sr/texts.php
index 9a6d73bb8619..d2d5cdb6324d 100644
--- a/lang/sr/texts.php
+++ b/lang/sr/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Izmeni token',
'delete_token' => 'Obriši token',
'token' => 'Token',
- 'add_gateway' => 'Dodaj kanal plaćanja',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Obriši kanal plaćanja',
'edit_gateway' => 'Uredi kanal plaćanja',
'updated_gateway' => 'Uspešno ažuriran kanal',
@@ -5201,7 +5201,7 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5237,6 +5237,23 @@ Kada budete imali iznose, vratite se na ovu stranicu sa načinima plaćanja i k
'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',
+ 'payment_terms_help' => 'Podesi podrazumevani datum dospeća računa',
+ 'payment_type_help' => 'Postavlja podrazumevaniručni način plaćanja.',
+ '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',
+
);
return $lang;
diff --git a/lang/sv/texts.php b/lang/sv/texts.php
index 46d114e622eb..6bacb054ee12 100644
--- a/lang/sv/texts.php
+++ b/lang/sv/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Ändra token',
'delete_token' => 'Ta bort token',
'token' => 'Token',
- 'add_gateway' => 'Lägg till gateway',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Ta bort gateway',
'edit_gateway' => 'Ändra gateway',
'updated_gateway' => 'Gateway uppdaterad',
@@ -5209,7 +5209,7 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5245,6 +5245,23 @@ Den här funktionen kräver att en produkt skapas och en betalningsgateway är k
'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',
+ 'payment_terms_help' => 'Ställ in standard faktura förfallodatum',
+ 'payment_type_help' => 'Sätt standard betalsätt.',
+ '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',
+
);
return $lang;
diff --git a/lang/th/texts.php b/lang/th/texts.php
index 09b7fcefbc62..a5f3188567af 100644
--- a/lang/th/texts.php
+++ b/lang/th/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'แก้ไข Token',
'delete_token' => 'ลบ Token',
'token' => 'Token',
- 'add_gateway' => 'เพิ่มช่องทางการชำระเงิน',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'ลบช่องทางการชำระเงิน',
'edit_gateway' => 'แก้ไขช่องทางการชำระเงิน',
'updated_gateway' => 'อัปเดทช่องทางการชำระเงินเรียบร้อย',
@@ -3869,7 +3869,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4926,7 +4926,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5121,7 +5121,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5202,7 +5202,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5222,6 +5222,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'ตั้งค่าเริ่มต้นวันครบกำหนดของใบแจ้งหนี้',
+ 'payment_type_help' => 'ตั้งค่าเริ่มต้น ประเภทการชำระเงินด้วยตนเอง.',
+ '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',
);
diff --git a/lang/tr_TR/texts.php b/lang/tr_TR/texts.php
index a1b2d80083e5..c64ff1cee7cf 100644
--- a/lang/tr_TR/texts.php
+++ b/lang/tr_TR/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => 'Token düzenle',
'delete_token' => 'Token Sil',
'token' => 'Token',
- 'add_gateway' => 'Ödeme Sistemi Ekle',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => 'Ödeme Sistemi Sil',
'edit_gateway' => 'Ödeme Sistemi Düzenle',
'updated_gateway' => 'Ödeme Sistemi başarıyla güncellendi',
@@ -3868,7 +3868,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' => 'List of invoices affected by the payment',
+ 'list_of_payment_invoices' => 'Associate invoices',
'list_of_payment_methods' => 'List of payment methods',
'payment_method_details' => 'Details of payment method',
'permanently_remove_payment_method' => 'Permanently remove this payment method.',
@@ -4925,7 +4925,7 @@ $lang = array(
'no_assigned_tasks' => 'No billable tasks for this project',
'authorization_failure' => 'Insufficient permissions to perform this action',
'authorization_sms_failure' => 'Please verify your account to send emails.',
- 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key',
+ 'white_label_body' => 'Thank you for purchasing a white label license.
Your license key is:
:license_key
You can manage your license here: https://invoiceninja.invoicing.co/client/login',
'payment_type_Klarna' => 'Klarna',
'payment_type_Interac E Transfer' => 'Interac E Transfer',
'xinvoice_payable' => 'Payable within :payeddue days net until :paydate',
@@ -5120,7 +5120,7 @@ $lang = array(
'set_private' => 'Set private',
'individual' => 'Individual',
'business' => 'Business',
- 'partnership' => 'partnership',
+ 'partnership' => 'Partnership',
'trust' => 'Trust',
'charity' => 'Charity',
'government' => 'Government',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5221,6 +5221,38 @@ $lang = array(
'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.
: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',
+ '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',
+ 'payment_terms_help' => 'Varsayılan fatura ödeme tarihini ayarlar',
+ 'payment_type_help' => 'Sets the default manual payment type.',
+ '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',
);
diff --git a/lang/zh_TW/texts.php b/lang/zh_TW/texts.php
index e35d3f1125a7..66367ad3a9f1 100644
--- a/lang/zh_TW/texts.php
+++ b/lang/zh_TW/texts.php
@@ -460,7 +460,7 @@ $lang = array(
'edit_token' => '編輯安全代碼',
'delete_token' => '刪除安全代碼',
'token' => '安全代碼',
- 'add_gateway' => '新增閘道',
+ 'add_gateway' => 'Add Payment Gateway',
'delete_gateway' => '刪除閘道資料',
'edit_gateway' => '編輯閘道',
'updated_gateway' => '更新閘道資料成功',
@@ -5201,7 +5201,7 @@ $lang = array(
'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. Considder restarting the flow.',
+ '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.',
'lang_Lao' => 'Lao',
@@ -5237,6 +5237,23 @@ $lang = array(
'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',
+ 'payment_terms_help' => '設定預設的 發票日期',
+ 'payment_type_help' => '設定預設的人工付款方式。',
+ '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',
+
);
return $lang;
diff --git a/openapi/api-docs.yaml b/openapi/api-docs.yaml
index 3ebcf8377e78..3d95b07ea714 100644
--- a/openapi/api-docs.yaml
+++ b/openapi/api-docs.yaml
@@ -1,6 +1,6 @@
openapi: 3.0.0
info:
- title: 'Invoice Ninja API Reference - Where self host invoicing lives.'
+ title: 'Invoice Ninja API Reference.'
description: |
---
@@ -15,7 +15,7 @@ info:
license:
name: 'Elastic License'
url: 'https://www.elastic.co/licensing/elastic-license'
- version: 5.5.70
+ version: 5.8.34
servers:
-
url: 'https://demo.invoiceninja.com'
@@ -113,7 +113,14 @@ paths:
tags:
- login
summary: "Attempts authentication"
- description: "Returns a CompanyUser object on success"
+ description: |
+ After authenticating with the API, the returned object is a CompanyUser object which is a bridge linking the user to the company.
+
+ The company user object itself contains the users permissions (admin/owner or fine grained permissions) You will most likely want to
+ also include in the response of this object both the company and the user object, this can be done by using the include parameter.
+
+ /api/v1/login?include=company,user
+
operationId: postLogin
parameters:
- $ref: "#/components/parameters/X-API-SECRET"
@@ -133,10 +140,19 @@ paths:
description: "The users email address."
type: string
example: "demo@invoiceninja.com"
+ required: true
password:
description: "The user password. Must meet minimum criteria ~ > 6 characters"
type: string
example: "Password0"
+ required: true
+ one_time_password:
+ description: "The one time password if 2FA is enabled"
+ type: string
+ example: "123456"
+ required:
+ - email
+ - password
type: object
responses:
200:
@@ -151,13 +167,15 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Client"
+ $ref: "#/components/schemas/CompanyUser"
401:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
5XX:
description: 'Server error'
default:
@@ -170,7 +188,8 @@ paths:
description: |
Refreshes the dataset.
- This endpoint can be used if you only need to access the most recent data from a certain point in time.
+ This endpoint can be used if you only need to access the most recent data from a certain point in time. For example, if you only want to retrieve The
+ most recent data from the last time you accessed the system, you would pass the query parameter ?updated_at=1676173763. (unix timestamp)
operationId: refresh
parameters:
- name: updated_at
@@ -206,6 +225,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/yodlee/refresh:
@@ -238,6 +261,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations:
@@ -288,6 +315,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -320,6 +351,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_integrations/{id}":
@@ -361,6 +396,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -401,6 +440,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -437,6 +480,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_integrations/{id}/edit":
@@ -478,6 +525,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/create:
@@ -511,6 +562,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/bulk:
@@ -551,6 +606,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/refresh_accounts:
@@ -584,6 +643,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/remove_account/account_id:
@@ -617,6 +680,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/get_transactions/account_id:
@@ -650,6 +717,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transactions:
@@ -700,6 +771,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -732,6 +807,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_transactions/{id}":
@@ -773,6 +852,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -813,6 +896,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -890,6 +977,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transactions/create:
@@ -923,6 +1014,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transations/bulk:
@@ -963,6 +1058,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transations/match:
@@ -1003,6 +1102,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transaction_rules:
@@ -1053,6 +1156,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -1085,6 +1192,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_transaction_rules/{id}":
@@ -1126,6 +1237,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -1166,6 +1281,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -1202,6 +1321,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_transaction_rules/{id}/edit":
@@ -1243,6 +1366,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transaction_rules/create:
@@ -1276,6 +1403,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transation_rules/bulk:
@@ -1316,6 +1447,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/charts/totals:
@@ -1350,6 +1485,10 @@ paths:
$ref: "#/components/headers/X-RateLimit-Limit"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
@@ -1393,6 +1532,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -1425,6 +1568,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/client_gateway_tokens/{id}":
@@ -1466,6 +1613,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -1506,6 +1657,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -1542,6 +1697,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/client_gateway_tokens/{id}/edit":
@@ -1583,6 +1742,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/client_gateway_tokens/create:
@@ -1616,6 +1779,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
@@ -1658,6 +1825,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -1690,6 +1861,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/companies/create:
@@ -1723,6 +1898,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{id}":
@@ -1764,6 +1943,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -1802,9 +1985,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -1839,9 +2025,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{id}/edit":
@@ -1881,9 +2070,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{id}/upload":
@@ -1940,9 +2132,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{company}/default":
@@ -1982,9 +2177,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/company_gateways:
@@ -2024,9 +2222,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -2059,6 +2260,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/company_gateways/create:
@@ -8302,409 +8507,6 @@ paths:
default:
$ref: "#/components/responses/default"
- /api/v1/vendors:
- get:
- tags:
- - vendors
- summary: "List vendors"
- description: "Lists vendors, search and filters allow fine grained lists to be generated.\n\n Query parameters can be added to performed more fine grained filtering of the vendors, these are handled by the VendorFilters class which defines the methods available"
- operationId: getVendors
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - $ref: "#/components/parameters/index"
- responses:
- 200:
- description: "A list of vendors"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/Vendor'
- meta:
- type: object
- $ref: '#/components/schemas/Meta'
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- post:
- tags:
- - vendors
- summary: "Create vendor"
- description: "Adds a vendor to a company"
- operationId: storeVendor
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- responses:
- 200:
- description: "Returns the saved clivendorent object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Vendor"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/vendors/{id}":
- get:
- tags:
- - vendors
- summary: "Show vendor"
- description: "Displays a vendor by id"
- operationId: showVendor
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The vendor Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the vendor object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Vendor"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- put:
- tags:
- - vendors
- summary: "Update vendor"
- description: "Handles the updating of a vendor by id"
- operationId: updateVendor
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Vendor Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the vendor object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Vendor"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- delete:
- tags:
- - vendors
- summary: "Delete vendor"
- description: "Handles the deletion of a vendor by id"
- operationId: deleteVendor
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Vendor Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns a HTTP status"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/vendors/{id}/edit":
- get:
- tags:
- - vendors
- summary: "Edit vendor"
- description: "Displays a vendor by id"
- operationId: editVendor
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Vendor Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the vendor object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Vendor"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- /api/v1/vendors/create:
- get:
- tags:
- - vendors
- summary: "Blank vendor"
- description: "Returns a blank vendor with default values"
- operationId: getVendorsCreate
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- responses:
- 200:
- description: "A blank vendor object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Vendor"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- /api/v1/vendors/bulk:
- post:
- tags:
- - vendors
- summary: "Bulk vendor actions"
- description: ""
- operationId: bulkVendors
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/index"
- requestBody:
- description: "User credentials"
- required: true
- content:
- application/json:
- schema:
- type: array
- items:
- description: "Array of hashed IDs to be bulk 'actioned"
- type: integer
- example: "[0,1,2,3]"
- responses:
- 200:
- description: "The Vendor User response"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Vendor"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/vendors/{id}/upload":
- post:
- tags:
- - vendors
- summary: "Uploads a vendor document"
- description: "Handles the uploading of a document to a vendor"
- operationId: uploadVendor
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Vendor Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- requestBody:
- description: "File Upload Body"
- required: true
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- _method:
- type: string
- example: PUT
- documents:
- type: array
- items:
- description: "Array of binary documents for upload"
- type: string
- format: binary
- responses:
- 200:
- description: "Returns the Vendor object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Vendor"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
/api/v1/products:
get:
tags:
@@ -9148,59 +8950,21 @@ paths:
default:
$ref: '#/components/responses/default'
- /api/v1/recurring_invoices:
+ /api/v1/tasks:
get:
tags:
- - Recurring Invoices
- summary: "List recurring invoices"
- description: |
- Lists invoices with the option to chain multiple query parameters allowing fine grained filtering of the list.
-
- operationId: getRecurringInvoices
+ - tasks
+ summary: "List tasks"
+ description: "Lists tasks, search and filters allow fine grained lists to be generated.\n *\n * Query parameters can be added to performed more fine grained filtering of the tasks, these are handled by the TaskFilters class which defines the methods available"
+ operationId: getTasks
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- - $ref: "#/components/parameters/client_id"
- - $ref: "#/components/parameters/created_at"
- - $ref: "#/components/parameters/updated_at"
- - $ref: "#/components/parameters/is_deleted"
- - $ref: "#/components/parameters/filter_deleted_clients"
- - $ref: "#/components/parameters/vendor_id"
- - name: filter
- in: query
- description: |
- Searches across a range of columns including:
- - custom_value1
- - custom_value2
- - custom_value3
- - custom_value4
- required: false
- schema:
- type: string
- example: ?filter=bob
- - name: client_status
- in: query
- description: |
- A comma separated list of invoice status strings. Valid options include:
- - all
- - active
- - paused
- - completed
- required: false
- schema:
- type: string
- example: ?client_status=active,paused
- - name: sort
- in: query
- description: Returns the list sorted by column in ascending or descending order.
- required: false
- schema:
- type: string
- example: id|desc number|desc balance|asc
+ - $ref: "#/components/parameters/index"
responses:
200:
- description: "A list of recurring_invoices"
+ description: "A list of tasks"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9216,7 +8980,7 @@ paths:
data:
type: array
items:
- $ref: '#/components/schemas/RecurringInvoice'
+ $ref: '#/components/schemas/Task'
meta:
type: object
$ref: '#/components/schemas/Meta'
@@ -9234,17 +8998,17 @@ paths:
$ref: "#/components/responses/default"
post:
tags:
- - Recurring Invoices
- summary: "Create recurring invoice"
- description: "Adds a Recurring Invoice to the system"
- operationId: storeRecurringInvoice
+ - tasks
+ summary: "Create task"
+ description: "Adds an task to a company"
+ operationId: storeTask
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
responses:
200:
- description: "Returns the saved RecurringInvoice object"
+ description: "Returns the saved task object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9255,7 +9019,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/RecurringInvoice"
+ $ref: "#/components/schemas/Task"
401:
$ref: "#/components/responses/401"
403:
@@ -9268,21 +9032,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
-
- "/api/v1/recurring_invoices/{id}":
+ "/api/v1/tasks/{id}":
get:
tags:
- - Recurring Invoices
- summary: "Show recurring invoice"
- description: "Displays an RecurringInvoice by id"
- operationId: showRecurringInvoice
+ - tasks
+ summary: "Show task"
+ description: "Displays a task by id"
+ operationId: showTask
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The RecurringInvoice Hashed ID"
+ description: "The Task Hashed ID"
required: true
schema:
type: string
@@ -9290,7 +9053,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the RecurringInvoice object"
+ description: "Returns the task object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9301,7 +9064,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/RecurringInvoice"
+ $ref: "#/components/schemas/Task"
401:
$ref: "#/components/responses/401"
403:
@@ -9316,17 +9079,17 @@ paths:
$ref: "#/components/responses/default"
put:
tags:
- - Recurring Invoices
- summary: "Update recurring invoice"
- description: "Handles the updating of an RecurringInvoice by id"
- operationId: updateRecurringInvoice
+ - tasks
+ summary: "Update task"
+ description: "Handles the updating of a task by id"
+ operationId: updateTask
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The RecurringInvoice Hashed ID"
+ description: "The task Hashed ID"
required: true
schema:
type: string
@@ -9334,7 +9097,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the RecurringInvoice object"
+ description: "Returns the task object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9345,7 +9108,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/RecurringInvoice"
+ $ref: "#/components/schemas/Task"
401:
$ref: "#/components/responses/401"
403:
@@ -9360,17 +9123,17 @@ paths:
$ref: "#/components/responses/default"
delete:
tags:
- - Recurring Invoices
- summary: "Delete recurring invoice"
- description: "Handles the deletion of an RecurringInvoice by id"
- operationId: deleteRecurringInvoice
+ - tasks
+ summary: "Delete task"
+ description: "Handles the deletion of a task by id"
+ operationId: deleteTask
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The RecurringInvoice Hashed ID"
+ description: "The Task Hashed ID"
required: true
schema:
type: string
@@ -9398,20 +9161,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/recurring_invoices/{id}/edit":
+ "/api/v1/tasks/{id}/edit":
get:
tags:
- - Recurring Invoices
- summary: "Edit recurring invoice"
- description: "Displays an RecurringInvoice by id"
- operationId: editRecurringInvoice
+ - tasks
+ summary: "Edit task"
+ description: "Displays a task by id"
+ operationId: editTask
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The RecurringInvoice Hashed ID"
+ description: "The Task Hashed ID"
required: true
schema:
type: string
@@ -9419,7 +9182,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the RecurringInvoice object"
+ description: "Returns the client object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9430,7 +9193,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/RecurringInvoice"
+ $ref: "#/components/schemas/Task"
401:
$ref: "#/components/responses/401"
403:
@@ -9443,21 +9206,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
-
- /api/v1/recurring_invoices/create:
+ /api/v1/tasks/create:
get:
tags:
- - Recurring Invoices
- summary: "Blank recurring invoice"
- description: "Returns a blank object with default values"
- operationId: getRecurringInvoicesCreate
+ - tasks
+ summary: "Blank task"
+ description: "Returns a blank task with default values"
+ operationId: getTasksCreate
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
responses:
200:
- description: "A blank RecurringInvoice object"
+ description: "A blank task object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9468,7 +9230,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/RecurringInvoice"
+ $ref: "#/components/schemas/Task"
401:
$ref: "#/components/responses/401"
403:
@@ -9481,55 +9243,31 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/recurring_invoices/bulk:
+ /api/v1/tasks/bulk:
post:
tags:
- - Recurring Invoices
- summary: "Bulk recurring invoice actions"
- description: |
- There are multiple actions that are available including:
-
- operationId: bulkRecurringInvoices
+ - tasks
+ summary: "Bulk task actions"
+ description: ""
+ operationId: bulkTasks
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/index"
requestBody:
- description: "Bulk action details"
+ description: "User credentials"
required: true
content:
application/json:
schema:
- type: object
- properties:
- action:
- type: string
- description: |
- The action to be performed, options include:
- - `start`
- Starts (or restarts) the recurring invoice. **note** if the recurring invoice has been stopped for a long time, it will attempt to catch back up firing a new Invoice every hour per interval that has been missed.
- If you do not wish to have the recurring invoice catch up, you should set the next_send_date to the correct date you wish the recurring invoice to commence from.
- - `stop`
- Stops the recurring invoice.
- - `send_now`
- Force sends the recurring invoice - this option is only available when the recurring invoice is in a draft state.
- - `restore`
- Restores the recurring invoice from an archived or deleted state.
- - `archive`
- Archives the recurring invoice. The recurring invoice will not fire in this state.
- - `delete`
- Deletes a recurring invoice.
- ids:
- type: array
- items:
- description: "Array of hashed IDs to be bulk 'actioned - ['D2J234DFA','D2J234DFA','D2J234DFA']"
- type: string
- example:
- action: start
- ids: "['D2J234DFA','D2J234DFA','D2J234DFA']"
+ type: array
+ items:
+ description: "Array of hashed IDs to be bulk 'actioned"
+ type: integer
+ example: "[0,1,2,3]"
responses:
200:
- description: "The RecurringInvoice response"
+ description: "The Task User response"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9540,7 +9278,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/RecurringInvoice"
+ $ref: "#/components/schemas/Task"
401:
$ref: "#/components/responses/401"
403:
@@ -9553,115 +9291,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/recurring_invoices/{id}/{action}":
- get:
- deprecated: true
- tags:
- - Recurring Invoices
- summary: "Custom recurring invoice action"
- description: "Performs a custom action on an RecurringInvoice.\n\n The current range of actions are as follows\n - clone_to_RecurringInvoice\n - clone_to_quote\n - history\n - delivery_note\n - mark_paid\n - download\n - archive\n - delete\n - email"
- operationId: actionRecurringInvoice
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The RecurringInvoice Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- - name: action
- in: path
- description: "The action string to be performed"
- required: true
- schema:
- type: string
- format: string
- example: clone_to_quote
- responses:
- 200:
- description: "Returns the RecurringInvoice object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/RecurringInvoice"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/recurring_invoice/{invitation_key}/download":
- get:
- tags:
- - Recurring Invoices
- summary: "Download recurring invoice PDF"
- description: "Downloads a specific invoice"
- operationId: downloadRecurringInvoice
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: invitation_key
- in: path
- description: "The Recurring Invoice Invitation Key"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the recurring invoice pdf"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/recurring_invoices/{id}/upload":
+ "/api/v1/tasks/{id}/upload":
post:
tags:
- - Recurring Invoices
- summary: "Add recurring invoice document"
- description: "Handles the uploading of a document to a recurring_invoice"
- operationId: uploadRecurringInvoice
+ - tasks
+ summary: "Uploads a task document"
+ description: "Handles the uploading of a document to a task"
+ operationId: uploadTask
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The RecurringInvoice Hashed ID"
+ description: "The Task Hashed ID"
required: true
schema:
type: string
@@ -9686,7 +9329,7 @@ paths:
format: binary
responses:
200:
- description: "Returns the RecurringInvoice object"
+ description: "Returns the Task object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -9697,7 +9340,443 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/RecurringInvoice"
+ $ref: "#/components/schemas/Task"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/tasks/sort:
+ post:
+ tags:
+ - tasks
+ summary: "Sort tasks on KanBan"
+ description: "Sorts tasks after drag and drop on the KanBan."
+ operationId: sortTasks
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ responses:
+ 200:
+ description: "Returns an Ok, 200 HTTP status"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/projects:
+ get:
+ tags:
+ - projects
+ summary: "List projects"
+ description: "Lists projects"
+ operationId: getProjects
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - $ref: "#/components/parameters/index"
+ responses:
+ 200:
+ description: "A list of projects"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Project'
+ meta:
+ type: object
+ $ref: '#/components/schemas/Meta'
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ post:
+ tags:
+ - projects
+ summary: "Create project"
+ description: "Adds an project to a company"
+ operationId: storeProject
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ responses:
+ 200:
+ description: "Returns the saved project object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Project"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/projects/{id}":
+ get:
+ tags:
+ - projects
+ summary: "Show project"
+ description: "Displays a project by id"
+ operationId: showProject
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Project Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the expense object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Project"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ put:
+ tags:
+ - projects
+ summary: "Update project"
+ description: "Handles the updating of a project by id"
+ operationId: updateProject
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Project Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the project object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Project"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ delete:
+ tags:
+ - projects
+ summary: "Delete project"
+ description: "Handles the deletion of a project by id"
+ operationId: deleteProject
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Project Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns a HTTP status"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/projects/{id}/edit":
+ get:
+ tags:
+ - projects
+ summary: "Edit project"
+ description: "Displays a project by id"
+ operationId: editProject
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Project Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the project object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Project"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/projects/create:
+ get:
+ tags:
+ - projects
+ summary: "Blank project"
+ description: "Returns a blank object with default values"
+ operationId: getProjectsCreate
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ responses:
+ 200:
+ description: "A blank project object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Project"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/projects/bulk:
+ post:
+ tags:
+ - projects
+ summary: "Bulk project actions"
+ description: ""
+ operationId: bulkProjects
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/index"
+ requestBody:
+ description: "User credentials"
+ required: true
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ description: "Array of hashed IDs to be bulk 'actioned"
+ type: integer
+ example: "[0,1,2,3]"
+ responses:
+ 200:
+ description: "The Project User response"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Project"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/projects/{id}/upload":
+ post:
+ tags:
+ - projects
+ summary: "Uploads a project document"
+ description: "Handles the uploading of a document to a project"
+ operationId: uploadProject
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Project Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ requestBody:
+ description: "File Upload Body"
+ required: true
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ _method:
+ type: string
+ example: PUT
+ documents:
+ type: array
+ items:
+ description: "Array of binary documents for upload"
+ type: string
+ format: binary
+ responses:
+ 200:
+ description: "Returns the Project object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Project"
401:
$ref: "#/components/responses/401"
403:
@@ -10901,21 +10980,56 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/projects:
+ /api/v1/payments:
get:
tags:
- - projects
- summary: "List projects"
- description: "Lists projects"
- operationId: getProjects
+ - payments
+ summary: "List payments"
+ description: "Lists payments, search and filters allow fine grained lists to be generated.\n\n Query parameters can be added to performed more fine grained filtering of the payments, these are handled by the PaymentFilters class which defines the methods available"
+ operationId: getPayments
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- - $ref: "#/components/parameters/index"
+ - $ref: "#/components/parameters/status"
+ - $ref: "#/components/parameters/client_id"
+ - $ref: "#/components/parameters/created_at"
+ - $ref: "#/components/parameters/updated_at"
+ - $ref: "#/components/parameters/is_deleted"
+ - $ref: "#/components/parameters/filter_deleted_clients"
+ - $ref: "#/components/parameters/vendor_id"
+ - name: filter
+ in: query
+ description: |
+ Searches across a range of columns including:
+ - amount
+ - date
+ - custom_value1
+ - custom_value2
+ - custom_value3
+ - custom_value4
+ required: false
+ schema:
+ type: string
+ example: ?filter=10
+ - name: number
+ in: query
+ description: |
+ Search payments by payment number
+ required: false
+ schema:
+ type: string
+ example: ?number=0001
+ - name: sort
+ in: query
+ description: Returns the list sorted by column in ascending or descending order.
+ required: false
+ schema:
+ type: string
+ example: id|desc number|desc balance|asc
responses:
200:
- description: "A list of projects"
+ description: "A list of payments"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -10931,7 +11045,7 @@ paths:
data:
type: array
items:
- $ref: '#/components/schemas/Project'
+ $ref: '#/components/schemas/Payment'
meta:
type: object
$ref: '#/components/schemas/Meta'
@@ -10949,17 +11063,24 @@ paths:
$ref: "#/components/responses/default"
post:
tags:
- - projects
- summary: "Create project"
- description: "Adds an project to a company"
- operationId: storeProject
+ - payments
+ summary: "Create payment"
+ description: "Adds an Payment to the system"
+ operationId: storePayment
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
+ requestBody:
+ description: "The payment request"
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Payment"
responses:
200:
- description: "Returns the saved project object"
+ description: "Returns the saved Payment object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -10970,7 +11091,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Project"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -10983,20 +11104,21 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/projects/{id}":
+
+ "/api/v1/payments/{id}":
get:
tags:
- - projects
- summary: "Show project"
- description: "Displays a project by id"
- operationId: showProject
+ - payments
+ summary: "Show payment"
+ description: "Displays an Payment by id"
+ operationId: showPayment
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Project Hashed ID"
+ description: "The Payment Hashed ID"
required: true
schema:
type: string
@@ -11004,7 +11126,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the expense object"
+ description: "Returns the Payment object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -11015,7 +11137,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Project"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -11030,17 +11152,17 @@ paths:
$ref: "#/components/responses/default"
put:
tags:
- - projects
- summary: "Update project"
- description: "Handles the updating of a project by id"
- operationId: updateProject
+ - payments
+ summary: "Update payment"
+ description: "Handles the updating of an Payment by id"
+ operationId: updatePayment
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Project Hashed ID"
+ description: "The Payment Hashed ID"
required: true
schema:
type: string
@@ -11048,7 +11170,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the project object"
+ description: "Returns the Payment object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -11059,7 +11181,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Project"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -11074,17 +11196,17 @@ paths:
$ref: "#/components/responses/default"
delete:
tags:
- - projects
- summary: "Delete project"
- description: "Handles the deletion of a project by id"
- operationId: deleteProject
+ - payments
+ summary: "Delete payment"
+ description: "Handles the deletion of an Payment by id"
+ operationId: deletePayment
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Project Hashed ID"
+ description: "The Payment Hashed ID"
required: true
schema:
type: string
@@ -11112,20 +11234,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/projects/{id}/edit":
+ "/api/v1/payments/{id}/edit":
get:
tags:
- - projects
- summary: "Edit project"
- description: "Displays a project by id"
- operationId: editProject
+ - payments
+ summary: "Edit payment"
+ description: "Displays an Payment by id"
+ operationId: editPayment
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Project Hashed ID"
+ description: "The Payment Hashed ID"
required: true
schema:
type: string
@@ -11133,7 +11255,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the project object"
+ description: "Returns the Payment object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -11144,7 +11266,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Project"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -11157,20 +11279,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/projects/create:
+ /api/v1/payments/create:
get:
tags:
- - projects
- summary: "Blank project"
+ - payments
+ summary: "Blank payment"
description: "Returns a blank object with default values"
- operationId: getProjectsCreate
+ operationId: getPaymentsCreate
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
responses:
200:
- description: "A blank project object"
+ description: "A blank Payment object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -11181,7 +11303,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Project"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -11194,13 +11316,57 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/projects/bulk:
+ /api/v1/payments/refund:
post:
tags:
- - projects
- summary: "Bulk project actions"
+ - payments
+ summary: "Refund payment"
+ description: "Adds an Refund to the system"
+ operationId: storeRefund
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ requestBody:
+ description: "The refund request"
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Payment"
+ responses:
+ 200:
+ description: "Returns the saved Payment object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Payment"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/payments/bulk:
+ post:
+ tags:
+ - payments
+ summary: "Bulk payment actions"
description: ""
- operationId: bulkProjects
+ operationId: bulkPayments
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
@@ -11218,7 +11384,7 @@ paths:
example: "[0,1,2,3]"
responses:
200:
- description: "The Project User response"
+ description: "The Payment response"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -11229,7 +11395,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Project"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -11242,472 +11408,21 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/projects/{id}/upload":
- post:
- tags:
- - projects
- summary: "Uploads a project document"
- description: "Handles the uploading of a document to a project"
- operationId: uploadProject
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Project Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- requestBody:
- description: "File Upload Body"
- required: true
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- _method:
- type: string
- example: PUT
- documents:
- type: array
- items:
- description: "Array of binary documents for upload"
- type: string
- format: binary
- responses:
- 200:
- description: "Returns the Project object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Project"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- /api/v1/quotes:
- get:
- tags:
- - quotes
- summary: "List quotes"
- description: "Lists quotes, search and filters allow fine grained lists to be generated.\n *\n * Query parameters can be added to performed more fine grained filtering of the quotes, these are handled by the QuoteFilters class which defines the methods available"
- operationId: getQuotes
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - $ref: "#/components/parameters/status"
- - $ref: "#/components/parameters/client_id"
- - $ref: "#/components/parameters/created_at"
- - $ref: "#/components/parameters/updated_at"
- - $ref: "#/components/parameters/is_deleted"
- - $ref: "#/components/parameters/filter_deleted_clients"
- - $ref: "#/components/parameters/vendor_id"
- - name: filter
- in: query
- description: |
- Searches across a range of columns including:
- - number
- - custom_value1
- - custom_value2
- - custom_value3
- - custom_value4
- required: false
- schema:
- type: string
- example: ?filter=bob
- - name: client_status
- in: query
- description: |
- A comma separated list of quote status strings. Valid options include:
- - all
- - draft
- - sent
- - approved
- - expired
- - upcoming
- required: false
- schema:
- type: string
- example: ?client_status=paid,unpaid
- - name: number
- in: query
- description: |
- Search quote by quote number
- required: false
- schema:
- type: string
- example: ?number=Q-001
- - name: sort
- in: query
- description: Returns the list sorted by column in ascending or descending order.
- required: false
- schema:
- type: string
- example: id|desc number|desc balance|asc
- responses:
- 200:
- description: "A list of quotes"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- type: object
- properties:
- data:
- type: array
- items:
- $ref: '#/components/schemas/Quote'
- meta:
- type: object
- $ref: '#/components/schemas/Meta'
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- post:
- tags:
- - quotes
- summary: "Create quote"
- description: "Adds an Quote to the system"
- operationId: storeQuote
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- responses:
- 200:
- description: "Returns the saved Quote object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Quote"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/quotes/{id}":
- get:
- tags:
- - quotes
- summary: "Show quote"
- description: "Displays an Quote by id"
- operationId: showQuote
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Quote Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the Quote object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Quote"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- put:
- tags:
- - quotes
- summary: "Update quote"
- description: "Handles the updating of an Quote by id"
- operationId: updateQuote
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Quote Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the Quote object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Quote"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- delete:
- tags:
- - quotes
- summary: "Delete quote"
- description: "Handles the deletion of an Quote by id"
- operationId: deleteQuote
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Quote Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns a HTTP status"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/quotes/{id}/edit":
- get:
- tags:
- - quotes
- summary: "Edit quote"
- description: "Displays an Quote by id"
- operationId: editQuote
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: id
- in: path
- description: "The Quote Hashed ID"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the Quote object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Quote"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- /api/v1/quotes/create:
- get:
- tags:
- - quotes
- summary: "Blank quote"
- description: "Returns a blank object with default values"
- operationId: getQuotesCreate
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- responses:
- 200:
- description: "A blank Quote object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Quote"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- /api/v1/quotes/bulk:
- post:
- tags:
- - quotes
- summary: "Bulk quote actions"
- description: ""
- operationId: bulkQuotes
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/index"
- requestBody:
- description: "Hashed ids"
- required: true
- content:
- application/json:
- schema:
- type: array
- items:
- description: "Array of hashed IDs to be bulk 'actioned"
- type: integer
- example: "[0,1,2,3]"
- responses:
- 200:
- description: "The Quote response"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Quote"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/quotes/{id}/{action}":
+ "/api/v1/payments/{id}/{action}":
get:
deprecated: true
tags:
- - quotes
- summary: "Performs a custom action on an Quote"
- description: "Performs a custom action on an Quote.\n\n The current range of actions are as follows\n - clone_to_quote\n - history\n - delivery_note\n - mark_paid\n - download\n - archive\n - delete\n - convert\n - convert_to_invoice\n - email"
- operationId: actionQuote
+ - payments
+ summary: "Custom payment actions"
+ description: "Performs a custom action on an Payment.\n\n The current range of actions are as follows\n - clone_to_Payment\n - clone_to_quote\n - history\n - delivery_note\n - mark_paid\n - download\n - archive\n - delete\n - email"
+ operationId: actionPayment
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Quote Hashed ID"
+ description: "The Payment Hashed ID"
required: true
schema:
type: string
@@ -11723,7 +11438,7 @@ paths:
example: clone_to_quote
responses:
200:
- description: "Returns the Quote object"
+ description: "Returns the Payment object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -11734,7 +11449,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Quote"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -11747,61 +11462,21 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/quote/{invitation_key}/download":
- get:
- tags:
- - quotes
- summary: "Download quote PDF"
- description: "Downloads a specific quote"
- operationId: downloadQuote
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- - name: invitation_key
- in: path
- description: "The Quote Invitation Key"
- required: true
- schema:
- type: string
- format: string
- example: D2J234DFA
- responses:
- 200:
- description: "Returns the quote pdf"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- "/api/v1/quotes/{id}/upload":
+
+ "/api/v1/payments/{id}/upload":
post:
tags:
- - quotes
- summary: "Upload a quote document"
- description: "Handles the uploading of a document to a quote"
- operationId: uploadQuote
+ - payments
+ summary: "Upload a payment document"
+ description: "Handles the uploading of a document to a payment"
+ operationId: uploadPayment
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Quote Hashed ID"
+ description: "The Payment Hashed ID"
required: true
schema:
type: string
@@ -11826,7 +11501,7 @@ paths:
format: binary
responses:
200:
- description: "Returns the Quote object"
+ description: "Returns the Payment object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -11837,7 +11512,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Quote"
+ $ref: "#/components/schemas/Payment"
401:
$ref: "#/components/responses/401"
403:
@@ -12561,18 +12236,19 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/payments:
+ /api/v1/recurring_invoices:
get:
tags:
- - payments
- summary: "List payments"
- description: "Lists payments, search and filters allow fine grained lists to be generated.\n\n Query parameters can be added to performed more fine grained filtering of the payments, these are handled by the PaymentFilters class which defines the methods available"
- operationId: getPayments
+ - Recurring Invoices
+ summary: "List recurring invoices"
+ description: |
+ Lists invoices with the option to chain multiple query parameters allowing fine grained filtering of the list.
+
+ operationId: getRecurringInvoices
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- - $ref: "#/components/parameters/status"
- $ref: "#/components/parameters/client_id"
- $ref: "#/components/parameters/created_at"
- $ref: "#/components/parameters/updated_at"
@@ -12583,8 +12259,6 @@ paths:
in: query
description: |
Searches across a range of columns including:
- - amount
- - date
- custom_value1
- custom_value2
- custom_value3
@@ -12592,15 +12266,19 @@ paths:
required: false
schema:
type: string
- example: ?filter=10
- - name: number
+ example: ?filter=bob
+ - name: client_status
in: query
description: |
- Search payments by payment number
+ A comma separated list of invoice status strings. Valid options include:
+ - all
+ - active
+ - paused
+ - completed
required: false
schema:
type: string
- example: ?number=0001
+ example: ?client_status=active,paused
- name: sort
in: query
description: Returns the list sorted by column in ascending or descending order.
@@ -12610,7 +12288,7 @@ paths:
example: id|desc number|desc balance|asc
responses:
200:
- description: "A list of payments"
+ description: "A list of recurring_invoices"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -12626,7 +12304,7 @@ paths:
data:
type: array
items:
- $ref: '#/components/schemas/Payment'
+ $ref: '#/components/schemas/RecurringInvoice'
meta:
type: object
$ref: '#/components/schemas/Meta'
@@ -12644,24 +12322,17 @@ paths:
$ref: "#/components/responses/default"
post:
tags:
- - payments
- summary: "Create payment"
- description: "Adds an Payment to the system"
- operationId: storePayment
+ - Recurring Invoices
+ summary: "Create recurring invoice"
+ description: "Adds a Recurring Invoice to the system"
+ operationId: storeRecurringInvoice
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- requestBody:
- description: "The payment request"
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Payment"
responses:
200:
- description: "Returns the saved Payment object"
+ description: "Returns the saved RecurringInvoice object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -12672,7 +12343,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
401:
$ref: "#/components/responses/401"
403:
@@ -12686,20 +12357,20 @@ paths:
default:
$ref: "#/components/responses/default"
- "/api/v1/payments/{id}":
+ "/api/v1/recurring_invoices/{id}":
get:
tags:
- - payments
- summary: "Show payment"
- description: "Displays an Payment by id"
- operationId: showPayment
+ - Recurring Invoices
+ summary: "Show recurring invoice"
+ description: "Displays an RecurringInvoice by id"
+ operationId: showRecurringInvoice
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Payment Hashed ID"
+ description: "The RecurringInvoice Hashed ID"
required: true
schema:
type: string
@@ -12707,7 +12378,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the Payment object"
+ description: "Returns the RecurringInvoice object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -12718,7 +12389,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
401:
$ref: "#/components/responses/401"
403:
@@ -12733,17 +12404,17 @@ paths:
$ref: "#/components/responses/default"
put:
tags:
- - payments
- summary: "Update payment"
- description: "Handles the updating of an Payment by id"
- operationId: updatePayment
+ - Recurring Invoices
+ summary: "Update recurring invoice"
+ description: "Handles the updating of an RecurringInvoice by id"
+ operationId: updateRecurringInvoice
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Payment Hashed ID"
+ description: "The RecurringInvoice Hashed ID"
required: true
schema:
type: string
@@ -12751,7 +12422,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the Payment object"
+ description: "Returns the RecurringInvoice object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -12762,7 +12433,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
401:
$ref: "#/components/responses/401"
403:
@@ -12777,17 +12448,17 @@ paths:
$ref: "#/components/responses/default"
delete:
tags:
- - payments
- summary: "Delete payment"
- description: "Handles the deletion of an Payment by id"
- operationId: deletePayment
+ - Recurring Invoices
+ summary: "Delete recurring invoice"
+ description: "Handles the deletion of an RecurringInvoice by id"
+ operationId: deleteRecurringInvoice
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Payment Hashed ID"
+ description: "The RecurringInvoice Hashed ID"
required: true
schema:
type: string
@@ -12815,20 +12486,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/payments/{id}/edit":
+ "/api/v1/recurring_invoices/{id}/edit":
get:
tags:
- - payments
- summary: "Edit payment"
- description: "Displays an Payment by id"
- operationId: editPayment
+ - Recurring Invoices
+ summary: "Edit recurring invoice"
+ description: "Displays an RecurringInvoice by id"
+ operationId: editRecurringInvoice
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Payment Hashed ID"
+ description: "The RecurringInvoice Hashed ID"
required: true
schema:
type: string
@@ -12836,7 +12507,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the Payment object"
+ description: "Returns the RecurringInvoice object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -12847,7 +12518,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
401:
$ref: "#/components/responses/401"
403:
@@ -12860,20 +12531,21 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/payments/create:
+
+ /api/v1/recurring_invoices/create:
get:
tags:
- - payments
- summary: "Blank payment"
+ - Recurring Invoices
+ summary: "Blank recurring invoice"
description: "Returns a blank object with default values"
- operationId: getPaymentsCreate
+ operationId: getRecurringInvoicesCreate
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
responses:
200:
- description: "A blank Payment object"
+ description: "A blank RecurringInvoice object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -12884,7 +12556,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
401:
$ref: "#/components/responses/401"
403:
@@ -12897,75 +12569,55 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/payments/refund:
+ /api/v1/recurring_invoices/bulk:
post:
tags:
- - payments
- summary: "Refund payment"
- description: "Adds an Refund to the system"
- operationId: storeRefund
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- requestBody:
- description: "The refund request"
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Payment"
- responses:
- 200:
- description: "Returns the saved Payment object"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/Payment"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- /api/v1/payments/bulk:
- post:
- tags:
- - payments
- summary: "Bulk payment actions"
- description: ""
- operationId: bulkPayments
+ - Recurring Invoices
+ summary: "Bulk recurring invoice actions"
+ description: |
+ There are multiple actions that are available including:
+
+ operationId: bulkRecurringInvoices
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/index"
requestBody:
- description: "User credentials"
+ description: "Bulk action details"
required: true
content:
application/json:
schema:
- type: array
- items:
- description: "Array of hashed IDs to be bulk 'actioned"
- type: integer
- example: "[0,1,2,3]"
+ type: object
+ properties:
+ action:
+ type: string
+ description: |
+ The action to be performed, options include:
+ - `start`
+ Starts (or restarts) the recurring invoice. **note** if the recurring invoice has been stopped for a long time, it will attempt to catch back up firing a new Invoice every hour per interval that has been missed.
+ If you do not wish to have the recurring invoice catch up, you should set the next_send_date to the correct date you wish the recurring invoice to commence from.
+ - `stop`
+ Stops the recurring invoice.
+ - `send_now`
+ Force sends the recurring invoice - this option is only available when the recurring invoice is in a draft state.
+ - `restore`
+ Restores the recurring invoice from an archived or deleted state.
+ - `archive`
+ Archives the recurring invoice. The recurring invoice will not fire in this state.
+ - `delete`
+ Deletes a recurring invoice.
+ ids:
+ type: array
+ items:
+ description: "Array of hashed IDs to be bulk 'actioned - ['D2J234DFA','D2J234DFA','D2J234DFA']"
+ type: string
+ example:
+ action: start
+ ids: "['D2J234DFA','D2J234DFA','D2J234DFA']"
responses:
200:
- description: "The Payment response"
+ description: "The RecurringInvoice response"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -12976,7 +12628,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
401:
$ref: "#/components/responses/401"
403:
@@ -12989,21 +12641,21 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/payments/{id}/{action}":
+ "/api/v1/recurring_invoices/{id}/{action}":
get:
deprecated: true
tags:
- - payments
- summary: "Custom payment actions"
- description: "Performs a custom action on an Payment.\n\n The current range of actions are as follows\n - clone_to_Payment\n - clone_to_quote\n - history\n - delivery_note\n - mark_paid\n - download\n - archive\n - delete\n - email"
- operationId: actionPayment
+ - Recurring Invoices
+ summary: "Custom recurring invoice action"
+ description: "Performs a custom action on an RecurringInvoice.\n\n The current range of actions are as follows\n - clone_to_RecurringInvoice\n - clone_to_quote\n - history\n - delivery_note\n - mark_paid\n - download\n - archive\n - delete\n - email"
+ operationId: actionRecurringInvoice
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Payment Hashed ID"
+ description: "The RecurringInvoice Hashed ID"
required: true
schema:
type: string
@@ -13019,7 +12671,7 @@ paths:
example: clone_to_quote
responses:
200:
- description: "Returns the Payment object"
+ description: "Returns the RecurringInvoice object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13030,7 +12682,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
401:
$ref: "#/components/responses/401"
403:
@@ -13043,21 +12695,61 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
-
- "/api/v1/payments/{id}/upload":
+ "/api/v1/recurring_invoice/{invitation_key}/download":
+ get:
+ tags:
+ - Recurring Invoices
+ summary: "Download recurring invoice PDF"
+ description: "Downloads a specific invoice"
+ operationId: downloadRecurringInvoice
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: invitation_key
+ in: path
+ description: "The Recurring Invoice Invitation Key"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the recurring invoice pdf"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/recurring_invoices/{id}/upload":
post:
tags:
- - payments
- summary: "Upload a payment document"
- description: "Handles the uploading of a document to a payment"
- operationId: uploadPayment
+ - Recurring Invoices
+ summary: "Add recurring invoice document"
+ description: "Handles the uploading of a document to a recurring_invoice"
+ operationId: uploadRecurringInvoice
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Payment Hashed ID"
+ description: "The RecurringInvoice Hashed ID"
required: true
schema:
type: string
@@ -13082,7 +12774,7 @@ paths:
format: binary
responses:
200:
- description: "Returns the Payment object"
+ description: "Returns the RecurringInvoice object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13093,7 +12785,553 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Payment"
+ $ref: "#/components/schemas/RecurringInvoice"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/quotes:
+ get:
+ tags:
+ - quotes
+ summary: "List quotes"
+ description: "Lists quotes, search and filters allow fine grained lists to be generated.\n *\n * Query parameters can be added to performed more fine grained filtering of the quotes, these are handled by the QuoteFilters class which defines the methods available"
+ operationId: getQuotes
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - $ref: "#/components/parameters/status"
+ - $ref: "#/components/parameters/client_id"
+ - $ref: "#/components/parameters/created_at"
+ - $ref: "#/components/parameters/updated_at"
+ - $ref: "#/components/parameters/is_deleted"
+ - $ref: "#/components/parameters/filter_deleted_clients"
+ - $ref: "#/components/parameters/vendor_id"
+ - name: filter
+ in: query
+ description: |
+ Searches across a range of columns including:
+ - number
+ - custom_value1
+ - custom_value2
+ - custom_value3
+ - custom_value4
+ required: false
+ schema:
+ type: string
+ example: ?filter=bob
+ - name: client_status
+ in: query
+ description: |
+ A comma separated list of quote status strings. Valid options include:
+ - all
+ - draft
+ - sent
+ - approved
+ - expired
+ - upcoming
+ required: false
+ schema:
+ type: string
+ example: ?client_status=paid,unpaid
+ - name: number
+ in: query
+ description: |
+ Search quote by quote number
+ required: false
+ schema:
+ type: string
+ example: ?number=Q-001
+ - name: sort
+ in: query
+ description: Returns the list sorted by column in ascending or descending order.
+ required: false
+ schema:
+ type: string
+ example: id|desc number|desc balance|asc
+ responses:
+ 200:
+ description: "A list of quotes"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/Quote'
+ meta:
+ type: object
+ $ref: '#/components/schemas/Meta'
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ post:
+ tags:
+ - quotes
+ summary: "Create quote"
+ description: "Adds an Quote to the system"
+ operationId: storeQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ responses:
+ 200:
+ description: "Returns the saved Quote object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/quotes/{id}":
+ get:
+ tags:
+ - quotes
+ summary: "Show quote"
+ description: "Displays an Quote by id"
+ operationId: showQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Quote Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the Quote object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ put:
+ tags:
+ - quotes
+ summary: "Update quote"
+ description: "Handles the updating of an Quote by id"
+ operationId: updateQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Quote Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the Quote object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ delete:
+ tags:
+ - quotes
+ summary: "Delete quote"
+ description: "Handles the deletion of an Quote by id"
+ operationId: deleteQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Quote Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns a HTTP status"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/quotes/{id}/edit":
+ get:
+ tags:
+ - quotes
+ summary: "Edit quote"
+ description: "Displays an Quote by id"
+ operationId: editQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Quote Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the Quote object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/quotes/create:
+ get:
+ tags:
+ - quotes
+ summary: "Blank quote"
+ description: "Returns a blank object with default values"
+ operationId: getQuotesCreate
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ responses:
+ 200:
+ description: "A blank Quote object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ /api/v1/quotes/bulk:
+ post:
+ tags:
+ - quotes
+ summary: "Bulk quote actions"
+ description: ""
+ operationId: bulkQuotes
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/index"
+ requestBody:
+ description: "Hashed ids"
+ required: true
+ content:
+ application/json:
+ schema:
+ type: array
+ items:
+ description: "Array of hashed IDs to be bulk 'actioned"
+ type: integer
+ example: "[0,1,2,3]"
+ responses:
+ 200:
+ description: "The Quote response"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/quotes/{id}/{action}":
+ get:
+ deprecated: true
+ tags:
+ - quotes
+ summary: "Performs a custom action on an Quote"
+ description: "Performs a custom action on an Quote.\n\n The current range of actions are as follows\n - clone_to_quote\n - history\n - delivery_note\n - mark_paid\n - download\n - archive\n - delete\n - convert\n - convert_to_invoice\n - email"
+ operationId: actionQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Quote Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ - name: action
+ in: path
+ description: "The action string to be performed"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: clone_to_quote
+ responses:
+ 200:
+ description: "Returns the Quote object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/quote/{invitation_key}/download":
+ get:
+ tags:
+ - quotes
+ summary: "Download quote PDF"
+ description: "Downloads a specific quote"
+ operationId: downloadQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: invitation_key
+ in: path
+ description: "The Quote Invitation Key"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ responses:
+ 200:
+ description: "Returns the quote pdf"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ 401:
+ $ref: "#/components/responses/401"
+ 403:
+ $ref: "#/components/responses/403"
+ 422:
+ $ref: '#/components/responses/422'
+ 429:
+ $ref: '#/components/responses/429'
+ 5XX:
+ description: 'Server error'
+ default:
+ $ref: "#/components/responses/default"
+ "/api/v1/quotes/{id}/upload":
+ post:
+ tags:
+ - quotes
+ summary: "Upload a quote document"
+ description: "Handles the uploading of a document to a quote"
+ operationId: uploadQuote
+ parameters:
+ - $ref: "#/components/parameters/X-API-TOKEN"
+ - $ref: "#/components/parameters/X-Requested-With"
+ - $ref: "#/components/parameters/include"
+ - name: id
+ in: path
+ description: "The Quote Hashed ID"
+ required: true
+ schema:
+ type: string
+ format: string
+ example: D2J234DFA
+ requestBody:
+ description: "File Upload Body"
+ required: true
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ _method:
+ type: string
+ example: PUT
+ documents:
+ type: array
+ items:
+ description: "Array of binary documents for upload"
+ type: string
+ format: binary
+ responses:
+ 200:
+ description: "Returns the Quote object"
+ headers:
+ X-MINIMUM-CLIENT-VERSION:
+ $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
+ X-RateLimit-Remaining:
+ $ref: "#/components/headers/X-RateLimit-Remaining"
+ X-RateLimit-Limit:
+ $ref: "#/components/headers/X-RateLimit-Limit"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/Quote"
401:
$ref: "#/components/responses/401"
403:
@@ -13602,13 +13840,13 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/tasks:
+ /api/v1/vendors:
get:
tags:
- - tasks
- summary: "List tasks"
- description: "Lists tasks, search and filters allow fine grained lists to be generated.\n *\n * Query parameters can be added to performed more fine grained filtering of the tasks, these are handled by the TaskFilters class which defines the methods available"
- operationId: getTasks
+ - vendors
+ summary: "List vendors"
+ description: "Lists vendors, search and filters allow fine grained lists to be generated.\n\n Query parameters can be added to performed more fine grained filtering of the vendors, these are handled by the VendorFilters class which defines the methods available"
+ operationId: getVendors
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
@@ -13616,7 +13854,7 @@ paths:
- $ref: "#/components/parameters/index"
responses:
200:
- description: "A list of tasks"
+ description: "A list of vendors"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13632,7 +13870,7 @@ paths:
data:
type: array
items:
- $ref: '#/components/schemas/Task'
+ $ref: '#/components/schemas/Vendor'
meta:
type: object
$ref: '#/components/schemas/Meta'
@@ -13650,17 +13888,17 @@ paths:
$ref: "#/components/responses/default"
post:
tags:
- - tasks
- summary: "Create task"
- description: "Adds an task to a company"
- operationId: storeTask
+ - vendors
+ summary: "Create vendor"
+ description: "Adds a vendor to a company"
+ operationId: storeVendor
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
responses:
200:
- description: "Returns the saved task object"
+ description: "Returns the saved clivendorent object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13671,7 +13909,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Task"
+ $ref: "#/components/schemas/Vendor"
401:
$ref: "#/components/responses/401"
403:
@@ -13684,20 +13922,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/tasks/{id}":
+ "/api/v1/vendors/{id}":
get:
tags:
- - tasks
- summary: "Show task"
- description: "Displays a task by id"
- operationId: showTask
+ - vendors
+ summary: "Show vendor"
+ description: "Displays a vendor by id"
+ operationId: showVendor
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Task Hashed ID"
+ description: "The vendor Hashed ID"
required: true
schema:
type: string
@@ -13705,7 +13943,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the task object"
+ description: "Returns the vendor object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13716,7 +13954,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Task"
+ $ref: "#/components/schemas/Vendor"
401:
$ref: "#/components/responses/401"
403:
@@ -13731,17 +13969,17 @@ paths:
$ref: "#/components/responses/default"
put:
tags:
- - tasks
- summary: "Update task"
- description: "Handles the updating of a task by id"
- operationId: updateTask
+ - vendors
+ summary: "Update vendor"
+ description: "Handles the updating of a vendor by id"
+ operationId: updateVendor
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The task Hashed ID"
+ description: "The Vendor Hashed ID"
required: true
schema:
type: string
@@ -13749,7 +13987,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the task object"
+ description: "Returns the vendor object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13760,7 +13998,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Task"
+ $ref: "#/components/schemas/Vendor"
401:
$ref: "#/components/responses/401"
403:
@@ -13775,17 +14013,17 @@ paths:
$ref: "#/components/responses/default"
delete:
tags:
- - tasks
- summary: "Delete task"
- description: "Handles the deletion of a task by id"
- operationId: deleteTask
+ - vendors
+ summary: "Delete vendor"
+ description: "Handles the deletion of a vendor by id"
+ operationId: deleteVendor
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Task Hashed ID"
+ description: "The Vendor Hashed ID"
required: true
schema:
type: string
@@ -13813,20 +14051,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/tasks/{id}/edit":
+ "/api/v1/vendors/{id}/edit":
get:
tags:
- - tasks
- summary: "Edit task"
- description: "Displays a task by id"
- operationId: editTask
+ - vendors
+ summary: "Edit vendor"
+ description: "Displays a vendor by id"
+ operationId: editVendor
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Task Hashed ID"
+ description: "The Vendor Hashed ID"
required: true
schema:
type: string
@@ -13834,7 +14072,7 @@ paths:
example: D2J234DFA
responses:
200:
- description: "Returns the client object"
+ description: "Returns the vendor object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13845,7 +14083,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Task"
+ $ref: "#/components/schemas/Vendor"
401:
$ref: "#/components/responses/401"
403:
@@ -13858,20 +14096,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/tasks/create:
+ /api/v1/vendors/create:
get:
tags:
- - tasks
- summary: "Blank task"
- description: "Returns a blank task with default values"
- operationId: getTasksCreate
+ - vendors
+ summary: "Blank vendor"
+ description: "Returns a blank vendor with default values"
+ operationId: getVendorsCreate
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
responses:
200:
- description: "A blank task object"
+ description: "A blank vendor object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13882,7 +14120,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Task"
+ $ref: "#/components/schemas/Vendor"
401:
$ref: "#/components/responses/401"
403:
@@ -13895,13 +14133,13 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- /api/v1/tasks/bulk:
+ /api/v1/vendors/bulk:
post:
tags:
- - tasks
- summary: "Bulk task actions"
+ - vendors
+ summary: "Bulk vendor actions"
description: ""
- operationId: bulkTasks
+ operationId: bulkVendors
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
@@ -13919,7 +14157,7 @@ paths:
example: "[0,1,2,3]"
responses:
200:
- description: "The Task User response"
+ description: "The Vendor User response"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13930,7 +14168,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Task"
+ $ref: "#/components/schemas/Vendor"
401:
$ref: "#/components/responses/401"
403:
@@ -13943,20 +14181,20 @@ paths:
description: 'Server error'
default:
$ref: "#/components/responses/default"
- "/api/v1/tasks/{id}/upload":
+ "/api/v1/vendors/{id}/upload":
post:
tags:
- - tasks
- summary: "Uploads a task document"
- description: "Handles the uploading of a document to a task"
- operationId: uploadTask
+ - vendors
+ summary: "Uploads a vendor document"
+ description: "Handles the uploading of a document to a vendor"
+ operationId: uploadVendor
parameters:
- $ref: "#/components/parameters/X-API-TOKEN"
- $ref: "#/components/parameters/X-Requested-With"
- $ref: "#/components/parameters/include"
- name: id
in: path
- description: "The Task Hashed ID"
+ description: "The Vendor Hashed ID"
required: true
schema:
type: string
@@ -13981,7 +14219,7 @@ paths:
format: binary
responses:
200:
- description: "Returns the Task object"
+ description: "Returns the Vendor object"
headers:
X-MINIMUM-CLIENT-VERSION:
$ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
@@ -13992,40 +14230,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Task"
- 401:
- $ref: "#/components/responses/401"
- 403:
- $ref: "#/components/responses/403"
- 422:
- $ref: '#/components/responses/422'
- 429:
- $ref: '#/components/responses/429'
- 5XX:
- description: 'Server error'
- default:
- $ref: "#/components/responses/default"
- /api/v1/tasks/sort:
- post:
- tags:
- - tasks
- summary: "Sort tasks on KanBan"
- description: "Sorts tasks after drag and drop on the KanBan."
- operationId: sortTasks
- parameters:
- - $ref: "#/components/parameters/X-API-TOKEN"
- - $ref: "#/components/parameters/X-Requested-With"
- - $ref: "#/components/parameters/include"
- responses:
- 200:
- description: "Returns an Ok, 200 HTTP status"
- headers:
- X-MINIMUM-CLIENT-VERSION:
- $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
- X-RateLimit-Remaining:
- $ref: "#/components/headers/X-RateLimit-Remaining"
- X-RateLimit-Limit:
- $ref: "#/components/headers/X-RateLimit-Limit"
+ $ref: "#/components/schemas/Vendor"
401:
$ref: "#/components/responses/401"
403:
@@ -14065,7 +14270,6 @@ components:
# id: Opnel5aKBz
# user_id: Ua6Rw4pVbS
# assigned_user_id: Ua6Rw4pVbS
- # company_id: Co7Vn3yLmW
# name: "Jim's Housekeeping"
# website: https://www.jims-housekeeping.com
# private_notes: Client prefers email communication over phone calls
@@ -14133,49 +14337,43 @@ components:
# - prev: null
# - next: null
responses:
- 500:
- description: 'Gateway Error'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Error'
- 403:
- description: 'Authorization error'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AuthorizationError'
-
- default:
- description: 'Unexpected Error'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Error'
429:
description: 'Rate Limit Exceeded'
content:
application/json:
schema:
$ref: '#/components/schemas/RateLimiterError'
+
+ 403:
+ description: 'Authorization error'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthorizationError'
422:
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationError'
- 401:
- description: 'Authentication error'
+ default:
+ description: 'Unexpected Error'
content:
application/json:
schema:
- $ref: '#/components/schemas/AuthenticationError'
+ $ref: '#/components/schemas/Error'
400:
description: 'Invalid user input'
content:
application/json:
schema:
$ref: '#/components/schemas/InvalidInputError'
+ 401:
+ description: 'Authentication error'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticationError'
parameters:
X-API-SECRET:
name: X-API-SECRET
@@ -14484,10 +14682,6 @@ components:
description: 'The user hashed id'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
name:
description: 'The name of the group'
type: string
@@ -14751,243 +14945,189 @@ components:
type: string
example: JSON
type: object
- Credit:
+ Product:
+ type: object
properties:
id:
- description: "The unique hashed ID of the credit"
+ type: string
+ description: 'The hashed product ID.'
+ example: eP01N
+ readOnly: true
+ user_id:
+ type: string
+ description: 'The hashed ID of the user that created this product.'
+ example: n30m4
+ readOnly: true
+ assigned_user_id:
+ type: string
+ description: 'The hashed ID of the user assigned to this product.'
+ example: pR0j3
+ project_id:
+ type: string
+ description: 'The hashed ID of the project that this product is associated with.'
+ example: pR0j3
+ vendor_id:
+ type: string
+ description: 'The hashed ID of the vendor that this product is associated with.'
+ example: pR0j3
+ custom_value1:
+ type: string
+ description: 'Custom value field 1.'
+ example: 'Custom value 1'
+ custom_value2:
+ type: string
+ description: 'Custom value field 2.'
+ example: 'Custom value 2'
+ custom_value3:
+ type: string
+ description: 'Custom value field 3.'
+ example: 'Custom value 3'
+ custom_value4:
+ type: string
+ description: 'Custom value field 4.'
+ example: 'Custom value 4'
+ product_key:
+ type: string
+ description: 'The product key.'
+ example: '1234'
+ notes:
+ type: string
+ description: 'Notes about the product.'
+ example: 'These are some notes about the product.'
+ cost:
+ type: number
+ format: double
+ description: 'The cost of the product. (Your purchase price for this product)'
+ example: 10.0
+ price:
+ type: number
+ format: double
+ description: 'The price of the product that you are charging.'
+ example: 20.0
+ quantity:
+ type: number
+ format: double
+ description: 'The quantity of the product. (used as a default)'
+ example: 5.0
+ tax_name1:
+ type: string
+ description: 'The name of tax 1.'
+ example: 'Tax 1'
+ tax_rate1:
+ type: number
+ format: double
+ description: 'The rate of tax 1.'
+ example: 10.0
+ tax_name2:
+ type: string
+ description: 'The name of tax 2.'
+ example: 'Tax 2'
+ tax_rate2:
+ type: number
+ format: double
+ description: 'The rate of tax 2.'
+ example: 5.0
+ tax_name3:
+ type: string
+ description: 'The name of tax 3.'
+ example: 'Tax 3'
+ tax_rate3:
+ type: number
+ format: double
+ description: 'The rate of tax 3.'
+ example: 0.0
+ archived_at:
+ type: integer
+ format: timestamp
+ description: 'The timestamp when the product was archived.'
+ example: '2022-03-18T15:00:00Z'
+ readOnly: true
+ created_at:
+ type: integer
+ format: timestamp
+ description: 'The timestamp when the product was created.'
+ example: '2022-03-18T15:00:00Z'
+ readOnly: true
+ updated_at:
+ description: Timestamp
+ type: integer
+ format: timestamp
+ example: '2022-03-18T12:34:56.789Z'
+ readOnly: true
+ is_deleted:
+ type: boolean
+ description: 'Boolean flag determining if the product has been deleted'
+ example: false
+ readOnly: true
+ in_stock_quantity:
+ type: integer
+ format: int32
+ description: The quantity of the product that is currently in stock
+ default: 0
+ stock_notification:
+ type: boolean
+ description: Indicates whether stock notifications are enabled for this product
+ default: true
+ stock_notification_threshold:
+ type: integer
+ format: int32
+ description: The minimum quantity threshold for which stock notifications will be triggered
+ default: 0
+ max_quantity:
+ type: integer
+ format: int32
+ description: The maximum quantity that can be ordered for this product
+ product_image:
+ type: string
+ description: The URL of the product image
+ format: uri-reference
+ tax_id:
+ type: string
+ default: '1'
+ description: |
+ The tax category id for this product.'
+
+ The following constants are available (default = '1')
+
+ ```
+ PRODUCT_TYPE_PHYSICAL = '1'
+ PRODUCT_TYPE_SERVICE = '2'
+ PRODUCT_TYPE_DIGITAL = '3'
+ PRODUCT_TYPE_SHIPPING = '4'
+ PRODUCT_TYPE_EXEMPT = '5'
+ PRODUCT_TYPE_REDUCED_TAX = '6'
+ PRODUCT_TYPE_OVERRIDE_TAX = '7'
+ PRODUCT_TYPE_ZERO_RATED = '8'
+ PRODUCT_TYPE_REVERSE_TAX = '9'
+ ```
+ example: '1'
+
+ ExpenseCategory:
+ properties:
+ id:
+ description: 'The expense hashed id'
type: string
example: Opnel5aKBz
+ name:
+ description: 'The expense category name'
+ type: string
+ example: Accounting
user_id:
- description: "The unique hashed ID of the user associated with the credit"
+ description: 'The user hashed id'
type: string
- example: 1a2b3c4d5e
- assigned_user_id:
- description: "The unique hashed ID of the assigned user responsible for the credit"
- type: string
- example: 6f7g8h9i0j
- company_id:
- description: "The unique hashed ID of the company associated with the credit"
- type: string
- example: k1l2m3n4o5
- client_id:
- description: "The unique hashed ID of the client associated with the credit"
- type: string
- example: p1q2r3s4t5
- status_id:
- description: "The ID representing the current status of the credit"
- type: string
- example: 3
- invoice_id:
- description: "The unique hashed ID of the linked invoice to which the credit is applied"
- type: string
- example: u1v2w3x4y5
- number:
- description: "The unique alphanumeric credit number per company"
- type: string
- example: QUOTE_101
- po_number:
- description: "The purchase order number referred to by the credit"
- type: string
- example: PO_12345
- terms:
- description: "The terms associated with the credit"
- type: string
- example: "Net 30"
- public_notes:
- description: "Public notes for the credit"
- type: string
- example: "Thank you for your business."
- private_notes:
- description: "Private notes for internal use, not visible to the client"
- type: string
- example: "Client is requesting a discount."
- footer:
- description: "The footer text for the credit"
- type: string
- example: "Footer text goes here."
- custom_value1:
- description: "Custom value 1 for additional credit information"
- type: string
- example: "Custom data 1"
- custom_value2:
- description: "Custom value 2 for additional credit information"
- type: string
- example: "Custom data 2"
- custom_value3:
- description: "Custom value 3 for additional credit information"
- type: string
- example: "Custom data 3"
- custom_value4:
- description: "Custom value 4 for additional credit information"
- type: string
- example: "Custom data 4"
- tax_name1:
- description: "The name of the first tax applied to the credit"
- type: string
- example: "VAT"
- tax_name2:
- description: "The name of the second tax applied to the credit"
- type: string
- example: "GST"
- tax_rate1:
- description: "The rate of the first tax applied to the credit"
- type: number
- format: float
- example: 10.00
- tax_rate2:
- description: "The rate of the second tax applied to the credit"
- type: number
- format: float
- example: 5.00
- tax_name3:
- description: "The name of the third tax applied to the credit"
- type: string
- example: "PST"
- tax_rate3:
- description: "The rate of the third tax applied to the credit"
- type: number
- format: float
- example: 8.00
- total_taxes:
- description: "The total amount of taxes for the credit"
- type: number
- format: float
- example: 23.00
- line_items:
- type: array
- description: 'An array of objects which define the line items of the credit'
- items:
- $ref: '#/components/schemas/InvoiceItem'
- amount:
- description: "The total amount of the credit"
- type: number
- format: float
- example: 100.00
- balance:
- description: "The outstanding balance of the credit"
- type: number
- format: float
- example: 50.00
- paid_to_date:
- description: "The total amount paid to date for the credit"
- type: number
- format: float
- example: 50.00
- discount:
- description: "The discount applied to the credit"
- type: number
- format: float
- example: 10.00
- partial:
- description: "The partial amount applied to the credit"
- type: number
- format: float
- example: 20.00
- is_amount_discount:
- description: "Indicates whether the discount applied is a fixed amount or a percentage"
- type: boolean
- example: true
+ example: XS987sD
is_deleted:
- description: "Indicates whether the credit has been deleted"
- type: boolean
- example: false
- uses_inclusive_taxes:
- description: "Indicates whether the tax rates applied to the credit are inclusive or exclusive"
+ description: 'Flag determining whether the expense category has been deleted'
type: boolean
example: true
- date:
- description: "The date the credit was issued"
- type: string
- format: date
- example: "1994-07-30"
- last_sent_date:
- description: "The date the credit was last sent out"
- type: string
- format: date
- example: "1994-07-30"
- next_send_date:
- description: "The next scheduled date for sending a credit reminder"
- type: string
- format: date
- example: "1994-07-30"
- partial_due_date:
- description: "The due date for the partial amount of the credit"
- type: string
- format: date
- example: "1994-07-30"
- due_date:
- description: "The due date for the total amount of the credit"
- type: string
- format: date
- example: "1994-07-30"
- settings:
- $ref: "#/components/schemas/CompanySettings"
- last_viewed:
- description: "The timestamp of the last time the credit was viewed"
- type: number
- format: integer
- example: 1434342123
updated_at:
- description: "The timestamp of the last time the credit was updated"
- type: number
- format: integer
- example: 1434342123
- archived_at:
- description: "The timestamp of the last time the credit was archived"
- type: number
- format: integer
- example: 1434342123
- custom_surcharge1:
- description: "First custom surcharge amount"
- type: number
- format: float
- example: 10.00
- custom_surcharge2:
- description: 'Second Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge3:
- description: 'Third Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge4:
- description: 'Fourth Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge_tax1:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax2:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax3:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax4:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- type: object
-
- GenericBulkAction:
- properties:
- action:
- type: string
- example: archive
- description: 'The action to perform ie. archive / restore / delete'
- ids:
- type: array
- items:
- format: string
- type: string
- example: 2J234DFA,D2J234DFA,D2J234DFA
- description: string array of client hashed ids
+ description: 'The updated at timestamp'
+ type: integer
+ example: '2'
+ created_at:
+ description: 'The created at timestamp'
+ type: integer
+ example: '2'
type: object
ProductRequest:
type: object
@@ -15149,1419 +15289,224 @@ components:
```
example: '1'
- CompanyLedger:
+ CompanyToken:
properties:
- entity_id:
- description: 'This field will reference one of the following entity hashed ID payment_id, invoice_id or credit_id'
+ name:
+ description: 'The token name'
+ type: string
+ example: 'Token Name'
+ token:
+ description: 'The token value'
+ type: string
+ example: AS3df3jUUH765fhfd9KJuidj3JShjA
+ is_system:
+ description: 'Determines whether the token is created by the system rather than a user'
+ type: boolean
+ example: 'true'
+ type: object
+ Document:
+ properties:
+ id:
+ description: 'The document hashed id'
type: string
example: AS3df3A
- notes:
- description: 'The notes which reference this entry of the ledger'
+ user_id:
+ description: 'The user hashed id'
type: string
- example: 'Credit note for invoice #3212'
- balance:
- description: 'The client balance'
- type: number
- format: float
- example: '10.00'
- adjustment:
- description: 'The amount the client balance is adjusted by'
- type: number
- format: float
- example: '10.00'
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
+ example: ''
+ assigned_user_id:
+ description: 'The assigned user hashed id'
+ type: string
+ example: ''
+ project_id:
+ description: 'The project associated with this document'
+ type: string
+ example: ''
+ vendor_id:
+ description: 'The vendor associated with this documents'
+ type: string
+ example: ''
+ name:
+ description: 'The document name'
+ type: string
+ example: Beauty
+ url:
+ description: 'The document url'
+ type: string
+ example: Beauty
+ preview:
+ description: 'The document preview url'
+ type: string
+ example: Beauty
+ type:
+ description: 'The document type'
+ type: string
+ example: Beauty
+ disk:
+ description: 'The document disk'
+ type: string
+ example: Beauty
+ hash:
+ description: 'The document hashed'
+ type: string
+ example: Beauty
+ is_deleted:
+ description: 'Flag to determine if the document is deleted'
+ type: boolean
+ example: true
+ is_default:
+ description: 'Flag to determine if the document is a default doc'
+ type: boolean
+ example: true
created_at:
description: Timestamp
type: number
format: integer
- example: '1434342123'
- type: object
- Invoice:
- properties:
- id:
- description: 'The invoice hashed id'
- type: string
- example: Opnel5aKBz
- readOnly: true
- user_id:
- description: 'The user hashed id'
- type: string
- example: Opnel5aKBz
- readOnly: true
- assigned_user_id:
- description: 'The assigned user hashed id'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
- readOnly: true
- client_id:
- description: 'The client hashed id'
- type: string
- example: Opnel5aKBz
- status_id:
- description: 'The invoice status variable'
- type: string
- example: '4'
- number:
- description: 'The invoice number - is a unique alpha numeric number per invoice per company'
- type: string
- example: INV_101
- po_number:
- description: 'The purchase order associated with this invoice'
- type: string
- example: PO-1234
- terms:
- description: 'The invoice terms'
- type: string
- example: 'These are invoice terms'
- public_notes:
- description: 'The public notes of the invoice'
- type: string
- example: 'These are some public notes'
- private_notes:
- description: 'The private notes of the invoice'
- type: string
- example: 'These are some private notes'
- footer:
- description: 'The invoice footer notes'
- type: string
- example: ''
- custom_value1:
- description: 'A custom field value'
- type: string
- example: '2022-10-01'
- custom_value2:
- description: 'A custom field value'
- type: string
- example: 'Something custom'
- custom_value3:
- description: 'A custom field value'
- type: string
- example: ''
- custom_value4:
- description: 'A custom field value'
- type: string
- example: ''
- tax_name1:
- description: 'The tax name'
- type: string
- example: ''
- tax_name2:
- description: 'The tax name'
- type: string
- example: ''
- tax_rate1:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_rate2:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_name3:
- description: 'The tax name'
- type: string
- example: ''
- tax_rate3:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- total_taxes:
- description: 'The total taxes for the invoice'
- type: number
- format: float
- example: '10.00'
- line_items:
- type: array
- description: 'An array of objects which define the line items of the invoice'
- items:
- $ref: '#/components/schemas/InvoiceItem'
- invitations:
- type: array
- description: 'An array of objects which define the invitations of the invoice'
- items:
- $ref: '#/components/schemas/InvoiceInvitation'
- amount:
- description: 'The invoice amount'
- type: number
- format: float
- example: '10.00'
- balance:
- description: 'The invoice balance'
- type: number
- format: float
- example: '10.00'
- paid_to_date:
- description: 'The amount paid on the invoice to date'
- type: number
- format: float
- example: '10.00'
- discount:
- description: 'The invoice discount, can be an amount or a percentage'
- type: number
- format: float
- example: '10.00'
- partial:
- description: 'The deposit/partial amount'
- type: number
- format: float
- example: '10.00'
- is_amount_discount:
- description: 'Flag determining if the discount is an amount or a percentage'
- type: boolean
- example: true
- is_deleted:
- description: 'Defines if the invoice has been deleted'
- type: boolean
- example: true
- uses_inclusive_taxes:
- description: 'Defines the type of taxes used as either inclusive or exclusive'
- type: boolean
- example: true
- date:
- description: 'The Invoice Date'
- type: string
- format: date
- example: '1994-07-30'
- last_sent_date:
- description: 'The last date the invoice was sent out'
- type: string
- format: date
- example: '1994-07-30'
- next_send_date:
- description: 'The Next date for a reminder to be sent'
- type: string
- format: date
- example: '1994-07-30'
- partial_due_date:
- description: 'The due date for the deposit/partial amount'
- type: string
- format: date
- example: '1994-07-30'
- due_date:
- description: 'The due date of the invoice'
- type: string
- format: date
- example: '1994-07-30'
- last_viewed:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
+ example: '134341234234'
updated_at:
description: Timestamp
type: number
format: integer
- example: '1434342123'
- archived_at:
+ example: '134341234234'
+ deleted_at:
description: Timestamp
type: number
format: integer
- example: '1434342123'
- custom_surcharge1:
- description: 'First Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge2:
- description: 'Second Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge3:
- description: 'Third Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge4:
- description: 'Fourth Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge_tax1:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax2:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax3:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax4:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- project_id:
- description: 'The project associated with this invoice'
- type: string
- example: Opnel5aKBz
- auto_bill_tries:
- description: 'The number of times the invoice has attempted to be auto billed'
- type: integer
- example: '1'
- readOnly: true
- auto_bill_enabled:
- description: 'Boolean flag determining if the invoice is set to auto bill'
- type: boolean
- example: true
- subscription_id:
- description: 'The subscription associated with this invoice'
- type: string
- example: Opnel5aKBz
-
+ example: '134341234234'
type: object
- Company:
+ Payment:
properties:
id:
- description: "The unique hashed identifier for the company"
- type: string
- example: WJxbojagwO
- size_id:
- description: "The unique identifier representing the company's size category"
- type: string
- example: '2'
- industry_id:
- description: "The unique identifier representing the company's industry category"
- type: string
- example: '5'
- slack_webhook_url:
- description: "The URL for the company's Slack webhook notifications"
- type: string
- example: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
- google_analytics_key:
- description: "The company's Google Analytics tracking ID"
- type: string
- example: 'UA-123456789-1'
- portal_mode:
- description: "The mode determining how client-facing URLs are structured (e.g., subdomain, domain, or iframe)"
- type: string
- example: subdomain
- subdomain:
- description: "The subdomain prefix for the company's domain (e.g., 'acme' in acme.domain.com)"
- type: string
- example: acme
- portal_domain:
- description: "The fully qualified domain used for client-facing URLs"
- type: string
- example: 'https://subdomain.invoicing.co'
- enabled_tax_rates:
- description: "The number of tax rates used per entity"
- type: integer
- example: '2'
- fill_products:
- description: "A flag determining whether to auto-fill product descriptions based on the product key"
- type: boolean
- example: true
- convert_products:
- description: "A flag determining whether to convert products between different types or units"
- type: boolean
- example: true
- update_products:
- description: "A flag determining whether to update product descriptions when the description changes"
- type: boolean
- example: true
- show_product_details:
- description: "A flag determining whether to display product details in the user interface"
- type: boolean
- example: true
- show_product_cost:
- description: "A flag determining whether to display product cost is shown in the user interface"
- type: boolean
- example: true
- custom_fields:
- description: "A mapping of custom fields for various objects within the company"
- type: object
- enable_product_cost:
- description: "A flag determining whether to show or hide the product cost field in the user interface"
- type: boolean
- example: true
- enable_product_quantity:
- description: "A flag determining whether to show or hide the product quantity field in the user interface"
- type: boolean
- example: true
- default_quantity:
- description: "A flag determining whether to use a default quantity for products"
- type: boolean
- example: true
- custom_surcharge_taxes1:
- description: "A flag determining whether to apply taxes on custom surcharge amounts for the first custom surcharge field"
- type: boolean
- example: true
- custom_surcharge_taxes2:
- description: "A flag determining whether to apply taxes on custom surcharge amounts for the second custom surcharge field"
- type: boolean
- example: true
- custom_surcharge_taxes3:
- description: "A flag determining whether to apply taxes on custom surcharge amounts for the third custom surcharge field"
- type: boolean
- example: true
- custom_surcharge_taxes4:
- description: "A flag determining whether to apply taxes on custom surcharge amounts for the fourth custom"
- logo:
- description: "The company logo file in binary format"
- type: string
- format: binary
- example: logo.png
- company_key:
- description: "The static company key hash used to identify the Company"
- readOnly: true
- type: string
- example: "Vnb14bRlwiFjc5ckte6cfbygTRkn5IMQ"
- client_can_register:
- description: "A flag determining whether clients can register for the client portal"
- type: boolean
- example: true
- enabled_modules:
- type: integer
- description: |
- Bitmask representation of the modules that are enabled in the application
-
- ```
- self::ENTITY_RECURRING_INVOICE => 1,
- self::ENTITY_CREDIT => 2,
- self::ENTITY_QUOTE => 4,
- self::ENTITY_TASK => 8,
- self::ENTITY_EXPENSE => 16,
- self::ENTITY_PROJECT => 32,
- self::ENTITY_VENDOR => 64,
- self::ENTITY_TICKET => 128,
- self::ENTITY_PROPOSAL => 256,
- self::ENTITY_RECURRING_EXPENSE => 512,
- self::ENTITY_RECURRING_TASK => 1024,
- self::ENTITY_RECURRING_QUOTE => 2048,
- ```
-
- The default per_page value is 20.
-
- example: 2048
- db:
- readOnly: true
- type: string
- example: 'db-ninja-01'
- first_day_of_week:
- description: "The first day of the week for the company"
- type: string
- example: '1'
- first_month_of_year:
- description: "The first month for the company financial year"
- type: string
- example: '1'
- enabled_item_tax_rates:
- description: "The number of tax rates used per item"
- type: integer
- example: 2
- is_large:
- description: "A flag determining whether the company is considered large"
- type: boolean
- example: true
- default_auto_bill:
- type: string
- example: 'always'
- description: |
- A flag determining whether to auto-bill clients by default
-
- values:
-
- - always - Always auto bill
- - disabled - Never auto bill
- - optin - Allow the client to select their auto bill status with the default being disabled
- - optout -Allow the client to select their auto bill status with the default being enabled
- mark_expenses_invoiceable:
- description: "A flag determining whether to mark expenses as invoiceable by default"
- type: boolean
- example: true
- mark_expenses_paid:
- description: "A flag determining whether to mark expenses as paid by default"
- type: boolean
- example: true
- invoice_expense_documents:
- description: "A flag determining whether to include expense documents on invoices by default"
- type: boolean
- example: true
- auto_start_tasks:
- description: "A flag determining whether to auto-start tasks by default"
- type: boolean
- example: true
- invoice_task_timelog:
- description: "A flag determining whether to include task time logs on invoices by default"
- type: boolean
- example: true
- invoice_task_documents:
- description: "A flag determining whether to include task documents on invoices by default"
- type: boolean
- example: true
- show_tasks_table:
- description: "A flag determining whether to show the tasks table on invoices by default"
- type: boolean
- example: true
- is_disabled:
- description: "A flag determining whether the company is disabled"
- type: boolean
- example: true
- default_task_is_date_based:
- description: "A flag determining whether to default tasks to be date-based"
- type: boolean
- example: true
- enable_product_discount:
- description: "A flag determining whether to show or hide the product discount field in the user interface"
- type: boolean
- example: true
- calculate_expense_tax_by_amount:
- description: "A flag determining whether to calculate expense taxes by amount"
- type: boolean
- example: true
- expense_inclusive_taxes:
- description: "A flag determining whether to include taxes in the expense amount"
- type: boolean
- example: true
- session_timeout:
- description: "The session timeout for the company"
- type: integer
- example: 60
- oauth_password_required:
- description: "A flag determining whether to require a password for `dangerous` actions when using OAuth"
- type: boolean
- example: true
- invoice_task_datelog:
- description: "A flag determining whether to include task date logs on invoices by default"
- type: boolean
- example: true
- default_password_timeout:
- description: "The default password timeout for the company"
- type: integer
- example: 60
- show_task_end_date:
- description: "A flag determining whether to show the task end date on invoices by default"
- type: boolean
- example: true
- markdown_enabled:
- description: "A flag determining whether markdown is enabled for the company"
- type: boolean
- example: true
- report_include_drafts:
- description: "A flag determining whether to include draft invoices in reports"
- type: boolean
- example: true
- client_registration_fields:
- description: "The client registration fields for the company"
- type: object
- stop_on_unpaid_recurring:
- description: "A flag determining whether to stop recurring invoices when they are unpaid"
- type: boolean
- example: true
- use_quote_terms_on_conversion:
- description: "A flag determining whether to use quote terms on conversion to an invoice"
- type: boolean
- example: true
- enable_applying_payments:
- description: "A flag determining whether to enable applying payments to invoices"
- type: boolean
- example: true
- track_inventory:
- description: "A flag determining whether to track inventory for the company"
- type: boolean
- example: true
- inventory_notification_threshold:
- description: "The inventory notification threshold for the company"
- type: integer
- example: 60
- stock_notification:
- description: "A flag determining whether to send stock notifications for the company"
- type: boolean
- example: true
- matomo_url:
- description: "The Matomo URL for the company"
- type: string
- example: 'https://matomo.example.com'
- matomo_id:
- description: "The Matomo ID for the company"
- type: string
- example: '1'
- enabled_expense_tax_rates:
- description: "The number of tax rates used per expense"
- type: integer
- example: 2
- invoice_task_project:
- description: "A flag determining whether to include the project on invoices by default"
- type: boolean
- example: true
- report_include_deleted:
- description: "A flag determining whether to include deleted invoices in reports"
- type: boolean
- example: true
- invoice_task_lock:
- description: "A flag determining whether to lock tasks when invoiced"
- type: boolean
- example: true
- convert_payment_currency:
- description: "A flag determining whether to convert the payment currency"
- type: boolean
- example: true
- convert_expense_currency:
- description: "A flag determining whether to convert the expense currency"
- type: boolean
- example: true
- notify_vendor_when_paid:
- description: "A flag determining whether to notify the vendor when an expense is paid"
- type: boolean
- example: true
- invoice_task_hours:
- description: "A flag determining whether to include the task hours on invoices by default"
- type: boolean
- example: true
- calculate_taxes:
- description: "A flag determining whether to calculate taxes for the company"
- type: boolean
- example: true
- tax_data:
- description: "The tax data for the company"
- type: object
- e_invoice_certificate:
- description: "The e-invoice certificate for the company"
- type: string
- example: '-----BEGIN CERTIFICATE-----'
- e_invoice_certificate_passphrase:
- description: "The e-invoice certificate passphrase for the company"
- type: string
- example: 'secret'
- origin_tax_data:
- description: "The origin tax data for the company"
- type: object
- invoice_task_project_header:
- description: "A flag determining whether to include the project header on invoices by default"
- type: boolean
- example: true
- invoice_task_item_description:
- description: "A flag determining whether to include the item description on invoices by default"
- type: boolean
- example: true
-
- settings:
- $ref: '#/components/schemas/CompanySettings'
- type: object
- InvoiceRequest:
- required:
- - client_id
- properties:
- id:
- description: 'The invoice hashed id'
+ description: 'The payment hashed id'
type: string
example: Opnel5aKBz
- readOnly: true
- user_id:
- description: 'The user hashed id'
- type: string
- example: Opnel5aKBz
- assigned_user_id:
- description: 'The assigned user hashed id'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
- readOnly: true
client_id:
description: 'The client hashed id'
type: string
example: Opnel5aKBz
- status_id:
- description: 'The invoice status variable'
- type: string
- example: '4'
- readOnly: true
- number:
- description: 'The invoice number - is a unique alpha numeric number per invoice per company'
- type: string
- example: INV_101
- po_number:
- description: 'The purchase order associated with this invoice'
- type: string
- example: PO-1234
- terms:
- description: 'The invoice terms'
- type: string
- example: 'These are invoice terms'
- public_notes:
- description: 'The public notes of the invoice'
- type: string
- example: 'These are some public notes'
- private_notes:
- description: 'The private notes of the invoice'
- type: string
- example: 'These are some private notes'
- footer:
- description: 'The invoice footer notes'
- type: string
- example: ''
- custom_value1:
- description: 'A custom field value'
- type: string
- example: '2022-10-01'
- custom_value2:
- description: 'A custom field value'
- type: string
- example: 'Something custom'
- custom_value3:
- description: 'A custom field value'
- type: string
- example: ''
- custom_value4:
- description: 'A custom field value'
- type: string
- example: ''
- tax_name1:
- description: 'The tax name'
- type: string
- example: ''
- tax_name2:
- description: 'The tax name'
- type: string
- example: ''
- tax_rate1:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_rate2:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_name3:
- description: 'The tax name'
- type: string
- example: ''
- tax_rate3:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- total_taxes:
- description: 'The total taxes for the invoice'
- type: number
- format: float
- example: '10.00'
- readOnly: true
- line_items:
- type: array
- description: 'An array of objects which define the line items of the invoice'
- items:
- $ref: '#/components/schemas/InvoiceItem'
- invitations:
- type: array
- description: 'An array of objects which define the invitations of the invoice'
- items:
- $ref: '#/components/schemas/InvoiceInvitationRequest'
- amount:
- description: 'The invoice amount'
- type: number
- format: float
- example: '10.00'
- readOnly: true
- balance:
- description: 'The invoice balance'
- type: number
- format: float
- example: '10.00'
- readOnly: true
- paid_to_date:
- description: 'The amount paid on the invoice to date'
- type: number
- format: float
- example: '10.00'
- readOnly: true
- discount:
- description: 'The invoice discount, can be an amount or a percentage'
- type: number
- format: float
- example: '10.00'
- partial:
- description: 'The deposit/partial amount'
- type: number
- format: float
- example: '10.00'
- is_amount_discount:
- description: 'Flag determining if the discount is an amount or a percentage'
- type: boolean
- example: true
- is_deleted:
- description: 'Defines if the invoice has been deleted'
- type: boolean
- example: true
- readOnly: true
- uses_inclusive_taxes:
- description: 'Defines the type of taxes used as either inclusive or exclusive'
- type: boolean
- example: true
- date:
- description: 'The Invoice Date'
- type: string
- format: date
- example: '1994-07-30'
- last_sent_date:
- description: 'The last date the invoice was sent out'
- type: string
- format: date
- example: '1994-07-30'
- readOnly: true
- next_send_date:
- description: 'The Next date for a reminder to be sent'
- type: string
- format: date
- example: '1994-07-30'
- readOnly: true
- partial_due_date:
- description: 'The due date for the deposit/partial amount'
- type: string
- format: date
- example: '1994-07-30'
- due_date:
- description: 'The due date of the invoice'
- type: string
- format: date
- example: '1994-07-30'
- last_viewed:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- readOnly: true
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- readOnly: true
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- readOnly: true
- custom_surcharge1:
- description: 'First Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge2:
- description: 'Second Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge3:
- description: 'Third Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge4:
- description: 'Fourth Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge_tax1:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax2:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax3:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax4:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- project_id:
- description: 'The project associated with this invoice'
+ invitation_id:
+ description: 'The invitation hashed id'
type: string
example: Opnel5aKBz
- type: object
- SystemLog:
- properties:
- id:
- description: 'The account hashed id'
+ client_contact_id:
+ description: 'The client contact hashed id'
type: string
- example: AS3df3A
- company_id:
- description: 'The company hashed id'
- type: string
- example: AS3df3A
+ example: Opnel5aKBz
user_id:
- description: 'The user_id hashed id'
+ description: 'The user hashed id'
type: string
- example: AS3df3A
- client_id:
- description: 'The client_id hashed id'
- type: string
- example: AS3df3A
- event_id:
- description: 'The Log Type ID'
- type: integer
- example: 1
- category_id:
- description: 'The Category Type ID'
- type: integer
- example: 1
+ example: Opnel5aKBz
type_id:
- description: 'The Type Type ID'
- type: integer
- example: 1
- log:
- description: 'The json object of the error'
- type: object
- example: '{''key'':''value''}'
- updated_at:
- description: Timestamp
+ description: 'The Payment Type ID'
type: string
- example: '2'
- created_at:
- description: Timestamp
+ example: '1'
+ date:
+ description: 'The Payment date'
type: string
- example: '2'
- type: object
- Expense:
- properties:
- id:
- description: 'The expense hashed id'
+ example: 1-1-2014
+ transaction_reference:
+ description: 'The transaction reference as defined by the payment gateway'
type: string
- example: 'Opnel5aKBz'
- user_id:
- description: 'The user hashed id'
- type: string
- example: 'Opnel5aKBz'
+ example: xcsSxcs124asd
assigned_user_id:
description: 'The assigned user hashed id'
type: string
- example: 'Opnel5aKBz'
- project_id:
- description: 'The associated project_id'
- type: string
- example: 'Opnel5aKBz'
- company_id:
- description: 'The company hashed id'
- type: string
- example: 'Opnel5aKBz'
- client_id:
- description: 'The client hashed id'
- type: string
- example: 'Opnel5aKBz'
- invoice_id:
- description: 'The related invoice hashed id'
- type: string
- example: 'Opnel5aKBz'
- bank_id:
- description: 'The bank id related to this expense'
- type: string
- example: ''
- invoice_currency_id:
- description: 'The currency id of the related invoice'
- type: string
- example: '1'
- currency_id:
- description: 'The currency id of the expense'
- type: string
- example: '2'
- invoice_category_id:
- description: 'The invoice category id'
- type: string
- example: 'Opnel5aKBz'
- payment_type_id:
- description: 'The payment type id'
- type: string
- example: ''
- recurring_expense_id:
- description: 'The related recurring expense this expense was created from'
- type: string
- example: 'Opnel5aKBz'
+ example: Opnel5aKBz
private_notes:
- description: 'The private notes of the expense'
+ description: 'The private notes of the payment'
type: string
- example: ''
- public_notes:
- description: 'The public notes of the expense'
- type: string
- example: ''
- transaction_reference:
- description: 'The transaction references of the expense'
- type: string
- example: ''
- transcation_id:
- description: 'The transaction id of the expense'
- type: string
- example: ''
- custom_value1:
- description: 'A custom value'
- type: string
- example: ''
- custom_value2:
- description: 'A custom value'
- type: string
- example: ''
- custom_value3:
- description: 'A custom value'
- type: string
- example: ''
- custom_value4:
- description: 'A custom value'
- type: string
- example: ''
- tax_amount:
- description: 'The tax amount'
- type: number
- example: 10.00
- tax_name1:
- description: 'Tax Name 1'
- type: string
- example: 'GST'
- tax_name2:
- description: 'Tax Name 2'
- type: string
- example: 'VAT'
- tax_name3:
- description: 'Tax Name 3'
- type: string
- example: 'IVA'
- tax_rate1:
- description: 'Tax rate 1'
- type: number
- format: float
- example: '10.00'
- tax_rate2:
- description: 'Tax rate 2'
- type: number
- format: float
- example: '10.00'
- tax_rate3:
- description: 'Tax rate 3'
- type: number
- format: float
- example: '10.00'
- amount:
- description: 'The total expense amont'
- type: number
- format: float
- example: '10.00'
- foreign_amount:
- description: 'The total foreign amount of the expense'
- type: number
- format: float
- example: '10.00'
- exchange_rate:
- description: 'The exchange rate at the time of the expense'
- type: number
- format: float
- example: '0.80'
- date:
- description: 'The expense date format Y-m-d'
- type: string
- example: '2022-12-01'
- payment_date:
- description: 'The date of payment for the expense, format Y-m-d'
- type: string
- example: '2022-12-01'
- should_be_invoiced:
- description: 'Flag whether the expense should be invoiced'
+ example: 'The payment was refunded due to error'
+ is_manual:
+ description: 'Flags whether the payment was made manually or processed via a gateway'
type: boolean
example: true
is_deleted:
- description: 'Boolean determining whether the expense has been deleted'
+ description: 'Defines if the payment has been deleted'
type: boolean
example: true
- invoice_documents:
- description: 'Passing the expense documents over to the invoice'
- type: boolean
- example: true
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- type: object
- BankTransaction:
- properties:
- id:
- description: 'The bank integration hashed id'
- type: string
- example: AS3df3A
- company_id:
- description: 'The company hashed id'
- type: string
- example: AS3df3A
- user_id:
- description: 'The user hashed id'
- type: string
- example: AS3df3A
- transaction_id:
- description: 'The id of the transaction rule'
- type: integer
- example: 343434
amount:
- description: 'The transaction amount'
+ description: 'The amount of this payment'
type: number
example: 10
- currency_id:
- description: 'The currency ID of the currency'
+ refunded:
+ description: 'The refunded amount of this payment'
+ type: number
+ example: 10
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ company_gateway_id:
+ description: 'The company gateway id'
type: string
- example: '1'
- account_type:
- description: 'The account type'
+ example: '3'
+ paymentables:
+ $ref: '#/components/schemas/Paymentable'
+ invoices:
+ description: ''
+ type: array
+ items:
+ $ref: '#/components/schemas/InvoicePaymentable'
+ credits:
+ description: ''
+ type: array
+ items:
+ $ref: '#/components/schemas/CreditPaymentable'
+ number:
+ description: 'The payment number - is a unique alpha numeric number per payment per company'
type: string
- example: creditCard
- description:
- description: 'The description of the transaction'
+ example: PAY_101
+ type: object
+
+ BankTransactionRule:
+ properties:
+ id:
+ description: 'The bank transaction rules hashed id'
type: string
- example: 'Potato purchases for kevin'
- category_id:
- description: 'The category id'
- type: integer
- example: 1
- category_type:
- description: 'The category description'
+ example: AS3df3A
+ user_id:
+ description: 'The user hashed id'
type: string
- example: Expenses
- base_type:
- description: 'Either CREDIT or DEBIT'
+ example: AS3df3A
+ name:
+ description: 'The name of the transaction'
+ type: string
+ example: 'Rule 1'
+ rules:
+ description: 'A mapped collection of the sub rules for the BankTransactionRule'
+ type: array
+ items:
+ $ref: '#/components/schemas/BTRules'
+ auto_convert:
+ description: 'Flags whether the rule converts the transaction automatically'
+ type: boolean
+ example: true
+ matches_on_all:
+ description: 'Flags whether all subrules are required for the match'
+ type: boolean
+ example: true
+ applies_to:
+ description: 'Flags whether the rule applies to a CREDIT or DEBIT'
type: string
example: CREDIT
- date:
- description: 'The date of the transaction'
- type: string
- example: '2022-09-01'
- bank_account_id:
- description: 'The ID number of the bank account'
- type: integer
- example: '1'
- type: object
- ExpenseCategory:
- properties:
- id:
- description: 'The expense hashed id'
- type: string
- example: Opnel5aKBz
- name:
- description: 'The expense category name'
- type: string
- example: Accounting
- user_id:
- description: 'The user hashed id'
- type: string
- example: XS987sD
- is_deleted:
- description: 'Flag determining whether the expense category has been deleted'
- type: boolean
- example: true
- updated_at:
- description: 'The updated at timestamp'
- type: integer
- example: '2'
- created_at:
- description: 'The created at timestamp'
- type: integer
- example: '2'
- type: object
- BankIntegration:
- properties:
- id:
- description: 'The bank integration hashed id'
- type: string
- example: AS3df3A
- company_id:
- description: 'The company hashed id'
- type: string
- example: AS3df3A
- user_id:
- description: 'The user hashed id'
- type: string
- example: AS3df3A
- provider_bank_name:
- description: 'The providers bank name'
- type: string
- example: 'Chase Bank'
- bank_account_id:
- description: 'The bank account id'
- type: integer
- example: '1233434'
- bank_account_name:
- description: 'The name of the account'
- type: string
- example: 'My Checking Acc'
- bank_account_number:
- description: 'The account number'
- type: string
- example: '111 234 2332'
- bank_account_status:
- description: 'The status of the bank account'
- type: string
- example: ACTIVE
- bank_account_type:
- description: 'The type of account'
- type: string
- example: CREDITCARD
- balance:
- description: 'The current bank balance if available'
- type: number
- example: '1000000'
- currency:
- description: 'iso_3166_3 code'
- type: string
- example: USD
- type: object
- Subscription:
- properties:
- id:
- description: Unique identifier for the subscription
- type: string
- example: Opnel5aKBz
- user_id:
- description: Unique identifier for the user associated with the subscription
- type: string
- example: Ua6Rw4pVbS
- product_id:
- description: Unique identifier for the product associated with the subscription
- type: string
- example: Pr5Ft7yBmC
- company_id:
- description: Unique identifier for the company associated with the subscription
- type: string
- example: Co7Vn3yLmW
- recurring_invoice_id:
- description: Unique identifier for the recurring invoice associated with the subscription
- type: string
- example: Ri2Yt8zJkP
- is_recurring:
- description: Indicates whether the subscription is recurring
- type: boolean
- example: 'true'
- frequency_id:
- description: 'integer const representation of the frequency'
- type: string
- example: '1'
- auto_bill:
- description: 'enum setting'
- type: string
- example: always
- promo_code:
- description: Promotional code applied to the subscription
- type: string
- example: PROMOCODE4U
- promo_discount:
- description: Discount percentage or amount applied to the subscription
- type: number
- example: 10
- is_amount_discount:
- description: Indicates whether the discount is a fixed amount
- type: boolean
- example: 'true'
- allow_cancellation:
- description: Indicates whether the subscription can be cancelled
- type: boolean
- example: 'true'
- per_seat_enabled:
- description: Indicates whether the subscription pricing is per seat
- type: boolean
- example: 'true'
- currency_id:
- description: Unique identifier for the currency used in the subscription
- type: integer
- example: '1'
- max_seats_limit:
- description: Maximum number of seats allowed for the subscription
- type: integer
- example: '100'
- trial_enabled:
- description: Indicates whether the subscription has a trial period
- type: boolean
- example: 'true'
- trial_duration:
- description: Duration of the trial period in days
- type: integer
- example: '14'
- allow_query_overrides:
- description: Indicates whether query overrides are allowed for the subscription
- type: boolean
- example: 'true'
- allow_plan_changes:
- description: Indicates whether plan changes are allowed for the subscription
- type: boolean
- example: 'true'
- refund_period:
- description: Number of days within which refunds can be requested
- type: integer
- example: '30'
- webhook_configuration:
- description: Webhook configuration for the subscription
- type: string
- example: 'expand reference for this'
- is_deleted:
- description: Indicates whether the subscription has been deleted
- type: boolean
- example: 'false'
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- created_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- type: object
- BulkAction:
- type: array
- items:
- type: integer
- example: '[0,1,2,3,]'
- FillableInvoice:
- properties:
- assigned_user_id:
- description: "The assigned user's hashed ID"
- type: string
- example: 'a1b2c3d4'
client_id:
- description: "The client's hashed ID"
+ description: 'The client hashed id'
type: string
- example: 'x1y2z3a4'
- number:
- description: "The unique alphanumeric invoice number for each invoice per company"
+ example: AS3df3A
+ vendor_id:
+ description: 'The vendor hashed id'
type: string
- example: INV_101
- po_number:
- description: "The purchase order number associated with the invoice"
+ example: AS3df3A
+ category_id:
+ description: 'The category hashed id'
type: string
- example: 'PO12345'
- terms:
- description: "The terms and conditions for the invoice"
- type: string
- example: 'Net 30'
- public_notes:
- description: "Public notes visible to the client on the invoice"
- type: string
- example: 'Thank you for your business.'
- private_notes:
- description: "Private notes for internal use only"
- type: string
- example: 'Client is a slow payer.'
- footer:
- description: "The footer text displayed on the invoice"
- type: string
- example: 'Authorized Signature'
- custom_value1:
- description: "First custom value for additional information"
- type: string
- example: 'Project ABC'
- custom_value2:
- description: "Second custom value for additional information"
- type: string
- example: 'Department XYZ'
- custom_value3:
- description: "Third custom value for additional information"
- type: string
- example: 'Location 123'
- custom_value4:
- description: "Fourth custom value for additional information"
- type: string
- example: 'Currency USD'
- tax_name1:
- description: "Name of the first tax applied to the invoice"
- type: string
- example: 'VAT'
- tax_name2:
- description: "Name of the second tax applied to the invoice"
- type: string
- example: 'GST'
- tax_rate1:
- description: "Rate of the first tax applied to the invoice"
- type: number
- example: 10.00
- tax_rate2:
- description: "Rate of the second tax applied to the invoice"
- type: number
- example: 5.00
- tax_name3:
- description: "Name of the third tax applied to the invoice"
- type: string
- example: 'PST'
- tax_rate3:
- description: "Rate of the third tax applied to the invoice"
- type: number
- example: 8.00
- line_items:
- type: array
- description: 'An array of objects which define the line items of the invoice'
- items:
- $ref: '#/components/schemas/InvoiceItem'
- discount:
- description: "The discount applied to the invoice"
- type: number
- example: 10.00
- partial:
- description: "The partial amount applied to the invoice"
- type: number
- example: 20.00
- is_amount_discount:
- description: "Indicates whether the discount applied is a fixed amount or a percentage"
- type: boolean
- example: true
- uses_inclusive_taxes:
- description: "Indicates whether the tax rates applied to the invoice are inclusive or exclusive"
- type: boolean
- example: true
- date:
- description: "The date the invoice was issued"
- type: string
- example: '1994-07-30'
- partial_due_date:
- description: "The due date for the partial payment"
- type: string
- example: '1994-08-15'
- due_date:
- description: "The due date for the invoice"
- type: string
- example: '1994-08-30'
- custom_surcharge1:
- description: "First custom surcharge applied to the invoice"
- type: number
- example: 10.00
- custom_surcharge2:
- description: "Second custom surcharge applied to the invoice"
- type: number
- example: 15.00
- custom_surcharge3:
- description: "Third custom surcharge applied to the invoice"
- type: number
- example: 5.00
- custom_surcharge4:
- description: "Fourth custom surcharge applied to the invoice"
- type: number
- example: 20.00
+ example: AS3df3A
type: object
RecurringQuote:
properties:
@@ -16577,10 +15522,6 @@ components:
description: 'The assigned user hashed id'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
client_id:
description: 'The client hashed id'
type: string
@@ -16789,1847 +15730,12 @@ components:
type: boolean
example: true
type: object
- Paymentable:
- properties:
- id:
- description: 'The paymentable hashed id'
- type: string
- example: AS3df3A
- invoice_id:
- description: 'The invoice hashed id'
- type: string
- example: AS3df3A
- credit_id:
- description: 'The credit hashed id'
- type: string
- example: AS3df3A
- refunded:
- description: 'The amount that has been refunded for this payment'
- type: number
- format: float
- example: '10.00'
- amount:
- description: 'The amount that has been applied to the payment'
- type: number
- format: float
- example: '10.00'
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- created_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- type: object
- Meta:
- properties:
- pagination:
- $ref: '#/components/schemas/Pagination'
- Pagination:
- type: object
- properties:
- total:
- type: integer
- description: 'The total number of items'
- example: 1
- readOnly: true
- count:
- type: integer
- description: 'The number of items per page'
- example: 1
- readOnly: true
- per_page:
- type: integer
- description: 'The number of items per page'
- example: 1
- readOnly: true
- current_page:
- type: integer
- description: 'The current page number'
- example: 1
- readOnly: true
- total_pages:
- type: integer
- description: 'The total number of pages'
- example: 1
- readOnly: true
- links:
- type: object
- description: 'The pagination links'
- readOnly: true
- Project:
- type: object
- properties:
- id:
- description: 'The project hashed id'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The user hashed id'
- type: string
- example: Opnel5aKBz
- assigned_user_id:
- description: The assigned user identifier associated with the project
- type: string
- example: Opnel5aKBz
- client_id:
- type: string
- example: Opnel5aKBz
- description: The client identifier associated with the project
- name:
- type: string
- description: The name of the project
- example: 'New Project'
- task_rate:
- type: number
- format: float
- example: 10
- description: The default rate per task for the project
- due_date:
- type: string
- format: date
- example: '2019-01-01'
- description: The due date for the project
- private_notes:
- type: string
- description: Private notes associated with the project
- budgeted_hours:
- type: number
- format: float
- description: The number of budgeted hours for the project
- custom_value1:
- type: string
- description: Custom value field 1
- custom_value2:
- type: string
- description: Custom value field 2
- custom_value3:
- type: string
- description: Custom value field 3
- custom_value4:
- type: string
- description: Custom value field 4
- created_at:
- type: number
- format: integer
- example: 134341234234
- description: The timestamp of the project creation
- updated_at:
- type: number
- format: integer
- example: 134341234234
- description: The timestamp of the last project update
- archived_at:
- type: number
- format: integer
- example: 134341234234
- description: The timestamp of the project deletion
- public_notes:
- type: string
- description: Public notes associated with the project
- is_deleted:
- type: boolean
- description: A flag indicating if the project is deleted
- number:
- type: string
- description: The project number
- color:
- type: string
- description: The color associated with the project
- required:
- - id
- - user_id
- - company_id
- - name
- - task_rate
- - budgeted_hours
- - is_deleted
- - color
-
- Client:
- properties:
- id:
- description: 'The unique identifier of the client'
- type: string
- example: Opnel5aKBz
- readOnly: true
- contacts:
- type: array
- items:
- $ref: '#/components/schemas/ClientContact'
- user_id:
- description: 'The unique identifier of the user who created the client'
- type: string
- example: Ua6Rw4pVbS
- readOnly: true
- assigned_user_id:
- description: 'The unique identifier of the user who has been assigned the client'
- type: string
- example: Ua6Rw4pVbS
- company_id:
- description: 'The unique identifier of the company the client belongs to'
- type: string
- example: Co7Vn3yLmW
- readOnly: true
- name:
- description: 'The name of the client company or organization'
- type: string
- example: "Jim's Housekeeping"
- website:
- description: 'The website URL of the client company or organization'
- type: string
- example: 'https://www.jims-housekeeping.com'
- private_notes:
- description: 'Notes that are only visible to the user who created the client'
- type: string
- example: 'Client prefers email communication over phone calls'
- client_hash:
- description: 'A unique hash value for the client'
- type: string
- example: asdfkjhk342hjhbfdvmnfb1
- readOnly: true
- industry_id:
- description: 'The unique identifier of the industry the client operates in'
- type: number
- example: '5'
- size_id:
- description: 'The unique identifier for the size category of the client company or organization'
- type: number
- example: '2'
- address1:
- description: "First line of the client's address"
- type: string
- example: '123 Main St'
- address2:
- description: "Second line of the client's address, if needed"
- type: string
- example: 'Apt 4B'
- city:
- description: 'The city the client is located in'
- type: string
- example: 'Beverly Hills'
- state:
- description: 'The state, province, or locality the client is located in'
- type: string
- example: 'California'
- postal_code:
- description: 'The postal code or ZIP code of the client'
- type: string
- example: '90210'
- phone:
- description: "The client's phone number"
- type: string
- example: '555-3434-3434'
- country_id:
- description: "The unique identifier of the client's country"
- type: number
- format: integer
- example: '1'
- custom_value1:
- description: 'A custom field for storing additional information'
- type: string
- example: 'Preferred contact: Email'
- custom_value2:
- description: 'A custom field for storing additional information'
- type: string
- example: 'Account manager: John Doe'
- custom_value3:
- description: 'A custom field for storing additional information'
- type: string
- example: 'VIP client: Yes'
- custom_value4:
- description: 'A custom field for storing additional information'
- type: string
- example: 'Annual contract value: $50,000'
- vat_number:
- description: "The client's VAT (Value Added Tax) number, if applicable"
- type: string
- example: 'VAT123456'
- id_number:
- description: 'A unique identification number for the client, such as a tax ID or business registration number'
- type: string
- number:
- description: 'A system-assigned unique number for the client, typically used for invoicing purposes'
- type: string
- example: 'CL-0001'
- shipping_address1:
- description: "First line of the client's shipping address"
- type: string
- example: '5 Wallaby Way'
- shipping_address2:
- description: "Second line of the client's shipping address, if needed"
- type: string
- example: 'Suite 5'
- shipping_city:
- description: "The city of the client's shipping address"
- type: string
- example: 'Perth'
- shipping_state:
- description: "The state, province, or locality of the client's shipping address"
- type: string
- example: 'Western Australia'
- shipping_postal_code:
- description: "The postal code or ZIP code of the client's shipping address"
- type: string
- example: '6110'
- shipping_country_id:
- description: "The unique identifier of the country for the client's shipping address"
- type: number
- format: integer
- example: '4'
- is_deleted:
- description: 'A boolean value indicating whether the client has been deleted or not'
- type: boolean
- example: false
- readOnly: true
- balance:
- description: 'The outstanding balance the client owes'
- type: number
- format: float
- example: '500.00'
- readOnly: true
- paid_to_date:
- description: 'The total amount the client has paid to date'
- type: number
- format: float
- example: '2000.00'
- readOnly: true
- credit_balance:
- description: 'The available credit balance for the client to use on future purchases'
- type: number
- format: float
- example: '100.00'
- readOnly: true
- last_login:
- description: "The timestamp of the client's last login"
- type: number
- format: integer
- example: '1628686031'
- readOnly: true
- created_at:
- description: 'The timestamp when the client was created'
- type: number
- format: integer
- example: '1617629031'
- readOnly: true
- updated_at:
- description: 'The timestamp when the client was last updated'
- type: number
- format: integer
- example: '1628445631'
- readOnly: true
- group_settings_id:
- description: 'The group settings assigned to the client'
- type: string
- example: Opnel5aKBz
- routing_id:
- description: 'The routing address id for e-invoicing for this client'
- type: string
- example: Opnel5aKBz3489-dfkiu-2239-sdsd
- is_tax_exempt:
- description: 'Flag which defines if the client is exempt from taxes'
- type: boolean
- example: false
- has_valid_vat_number:
- description: 'Flag which defines if the client has a valid VAT number'
- type: boolean
- example: false
- readOnly: true
- payment_balance:
- description: 'Defines the payment balance the client has on file (pre payments / over payments / unapplied amounts)'
- type: number
- example: 100
- readOnly: true
- settings:
- $ref: '#/components/schemas/ClientSettings'
- type: object
- Vendor:
- properties:
- id:
- description: 'The hashed id of the vendor. This is a unique identifier for the vendor.'
- type: string
- example: Opnel5aKBz
- readOnly: true
- user_id:
- description: 'The hashed id of the user who created the vendor. This is a unique identifier for the user.'
- type: string
- example: Opnel5aKBz
- assigned_user_id:
- description: 'The hashed id of the assigned user to this vendor. This is a unique identifier for the user.'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company. This is a unique identifier for the company.'
- type: string
- example: Opnel5aKBz
- contacts:
- type: array
- items:
- $ref: '#/components/schemas/VendorContact'
- description: 'An array of contacts associated with the vendor.'
- name:
- description: 'The name of the vendor.'
- type: string
- example: 'Harry cafe de wheels'
- classification:
- description: 'The classification of the vendor.'
- type: string
- example: 'individual'
- website:
- description: 'The website of the vendor.'
- type: string
- example: www.harry.com
- private_notes:
- description: 'The private notes of the vendor. These notes are only visible to users with appropriate permissions.'
- type: string
- example: 'Shhh, do not tell the vendor'
- industry_id:
- description: 'The industry id of the vendor. This is a unique identifier for the industry.'
- type: string
- example: '1'
- size_id:
- description: 'The size id of the vendor. This is a unique identifier for the size of the vendor.'
- type: string
- example: ''
- address1:
- description: 'The first line of the vendor''s address.'
- type: string
- example: ''
- address2:
- description: 'The second line of the vendor''s address.'
- type: string
- example: ''
- city:
- description: 'The city of the vendor''s address.'
- type: string
- example: ''
- state:
- description: 'The state of the vendor''s address.'
- type: string
- example: ''
- postal_code:
- description: 'The postal code of the vendor''s address.'
- type: string
- example: ''
- phone:
- description: 'The phone number of the vendor.'
- type: string
- example: 555-3434-3434
- country_id:
- description: 'The country id of the vendor. This is a unique identifier for the country.'
- type: string
- example: ''
- currency_id:
- description: 'The currency id of the vendor. This is a unique identifier for the currency.'
- type: string
- example: '4'
- custom_value1:
- description: 'The value of the first custom field for the vendor.'
- type: string
- example: ''
- custom_value2:
- description: 'The value of the second custom field for the vendor.'
- type: string
- example: ''
- custom_value3:
- description: 'The value of the third custom field for the vendor.'
- type: string
- example: ''
- custom_value4:
- description: 'The value of the fourth custom field for the vendor.'
- type: string
- example: ''
- vat_number:
- description: 'The VAT number of the vendor.'
- type: string
- example: ''
- id_number:
- description: 'The ID number of the vendor.'
- type: string
- example: ''
- number:
- description: 'The number of the vendor'
- type: string
- example: '11234'
- is_deleted:
- description: 'Boolean flag determining if the vendor has been deleted'
- type: boolean
- example: true
- language_id:
- description: 'The language id of the vendor. This is a unique identifier for the language.'
- type: string
- example: '1'
- vendor_hash:
- description: 'The vendor hash of the vendor. This is a unique identifier for the vendor.'
- type: string
- example: 'aaa-sss-www'
- readOnly: true
- transaction_name:
- description: 'The transaction name of the vendor.'
- type: string
- example: 'aaa-sss-www'
- last_login:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- readOnly: true
- created_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- readOnly: true
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- readOnly: true
- display_name:
- description: 'The display name of the vendor.'
- type: string
- example: 'Bob the vendor'
- readOnly: true
- type: object
- VendorContact:
- properties:
- id:
- description: 'The hashed id of the vendor contact'
- type: string
- example: Opnel5aKBz
- readOnly: true
- user_id:
- description: 'The hashed id of the user id'
- type: string
- example: Opnel5aKBz
- readOnly: true
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
- readOnly: true
- vendor_id:
- description: 'The hashed id of the vendor'
- type: string
- example: Opnel5aKBz
- readOnly: true
- first_name:
- description: 'The first name of the contact'
- type: string
- example: Harry
- last_name:
- description: 'The last name of the contact'
- type: string
- example: Windsor
- contact_key:
- description: 'A unique identifier for the contact'
- type: string
- example: JD0X52bkfZlJRiroCJ0tcSiAjsJTntZ5uqKdiZ0a
- readOnly: true
- confirmation_code:
- description: 'The confirmation code used to authenticate the contacts email address'
- type: string
- example: 333-sdjkh34gbasd
- readOnly: true
- phone:
- description: 'The contacts phone number'
- type: string
- example: 555-123-1234
- custom_value1:
- description: 'A custom value'
- type: string
- example: '2022-10-10'
- custom_value2:
- description: 'A custom value'
- type: string
- example: $1000
- custom_value3:
- description: 'A custom value'
- type: string
- example: ''
- custom_value4:
- description: 'A custom value'
- type: string
- example: ''
- email:
- description: 'The contact email address'
- type: string
- example: harry@windsor.com
- email_verified_at:
- description: 'The date which the contact confirmed their email'
- type: number
- format: integer
- example: '134341234234'
- readOnly: true
- password:
- description: 'The hashed password of the contact'
- type: string
- example: '*****'
- is_primary:
- description: 'Boolean flag determining if the contact is the primary contact for the vendor'
- type: boolean
- example: true
- created_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- readOnly: true
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- readOnly: true
- deleted_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- readOnly: true
- type: object
- Quote:
- properties:
- id:
- description: 'The unique hashed identifier for the quote'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The unique hashed identifier for the user who created the quote'
- type: string
- example: ''
- assigned_user_id:
- description: 'The unique hashed identifier for the user assigned to the quote'
- type: string
- example: ''
- company_id:
- description: 'The unique hashed identifier for the company associated with the quote'
- type: string
- example: ''
- client_id:
- description: 'The unique hashed identifier for the client associated with the quote'
- type: string
- example: ''
- status_id:
- description: 'The status of the quote represented by a unique identifier'
- type: string
- example: ''
- number:
- description: 'The unique alpha-numeric quote number for the quote per company'
- type: string
- example: QUOTE_101
- po_number:
- description: 'The purchase order number associated with the quote'
- type: string
- example: PO-1234
- terms:
- description: 'The terms and conditions for the quote'
- type: string
- example: 'These are some quote terms. Valid for 14 days.'
- public_notes:
- description: 'Publicly visible notes associated with the quote'
- type: string
- example: 'These are public notes which the client may see'
- private_notes:
- description: 'Privately visible notes associated with the quote, not disclosed to the client'
- type: string
- example: 'These are private notes, not to be disclosed to the client'
- footer:
- description: 'The footer text of the quote'
- type: string
- example: 'The text goes in the footer of the quote'
- custom_value1:
- description: 'First custom value field for additional information'
- type: string
- example: 'A custom value'
- custom_value2:
- description: 'Second custom value field for additional information'
- type: string
- example: 'A custom value'
- custom_value3:
- description: 'Third custom value field for additional information'
- type: string
- example: 'A custom value'
- custom_value4:
- description: 'Fourth custom value field for additional information'
- type: string
- example: 'A custom value'
- tax_name1:
- description: 'The name of the first tax applied to the quote'
- type: string
- example: GST
- tax_name2:
- description: 'The name of the second tax applied to the quote'
- type: string
- example: VAT
- tax_rate1:
- description: 'The rate of the first tax applied to the quote'
- type: number
- format: float
- example: 10.00
- tax_rate2:
- description: 'The rate of the second tax applied to the quote'
- type: number
- format: float
- example: 10.00
- tax_name3:
- description: 'The name of the third tax applied to the quote'
- type: string
- example: ''
- tax_rate3:
- description: 'The rate of the third tax applied to the quote'
- type: number
- format: float
- example: 10.00
- total_taxes:
- description: 'The total amount of taxes for the quote'
- type: number
- format: float
- example: 10.00
- line_items:
- type: array
- description: 'An array of objects which define the line items of the quote'
- items:
- $ref: '#/components/schemas/InvoiceItem'
- amount:
- description: 'The total amount of the quote before taxes and discounts'
- type: number
- format: float
- example: 10.00
- balance:
- description: 'The balance due for the quote after accounting for payments'
- type: number
- format: float
- example: 10.00
- paid_to_date:
- description: 'The total amount paid on the quote so far'
- type: number
- format: float
- example: 10.00
- discount:
- description: 'The discount amount or percentage applied to the quote'
- type: number
- format: float
- example: 10.00
- partial:
- description: 'The partial or deposit amount for the quote'
- type: number
- format: float
- example: 10.00
- is_amount_discount:
- description: 'Boolean flag indicating if the discount is a fixed amount or a percentage'
- type: boolean
- example: true
- is_deleted:
- description: 'Boolean flag indicating if the quote has been deleted'
- type: boolean
- example: false
- uses_inclusive_taxes:
- description: 'Boolean flag indicating if the taxes used are inclusive or exclusive'
- type: boolean
- example: true
- date:
- description: 'The date the quote was created'
- type: string
- format: date
- example: '1994-07-30'
- last_sent_date:
- description: 'The last date the quote was sent to the client'
- type: string
- format: date
- example: '1994-07-30'
- next_send_date:
- description: 'The next scheduled date for sending a reminder for the quote'
- type: string
- format: date
- example: '1994-07-30'
- partial_due_date:
- description: 'The due date for the partial or deposit amount'
- type: string
- format: date
- example: '1994-07-30'
- due_date:
- description: 'The due date for the total amount of the quote'
- type: string
- format: date
- example: '1994-07-30'
- settings:
- $ref: '#/components/schemas/CompanySettings'
- last_viewed:
- description: 'The timestamp of the last time the quote was viewed'
- type: number
- format: integer
- example: 1434342123
- updated_at:
- description: 'The timestamp of the last update to the quote'
- type: number
- format: integer
- example: 1434342123
- archived_at:
- description: 'The timestamp of when the quote was archived'
- type: number
- format: integer
- example: 1434342123
- custom_surcharge1:
- description: 'First custom surcharge amount for the quote'
- type: number
- format: float
- example: 10.00
- custom_surcharge2:
- description: 'Second custom surcharge amount for the quote'
- type: number
- format: float
- example: 10.00
- custom_surcharge3:
- description: 'Third custom surcharge amount for the quote'
- type: number
- format: float
- example: 10.00
- custom_surcharge4:
- description: 'Fourth custom surcharge amount for the quote'
- type: number
- format: float
- example: 10.00
- custom_surcharge_tax1:
- description: 'Boolean flag indicating if taxes are charged on the first custom surcharge amount'
- type: boolean
- example: true
- custom_surcharge_tax2:
- description: 'Boolean flag indicating if taxes are charged on the second custom surcharge amount'
- type: boolean
- example: true
- custom_surcharge_tax3:
- description: 'Boolean flag indicating if taxes are charged on the third custom surcharge amount'
- type: boolean
- example: true
- custom_surcharge_tax4:
- description: 'Boolean flag indicating if taxes are charged on the fourth custom surcharge amount'
- type: boolean
- example: true
- type: object
- Payment:
- properties:
- id:
- description: 'The payment hashed id'
- type: string
- example: Opnel5aKBz
- client_id:
- description: 'The client hashed id'
- type: string
- example: Opnel5aKBz
- invitation_id:
- description: 'The invitation hashed id'
- type: string
- example: Opnel5aKBz
- client_contact_id:
- description: 'The client contact hashed id'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The user hashed id'
- type: string
- example: Opnel5aKBz
- type_id:
- description: 'The Payment Type ID'
- type: string
- example: '1'
- date:
- description: 'The Payment date'
- type: string
- example: 1-1-2014
- transaction_reference:
- description: 'The transaction reference as defined by the payment gateway'
- type: string
- example: xcsSxcs124asd
- assigned_user_id:
- description: 'The assigned user hashed id'
- type: string
- example: Opnel5aKBz
- private_notes:
- description: 'The private notes of the payment'
- type: string
- example: 'The payment was refunded due to error'
- is_manual:
- description: 'Flags whether the payment was made manually or processed via a gateway'
- type: boolean
- example: true
- is_deleted:
- description: 'Defines if the payment has been deleted'
- type: boolean
- example: true
- amount:
- description: 'The amount of this payment'
- type: number
- example: 10
- refunded:
- description: 'The refunded amount of this payment'
- type: number
- example: 10
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- company_gateway_id:
- description: 'The company gateway id'
- type: string
- example: '3'
- paymentables:
- $ref: '#/components/schemas/Paymentable'
- invoices:
- description: ''
- type: array
- items:
- $ref: '#/components/schemas/InvoicePaymentable'
- credits:
- description: ''
- type: array
- items:
- $ref: '#/components/schemas/CreditPaymentable'
- number:
- description: 'The payment number - is a unique alpha numeric number per payment per company'
- type: string
- example: PAY_101
- type: object
-
- Task:
- properties:
- id:
- description: 'The hashed id of the task'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The hashed id of the user who created the task'
- type: string
- example: Opnel5aKBz
- assigned_user_id:
- description: 'The assigned user of the task'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
- client_id:
- description: 'The hashed if of the client'
- type: string
- example: Opnel5aKBz
- invoice_id:
- description: 'The hashed id of the invoice associated with the task'
- type: string
- example: Opnel5aKBz
- project_id:
- description: 'The hashed id of the project associated with the task'
- type: string
- example: Opnel5aKBz
- number:
- description: 'The number of the task'
- type: string
- example: TASK-123
- time_log:
- description: 'An array of unix time stamps defining the start and end times of the task'
- type: string
- example: '[[1,2],[3,4]]'
- is_running:
- description: 'Determines if the task is still running'
- type: boolean
- example: true
- is_deleted:
- description: 'Boolean flag determining if the task has been deleted'
- type: boolean
- example: true
- task_status_id:
- description: 'The hashed id of the task status'
- type: string
- example: Opnel5aKBz
- description:
- description: 'The task description'
- type: string
- example: 'A wonder task to work on'
- duration:
- description: 'The task duration in seconds'
- type: integer
- example: '3600'
- task_status_order:
- description: 'The order of the task'
- type: integer
- example: '4'
- rate:
- description: 'The task rate'
- type: number
- example: 10.00
- custom_value1:
- description: 'A custom value'
- type: string
- example: '2022-10-10'
- custom_value2:
- description: 'A custom value'
- type: string
- example: $1100
- custom_value3:
- description: 'A custom value'
- type: string
- example: 'I need help'
- custom_value4:
- description: 'A custom value'
- type: string
- example: INV-3343
- is_date_based:
- description: 'Boolean flag determining if the task is date based'
- type: boolean
- example: true
- calculated_start_date:
- description: 'The calculated start date of the task'
- type: string
- example: '2022-10-10'
- readOnly: true
- invoice_documents:
- description: "Boolean flags which determines whether to include the task documents on the invoice"
- type: boolean
- example: true
- created_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- readOnly: true
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- readOnly: true
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- readOnly: true
- type: object
- RecurringInvoice:
- properties:
- id:
- description: 'The hashed id of the recurring invoice'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The user hashed id'
- type: string
- example: Opnel5aKBz
- assigned_user_id:
- description: 'The assigned user hashed id'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
- client_id:
- description: 'The client hashed id'
- type: string
- example: Opnel5aKBz
- status_id:
- description: 'The invoice status variable'
- type: string
- example: '4'
- frequency_id:
- description: 'The recurring invoice frequency'
- type: number
- example: '4'
- remaining_cycles:
- description: 'The number of invoices left to be generated'
- type: number
- example: '4'
- number:
- description: 'The recurringinvoice number - is a unique alpha numeric number per invoice per company'
- type: string
- example: INV_101
- po_number:
- description: 'The purchase order associated with this recurring invoice'
- type: string
- example: PO-1234
- terms:
- description: 'The invoice terms'
- type: string
- example: 'These are invoice terms'
- public_notes:
- description: 'The public notes of the invoice'
- type: string
- example: 'These are some public notes'
- private_notes:
- description: 'The private notes of the invoice'
- type: string
- example: 'These are some private notes'
- footer:
- description: 'The invoice footer notes'
- type: string
- example: ''
- custom_value1:
- description: 'A custom field value'
- type: string
- example: '2022-10-01'
- custom_value2:
- description: 'A custom field value'
- type: string
- example: 'Something custom'
- custom_value3:
- description: 'A custom field value'
- type: string
- example: ''
- custom_value4:
- description: 'A custom field value'
- type: string
- example: ''
- tax_name1:
- description: 'The tax name'
- type: string
- example: ''
- tax_name2:
- description: 'The tax name'
- type: string
- example: ''
- tax_rate1:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_rate2:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_name3:
- description: 'The tax name'
- type: string
- example: ''
- tax_rate3:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- total_taxes:
- description: 'The total taxes for the invoice'
- type: number
- format: float
- example: '10.00'
- line_items:
- description: 'An array of objects which define the line items of the invoice'
- type: object
- example: ''
- amount:
- description: 'The invoice amount'
- type: number
- format: float
- example: '10.00'
- balance:
- description: 'The invoice balance'
- type: number
- format: float
- example: '10.00'
- paid_to_date:
- description: 'The amount paid on the invoice to date'
- type: number
- format: float
- example: '10.00'
- discount:
- description: 'The invoice discount, can be an amount or a percentage'
- type: number
- format: float
- example: '10.00'
- partial:
- description: 'The deposit/partial amount'
- type: number
- format: float
- example: '10.00'
- is_amount_discount:
- description: 'Flag determining if the discount is an amount or a percentage'
- type: boolean
- example: true
- is_deleted:
- description: 'Defines if the invoice has been deleted'
- type: boolean
- example: true
- uses_inclusive_taxes:
- description: 'Defines the type of taxes used as either inclusive or exclusive'
- type: boolean
- example: true
- date:
- description: 'The Invoice Date'
- type: string
- format: date
- example: '1994-07-30'
- last_sent_date:
- description: 'The last date the invoice was sent out'
- type: string
- format: date
- example: '1994-07-30'
- next_send_date:
- description: 'The Next date for a reminder to be sent'
- type: string
- format: date
- example: '1994-07-30'
- partial_due_date:
- description: 'The due date for the deposit/partial amount'
- type: string
- format: date
- example: '1994-07-30'
- due_date:
- description: 'The due date of the invoice'
- type: string
- format: date
- example: '1994-07-30'
- settings:
- $ref: '#/components/schemas/CompanySettings'
- last_viewed:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- custom_surcharge1:
- description: 'First Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge2:
- description: 'Second Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge3:
- description: 'Third Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge4:
- description: 'Fourth Custom Surcharge'
- type: number
- format: float
- example: '10.00'
- custom_surcharge_tax1:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax2:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax3:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- custom_surcharge_tax4:
- description: 'Toggles charging taxes on custom surcharge amounts'
- type: boolean
- example: true
- type: object
-
- InvoiceItem:
- type: object
- properties:
- quantity:
- type: number
- example: 1
- description: 'The quantity of the product offered for this line item'
- cost:
- type: number
- format: float
- example: 10.00
- description: 'The cost of the product offered for this line item'
- product_key:
- type: string
- example: 'Product key'
- description: 'The product key of the product offered for this line item (Referred to as Product in the product tab)'
- product_cost:
- type: number
- format: float
- example: 10.00
- description: 'The cost of the product offered for this line item (Referred to as Cost in the product tab)'
- notes:
- type: string
- example: 'Item notes'
- description: 'The notes/description for the product offered for this line item'
- discount:
- type: number
- format: float
- example: 5.00
- description: 'The discount applied to the product offered for this line item'
- is_amount_discount:
- type: boolean
- example: false
- description: 'Indicates whether the discount applied to the product offered for this line item is a fixed amount or a percentage'
- tax_name1:
- type: string
- example: 'GST'
- description: 'The name of the first tax applied to the product offered for this line item'
- tax_rate1:
- type: number
- format: float
- example: 10.00
- description: 'The rate of the first tax applied to the product offered for this line item'
- tax_name2:
- type: string
- example: 'VAT'
- description: 'The name of the second tax applied to the product offered for this line item'
- tax_rate2:
- type: number
- format: float
- example: 5.00
- description: 'The rate of the second tax applied to the product offered for this line item'
- tax_name3:
- type: string
- example: 'CA Sales Tax'
- description: 'The name of the third tax applied to the product offered for this line item'
- tax_rate3:
- type: number
- format: float
- example: 3.00
- description: 'The rate of the third tax applied to the product offered for this line item'
- sort_id:
- type: string
- example: '0'
- description: 'Deprecated'
- deprecated: true
- line_total:
- type: number
- format: float
- example: 10.00
- description: 'The total amount of the product offered for this line item'
- readOnly: true
- gross_line_total:
- type: number
- format: float
- example: 15.00
- description: 'The total amount of the product offered for this line item before discounts'
- readOnly: true
- tax_amount:
- type: number
- format: float
- example: 1.00
- description: 'The total amount of tax applied to the product offered for this line item'
- readOnly: true
- date:
- type: string
- format: date-time
- example: '2023-03-19T00:00:00Z'
- description: 'Deprecated'
- deprecated: true
- custom_value1:
- type: string
- example: 'Custom value 1'
- description: 'The first custom value of the product offered for this line item'
- custom_value2:
- type: string
- example: 'Custom value 2'
- description: 'The second custom value of the product offered for this line item'
- custom_value3:
- type: string
- example: 'Custom value 3'
- description: 'The third custom value of the product offered for this line item'
- custom_value4:
- type: string
- example: 'Custom value 4'
- description: 'The fourth custom value of the product offered for this line item'
- type_id:
- type: string
- example: '1'
- description: '1 = product, 2 = service, 3 unpaid gateway fee, 4 paid gateway fee, 5 late fee, 6 expense'
- default: '1'
- tax_id:
- type: string
- example: '1'
- default: '1'
- description: 'The tax ID of the product: 1 product, 2 service, 3 digital, 4 shipping, 5 exempt, 5 reduced tax, 7 override, 8 zero rate, 9 reverse tax'
- Activity:
- properties:
- id:
- description: 'The id field of the activity'
- type: string
- example: Opnel5aKBz
- activity_type_id:
- description: 'The activity type id'
- type: string
- example: Opnel5aKBz
- client_id:
- description: 'The client hashed id'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The user hashed id'
- type: string
- example: Opnel5aKBz
- invoice_id:
- description: 'The invoice hashed id'
- type: string
- example: Opnel5aKBz
- payment_id:
- description: 'The payment hashed id'
- type: string
- example: Opnel5aKBz
- credit_id:
- description: 'The credit hashed id'
- type: string
- example: Opnel5aKBz
- updated_at:
- description: 'Unixtimestamp the last time the record was updated'
- type: integer
- example: '343421434'
- expense_id:
- description: 'The expense hashed id'
- type: string
- example: Opnel5aKBz
- is_system:
- description: 'Defines is the activity was performed by the system'
- type: boolean
- example: true
- contact_id:
- description: 'The contact hashed id'
- type: string
- example: Opnel5aKBz
- task_id:
- description: 'The task hashed id'
- type: string
- example: Opnel5aKBz
- notes:
- description: 'Activity Notes'
- type: string
- example: Opnel5aKBz
- token_id:
- description: 'The hashed ID of the token who performed the action'
- type: string
- example: Opnel5aKBz
- ip:
- description: 'The IP Address of the user who performed the action'
- type: string
- example: 192.168.1.252
- user:
- $ref: '#/components/schemas/User'
- client:
- $ref: '#/components/schemas/Client'
- contact:
- $ref: '#/components/schemas/ClientContact'
- recurring_invoice:
- $ref: '#/components/schemas/RecurringInvoice'
- invoice:
- $ref: '#/components/schemas/Invoice'
- credit:
- $ref: '#/components/schemas/Credit'
- quote:
- $ref: '#/components/schemas/Quote'
- payment:
- $ref: '#/components/schemas/Payment'
- expense:
- $ref: '#/components/schemas/Expense'
- task:
- $ref: '#/components/schemas/Task'
- purchase_order:
- $ref: '#/components/schemas/PurchaseOrder'
- vendor:
- $ref: '#/components/schemas/Vendor'
- vendor_contact:
- $ref: '#/components/schemas/VendorContact'
- type: object
-
- ProductBulkAction:
- required:
- - action
- - ids
- properties:
- action:
- type: string
- example: archive
- description: 'The action to perform ie. archive / restore / delete / set_tax_id'
- ids:
- type: array
- items:
- format: string
- type: string
- example: 2J234DFA,D2J234DFA,D2J234DFA
- description: string array of client hashed ids
- tax_id:
- type: string
- example: '1'
- description: |
- The tax rate id to set on the list of products
-
- The following constants are available (default = '1')
-
- ```
- PRODUCT_TYPE_PHYSICAL = '1'
- PRODUCT_TYPE_SERVICE = '2'
- PRODUCT_TYPE_DIGITAL = '3'
- PRODUCT_TYPE_SHIPPING = '4'
- PRODUCT_TYPE_EXEMPT = '5'
- PRODUCT_TYPE_REDUCED_TAX = '6'
- PRODUCT_TYPE_OVERRIDE_TAX = '7'
- PRODUCT_TYPE_ZERO_RATED = '8'
- PRODUCT_TYPE_REVERSE_TAX = '9'
- ```
- type: object
- RecurringExpense:
- properties:
- id:
- description: 'The hashed id of the recurring expense'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The hashed id of the user who created the recurring expense'
- type: string
- example: Opnel5aKBz
- assigned_user_id:
- description: 'The hashed id of the user assigned to this recurring expense'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
- client_id:
- description: 'The hashed id of the client'
- type: string
- example: Opnel5aKBz
- invoice_id:
- description: 'The hashed id of the invoice'
- type: string
- example: Opnel5aKBz
- bank_id:
- description: 'The id of the bank associated with this recurring expense'
- type: string
- example: '22'
- invoice_currency_id:
- description: 'The currency id of the invoice associated with this recurring expense'
- type: string
- example: '1'
- expense_currency_id:
- description: 'The currency id of the expense associated with this recurring expense'
- type: string
- example: '1'
- invoice_category_id:
- description: 'The category id of the invoice'
- type: string
- example: '1'
- payment_type_id:
- description: 'The payment type id'
- type: string
- example: '1'
- private_notes:
- description: 'The recurring expense private notes'
- type: string
- example: 'Private and confidential'
- public_notes:
- description: 'The recurring expense public notes'
- type: string
- example: 'This is the best client in the world'
- transaction_reference:
- description: 'The recurring expense transaction reference'
- type: string
- example: EXP-1223-2333
- transcation_id:
- description: 'The transaction id of the recurring expense'
- type: string
- example: '1233312312'
- custom_value1:
- description: 'Custom value field'
- type: string
- example: $1000
- custom_value2:
- description: 'Custom value field'
- type: string
- example: '2022-10-10'
- custom_value3:
- description: 'Custom value field'
- type: string
- example: 'short text'
- custom_value4:
- description: 'Custom value field'
- type: string
- example: 'very long text'
- tax_name1:
- description: 'The tax name'
- type: string
- example: GST
- tax_name2:
- description: 'The tax name'
- type: string
- example: VAT
- tax_rate1:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_rate2:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- tax_name3:
- description: 'The tax name'
- type: string
- example: ''
- tax_rate3:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.00'
- amount:
- description: 'The total amount of the recurring expense'
- type: number
- format: float
- example: '10.00'
- frequency_id:
- description: 'The frequency this recurring expense fires'
- type: number
- format: int
- example: '1'
- remaining_cycles:
- description: 'The number of remaining cycles for this recurring expense'
- type: number
- format: int
- example: '1'
- foreign_amount:
- description: 'The foreign currency amount of the recurring expense'
- type: number
- format: float
- example: '10.00'
- exchange_rate:
- description: 'The exchange rate for the expernse'
- type: number
- format: float
- example: '0.80'
- date:
- description: 'The date of the expense'
- type: string
- example: ''
- payment_date:
- description: 'The date the expense was paid'
- type: string
- example: ''
- should_be_invoiced:
- description: 'Boolean flag determining if the expense should be invoiced'
- type: boolean
- example: true
- is_deleted:
- description: 'Boolean flag determining if the recurring expense is deleted'
- type: boolean
- example: true
- last_sent_date:
- description: 'The Date it was sent last'
- type: string
- format: date
- example: '1994-07-30'
- next_send_date:
- description: 'The next send date'
- type: string
- format: date
- example: '1994-07-30'
- invoice_documents:
- description: 'Boolean flag determining if the documents associated with this expense should be passed onto the invoice if it is converted to an invoice'
- type: boolean
- example: true
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '1434342123'
- type: object
- PaymentTerm:
- properties:
- num_days:
- description: 'The payment term length in days'
- type: integer
- example: '1'
- name:
- description: 'The payment term length in string format'
- type: string
- example: 'NET 1'
- created_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- type: object
- ClientGatewayToken:
- properties:
- id:
- description: 'The hashed id of the client gateway token'
- type: string
- example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: '2'
- client_id:
- description: 'The hashed_id of the client'
- type: string
- example: '2'
- token:
- description: 'The payment token'
- type: string
- example: '2'
- routing_number:
- description: 'THe bank account routing number'
- type: string
- example: '2'
- company_gateway_id:
- description: 'The hashed id of the company gateway'
- type: string
- example: '2'
- is_default:
- description: 'Flag determining if the token is the default payment method'
- type: boolean
- example: 'true'
- type: object
- User:
- properties:
- id:
- description: 'The hashed id of the user'
- type: string
- example: Opnel5aKBz
- readOnly: true
- first_name:
- description: 'The first name of the user'
- type: string
- example: Brad
- last_name:
- description: 'The last name of the user'
- type: string
- example: Pitt
- email:
- description: 'The users email address'
- type: string
- example: brad@pitt.com
- phone:
- description: 'The users phone number'
- type: string
- example: 555-1233-23232
- signature:
- description: 'The users sign off signature'
- type: string
- example: 'Have a nice day!'
- avatar:
- description: 'The users avatar'
- type: string
- example: 'https://url.to.your/avatar.png'
- accepted_terms_version:
- description: 'The version of the invoice ninja terms that has been accepted by the user'
- type: string
- example: 1.0.1
- readOnly: true
- oauth_user_id:
- description: 'The provider id of the oauth entity'
- type: string
- example: jkhasdf789as6f675sdf768sdfs
- readOnly: true
- oauth_provider_id:
- description: 'The oauth entity id'
- type: string
- example: google
- readOnly: true
- language_id:
- description: 'The language id of the user'
- type: string
- example: 1
- verified_phone_number:
- description: 'Boolean flag if the user has their phone verified. Required to settings up 2FA'
- type: boolean
- example: true
- readOnly: true
- sms_verification_code:
- description: 'The sms verification code for the user. Required to settings up 2FA'
- type: string
- example: '123456'
- readOnly: true
- oauth_user_token_expiry:
- description: 'The expiry date of the oauth token'
- type: string
- example: '2022-10-10'
- readOnly: true
- has_password:
- description: 'Boolean flag determining if the user has a password'
- type: boolean
- example: true
- readOnly: true
- last_confirmed_email_address:
- description: 'The last confirmed email address of the user'
- type: string
- example: 'bob@gmail.com'
- readOnly: true
- custom_value1:
- description: 'A custom value'
- type: string
- example: 'Custom value 1'
- custom_value2:
- description: 'A custom value'
- type: string
- example: '$1000'
- custom_value3:
- description: 'A custom value'
- type: string
- example: 'Custom value 3'
- custom_value4:
- description: 'A custom value'
- type: string
- example: 'Custom value 4'
- is_deleted:
- description: 'Boolean flag determining if the user has been deleted'
- type: boolean
- example: true
- readOnly: true
- google_2fa_secret:
- description: 'The google 2fa secret for the user'
- type: string
- example: '123456'
- readOnly: true
- company_user:
- $ref: '#/components/schemas/CompanyUser'
- type: object
CompanyGateway:
properties:
id:
description: 'The hashed id of the company gateway'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: '2'
gateway_key:
description: 'The gateway key (hash)'
type: string
@@ -18662,1512 +15768,6 @@ components:
type: object
- Document:
- properties:
- id:
- description: 'The document hashed id'
- type: string
- example: AS3df3A
- user_id:
- description: 'The user hashed id'
- type: string
- example: ''
- assigned_user_id:
- description: 'The assigned user hashed id'
- type: string
- example: ''
- project_id:
- description: 'The project associated with this document'
- type: string
- example: ''
- vendor_id:
- description: 'The vendor associated with this documents'
- type: string
- example: ''
- name:
- description: 'The document name'
- type: string
- example: Beauty
- url:
- description: 'The document url'
- type: string
- example: Beauty
- preview:
- description: 'The document preview url'
- type: string
- example: Beauty
- type:
- description: 'The document type'
- type: string
- example: Beauty
- disk:
- description: 'The document disk'
- type: string
- example: Beauty
- hash:
- description: 'The document hashed'
- type: string
- example: Beauty
- is_deleted:
- description: 'Flag to determine if the document is deleted'
- type: boolean
- example: true
- is_default:
- description: 'Flag to determine if the document is a default doc'
- type: boolean
- example: true
- created_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- deleted_at:
- description: Timestamp
- type: number
- format: integer
- example: '134341234234'
- type: object
- PurchaseOrder:
- properties:
- id:
- description: 'The unique hashed identifier for the purchase order'
- type: string
- example: Opnel5aKBz
- user_id:
- description: 'The unique hashed identifier for the user who created the purchase order'
- type: string
- example: ''
- assigned_user_id:
- description: 'The unique hashed identifier for the user assigned to the purchase order'
- type: string
- example: ''
- company_id:
- description: 'The unique hashed identifier for the company associated with the purchase order'
- type: string
- example: ''
- vendor_id:
- description: 'The unique hashed identifier for the vendor associated with the purchase order'
- type: string
- example: ''
- status_id:
- description: 'The status of the purchase order represented by a unique identifier'
- type: string
- example: ''
- number:
- description: 'The unique alpha-numeric purchase order number per company'
- type: string
- example: PO_101
- quote_number:
- description: 'The quote number associated with this purchase order'
- type: string
- example: QUOTE_101
- terms:
- description: 'The terms and conditions for the purchase order'
- type: string
- example: 'These are some purchase order terms. Valid for 14 days.'
- public_notes:
- description: 'Publicly visible notes associated with the purchase order'
- type: string
- example: 'These are public notes which the vendor may see'
- private_notes:
- description: 'Privately visible notes associated with the purchase order, not disclosed to the vendor'
- type: string
- example: 'These are private notes, not to be disclosed to the vendor'
- footer:
- description: 'The footer text of the purchase order'
- type: string
- example: 'The text goes in the footer of the purchase order'
- custom_value1:
- description: 'First custom value field for additional information'
- type: string
- example: 'A custom value'
- custom_value2:
- description: 'Second custom value field for additional information'
- type: string
- example: 'A custom value'
- custom_value3:
- description: 'Third custom value field for additional information'
- type: string
- example: 'A custom value'
- custom_value4:
- description: 'Fourth custom value field for additional information'
- type: string
- example: 'A custom value'
- tax_name1:
- description: 'The name of the first tax applied to the purchase order'
- type: string
- example: GST
- tax_name2:
- description: 'The name of the second tax applied to the purchase order'
- type: string
- example: VAT
- tax_rate1:
- description: 'The rate of the first tax applied to the purchase order'
- type: number
- format: float
- example: 10.00
- tax_rate2:
- description: 'The rate of the second tax applied to the purchase order'
- type: number
- format: float
- example: 10.00
- tax_name3:
- description: 'The name of the third tax applied to the purchase order'
- type: string
- example: ''
- tax_rate3:
- description: 'The rate of the third tax applied to the purchase order'
- type: number
- format: float
- example: 10.00
- total_taxes:
- description: 'The total amount of taxes applied to the purchase order'
- type: number
- format: float
- example: 10.00
- line_items:
- type: array
- description: 'An array of objects which define the line items of the purchase order'
- items:
- $ref: '#/components/schemas/InvoiceItem'
- amount:
- description: 'The total amount of the purchase order before taxes and discounts'
- type: number
- format: float
- example: 10.00
- balance:
- description: 'The balance due for the purchase order after accounting for payments'
- type: number
- format: float
- example: 10.00
- paid_to_date:
- description: 'The total amount paid on the purchase order so far'
- type: number
- format: float
- example: 10.00
- discount:
- description: 'The discount amount or percentage applied to the purchase order'
- type: number
- format: float
- example: 10.00
- partial:
- description: 'The partial or deposit amount for the purchase order'
- type: number
- format: float
- example: 10.00
- is_amount_discount:
- description: 'Boolean flag indicating if the discount is a fixed amount or a percentage'
- type: boolean
- example: true
- is_deleted:
- description: 'Boolean flag indicating if the purchase order has been deleted'
- type: boolean
- example: false
- uses_inclusive_taxes:
- description: 'Boolean flag indicating if the taxes used are inclusive or exclusive'
- type: boolean
- example: true
- date:
- description: 'The date the purchase order was created'
- type: string
- format: date
- example: '1994-07-30'
- last_sent_date:
- description: 'The last date the purchase order was sent to the vendor'
- type: string
- format: date
- example: '1994-07-30'
- next_send_date:
- description: 'The next scheduled date for sending a reminder for the purchase order'
- type: string
- format: date
- example: '1994-07-30'
- partial_due_date:
- description: 'The due date for the partial or deposit amount'
- type: string
- format: date
- example: '1994-07-30'
- due_date:
- description: 'The due date for the total amount of the purchase order'
- type: string
- format: date
- example: '1994-07-30'
- settings:
- $ref: '#/components/schemas/CompanySettings'
- last_viewed:
- description: Timestamp
- type: number
- format: integer
- example: 1434342123
- updated_at:
- description: Timestamp
- type: number
- format: integer
- example: 1434342123
- archived_at:
- description: Timestamp
- type: number
- format: integer
- example: 1434342123
- custom_surcharge1:
- description: 'First custom surcharge amount for the purchase order'
- type: number
- format: float
- example: 10.00
- custom_surcharge2:
- description: 'Second custom surcharge amount for the purchase order'
- type: number
- format: float
- example: 10.00
- custom_surcharge3:
- description: 'Third custom surcharge amount for the purchase order'
- type: number
- format: float
- example: 10.00
- custom_surcharge4:
- description: 'Fourth custom surcharge amount for the purchase order'
- type: number
- format: float
- example: 10.00
- custom_surcharge_tax1:
- description: 'Boolean flag indicating if taxes are charged on the first custom surcharge amount'
- type: boolean
- example: true
- custom_surcharge_tax2:
- description: 'Boolean flag indicating if taxes are charged on the second custom surcharge amount'
- type: boolean
- example: true
- custom_surcharge_tax3:
- description: 'Boolean flag indicating if taxes are charged on the third custom surcharge amount'
- type: boolean
- example: true
- custom_surcharge_tax4:
- description: 'Boolean flag indicating if taxes are charged on the fourth custom surcharge amount'
- type: boolean
- example: true
- type: object
-
-
- ClientSettings:
- required:
- - currency_id
- properties:
- currency_id:
- description: 'The default currency id'
- type: string
- example: true
- timezone_id:
- description: 'The timezone id'
- type: string
- example: '15'
- date_format_id:
- description: 'The date format id'
- type: string
- example: '15'
- military_time:
- description: 'Toggles 12/24 hour time'
- type: boolean
- example: true
- language_id:
- description: 'The language id'
- type: string
- example: '1'
- show_currency_code:
- description: 'Toggles whether the currency symbol or code is shown'
- type: boolean
- example: true
- payment_terms:
- description: '-1 sets no payment term, 0 sets payment due immediately, positive integers indicates payment terms in days'
- type: integer
- example: '1'
- company_gateway_ids:
- description: 'A commad separate list of available gateways'
- type: string
- example: '1,2,3,4'
- custom_value1:
- description: 'A Custom Label'
- type: string
- example: 'Custom Label'
- custom_value2:
- description: 'A Custom Label'
- type: string
- example: 'Custom Label'
- custom_value3:
- description: 'A Custom Label'
- type: string
- example: 'Custom Label'
- custom_value4:
- description: 'A Custom Label'
- type: string
- example: 'Custom Label'
- default_task_rate:
- description: 'The default task rate'
- type: number
- format: float
- example: '10.00'
- send_reminders:
- description: 'Toggles whether reminders are sent'
- type: boolean
- example: true
- enable_client_portal_tasks:
- description: 'Show/hide the tasks panel in the client portal'
- type: boolean
- example: true
- email_style:
- description: 'options include plain,light,dark,custom'
- type: string
- example: light
- reply_to_email:
- description: 'The reply to email address'
- type: string
- example: email@gmail.com
- bcc_email:
- description: 'A comma separate list of BCC emails'
- type: string
- example: 'email@gmail.com, contact@gmail.com'
- pdf_email_attachment:
- description: 'Toggles whether to attach PDF as attachment'
- type: boolean
- example: true
- ubl_email_attachment:
- description: 'Toggles whether to attach UBL as attachment'
- type: boolean
- example: true
- email_style_custom:
- description: 'The custom template'
- type: string
- example: ''
- counter_number_applied:
- description: 'enum when the invoice number counter is set, ie when_saved, when_sent, when_paid'
- type: string
- example: when_sent
- quote_number_applied:
- description: 'enum when the quote number counter is set, ie when_saved, when_sent'
- type: string
- example: when_sent
- custom_message_dashboard:
- description: 'A custom message which is displayed on the dashboard'
- type: string
- example: 'Please pay invoices immediately'
- custom_message_unpaid_invoice:
- description: 'A custom message which is displayed in the client portal when a client is viewing a unpaid invoice.'
- type: string
- example: 'Please pay invoices immediately'
- custom_message_paid_invoice:
- description: 'A custom message which is displayed in the client portal when a client is viewing a paid invoice.'
- type: string
- example: 'Thanks for paying this invoice!'
- custom_message_unapproved_quote:
- description: 'A custom message which is displayed in the client portal when a client is viewing a unapproved quote.'
- type: string
- example: 'Please approve quote'
- lock_invoices:
- description: 'Toggles whether invoices are locked once sent and cannot be modified further'
- type: boolean
- example: true
- auto_archive_invoice:
- description: 'Toggles whether a invoice is archived immediately following payment'
- type: boolean
- example: true
- auto_archive_quote:
- description: 'Toggles whether a quote is archived after being converted to a invoice'
- type: boolean
- example: true
- auto_convert_quote:
- description: 'Toggles whether a quote is converted to a invoice when approved'
- type: boolean
- example: true
- inclusive_taxes:
- description: 'Boolean flag determining whether inclusive or exclusive taxes are used'
- type: boolean
- example: true
- task_number_pattern:
- description: 'Allows customisation of the task number pattern'
- type: string
- example: '{$year}-{$counter}'
- task_number_counter:
- description: 'The incrementing counter for tasks'
- type: integer
- example: '1'
- reminder_send_time:
- description: 'Time from UTC +0 when the email will be sent to the client'
- type: integer
- example: '32400'
- expense_number_pattern:
- description: 'Allows customisation of the expense number pattern'
- type: string
- example: '{$year}-{$counter}'
- expense_number_counter:
- description: 'The incrementing counter for expenses'
- type: integer
- example: '1'
- vendor_number_pattern:
- description: 'Allows customisation of the vendor number pattern'
- type: string
- example: '{$year}-{$counter}'
- vendor_number_counter:
- description: 'The incrementing counter for vendors'
- type: integer
- example: '1'
- ticket_number_pattern:
- description: 'Allows customisation of the ticket number pattern'
- type: string
- example: '{$year}-{$counter}'
- ticket_number_counter:
- description: 'The incrementing counter for tickets'
- type: integer
- example: '1'
- payment_number_pattern:
- description: 'Allows customisation of the payment number pattern'
- type: string
- example: '{$year}-{$counter}'
- payment_number_counter:
- description: 'The incrementing counter for payments'
- type: integer
- example: '1'
- invoice_number_pattern:
- description: 'Allows customisation of the invoice number pattern'
- type: string
- example: '{$year}-{$counter}'
- invoice_number_counter:
- description: 'The incrementing counter for invoices'
- type: integer
- example: '1'
- quote_number_pattern:
- description: 'Allows customisation of the quote number pattern'
- type: string
- example: '{$year}-{$counter}'
- quote_number_counter:
- description: 'The incrementing counter for quotes'
- type: integer
- example: '1'
- client_number_pattern:
- description: 'Allows customisation of the client number pattern'
- type: string
- example: '{$year}-{$counter}'
- client_number_counter:
- description: 'The incrementing counter for clients'
- type: integer
- example: '1'
- credit_number_pattern:
- description: 'Allows customisation of the credit number pattern'
- type: string
- example: '{$year}-{$counter}'
- credit_number_counter:
- description: 'The incrementing counter for credits'
- type: integer
- example: '1'
- recurring_invoice_number_prefix:
- description: 'This string is prepended to the recurring invoice number'
- type: string
- example: R
- reset_counter_frequency_id:
- description: 'CONSTANT which is used to apply the frequency which the counters are reset'
- type: integer
- example: '1'
- reset_counter_date:
- description: 'The explicit date which is used to reset counters'
- type: string
- example: '2019-01-01'
- counter_padding:
- description: 'Pads the counter with leading zeros'
- type: integer
- example: '1'
- shared_invoice_quote_counter:
- description: 'Flags whether to share the counter for invoices and quotes'
- type: boolean
- example: true
- update_products:
- description: 'Determines if client fields are updated from third party APIs'
- type: boolean
- example: true
- convert_products:
- description: ''
- type: boolean
- example: true
- fill_products:
- description: 'Automatically fill products based on product_key'
- type: boolean
- example: true
- invoice_terms:
- description: 'The default invoice terms'
- type: string
- example: 'Invoice Terms are...'
- quote_terms:
- description: 'The default quote terms'
- type: string
- example: 'Quote Terms are...'
- invoice_taxes:
- description: 'Taxes can be applied to the invoice'
- type: number
- example: '1'
- invoice_design_id:
- description: 'The default design id (invoice, quote etc)'
- type: string
- example: '1'
- quote_design_id:
- description: 'The default design id (invoice, quote etc)'
- type: string
- example: '1'
- invoice_footer:
- description: 'The default invoice footer'
- type: string
- example: '1'
- invoice_labels:
- description: 'JSON string of invoice labels'
- type: string
- example: '1'
- tax_rate1:
- description: 'The tax rate (float)'
- type: number
- example: '10'
- tax_name1:
- description: 'The tax name'
- type: string
- example: GST
- tax_rate2:
- description: 'The tax rate (float)'
- type: number
- example: '10'
- tax_name2:
- description: 'The tax name'
- type: string
- example: GST
- tax_rate3:
- description: 'The tax rate (float)'
- type: number
- example: '10'
- tax_name3:
- description: 'The tax name'
- type: string
- example: GST
- payment_type_id:
- description: 'The default payment type id'
- type: string
- example: '1'
- custom_fields:
- description: 'JSON string of custom fields'
- type: string
- example: '{}'
- email_footer:
- description: 'The default email footer'
- type: string
- example: 'A default email footer'
- email_sending_method:
- description: 'The email driver to use to send email, options include default, gmail'
- type: string
- example: default
- gmail_sending_user_id:
- description: 'The hashed_id of the user account to send email from'
- type: string
- example: F76sd34D
- email_subject_invoice:
- description: ''
- type: string
- example: 'Your Invoice Subject'
- email_subject_quote:
- description: ''
- type: string
- example: 'Your Quote Subject'
- email_subject_payment:
- description: ''
- type: string
- example: 'Your Payment Subject'
- email_template_invoice:
- description: 'The full template for invoice emails'
- type: string
- example: ''
- email_template_quote:
- description: 'The full template for quote emails'
- type: string
- example: ''
- email_template_payment:
- description: 'The full template for payment emails'
- type: string
- example: ''
- email_subject_reminder1:
- description: 'Email subject for Reminder'
- type: string
- example: ''
- email_subject_reminder2:
- description: 'Email subject for Reminder'
- type: string
- example: ''
- email_subject_reminder3:
- description: 'Email subject for Reminder'
- type: string
- example: ''
- email_subject_reminder_endless:
- description: 'Email subject for endless reminders'
- type: string
- example: ''
- email_template_reminder1:
- description: 'The full template for Reminder 1'
- type: string
- example: ''
- email_template_reminder2:
- description: 'The full template for Reminder 2'
- type: string
- example: ''
- email_template_reminder3:
- description: 'The full template for Reminder 3'
- type: string
- example: ''
- email_template_reminder_endless:
- description: 'The full template for enless reminders'
- type: string
- example: ''
- enable_portal_password:
- description: 'Toggles whether a password is required to log into the client portal'
- type: boolean
- example: true
- show_accept_invoice_terms:
- description: 'Toggles whether the terms dialogue is shown to the client'
- type: boolean
- example: true
- show_accept_quote_terms:
- description: 'Toggles whether the terms dialogue is shown to the client'
- type: boolean
- example: true
- require_invoice_signature:
- description: 'Toggles whether a invoice signature is required'
- type: boolean
- example: true
- require_quote_signature:
- description: 'Toggles whether a quote signature is required'
- type: boolean
- example: true
- name:
- description: 'The company name'
- type: string
- example: 'Acme Co'
- company_logo:
- description: 'The company logo file'
- type: object
- example: logo.png
- website:
- description: 'The company website URL'
- type: string
- example: www.acme.com
- address1:
- description: 'The company address line 1'
- type: string
- example: 'Suite 888'
- address2:
- description: 'The company address line 2'
- type: string
- example: '5 Jimbo Way'
- city:
- description: 'The company city'
- type: string
- example: Sydney
- state:
- description: 'The company state'
- type: string
- example: Florisa
- postal_code:
- description: 'The company zip/postal code'
- type: string
- example: '90210'
- phone:
- description: 'The company phone'
- type: string
- example: 555-213-3948
- email:
- description: 'The company email'
- type: string
- example: joe@acme.co
- country_id:
- description: 'The country ID'
- type: string
- example: '1'
- vat_number:
- description: 'The company VAT/TAX ID number'
- type: string
- example: '32 120 377 720'
- page_size:
- description: 'The default page size'
- type: string
- example: A4
- font_size:
- description: 'The font size'
- type: number
- example: '9'
- primary_font:
- description: 'The primary font'
- type: string
- example: roboto
- secondary_font:
- description: 'The secondary font'
- type: string
- example: roboto
- hide_paid_to_date:
- description: 'Flags whether to hide the paid to date field'
- type: boolean
- example: false
- embed_documents:
- description: 'Toggled whether to embed documents in the PDF'
- type: boolean
- example: false
- all_pages_header:
- description: 'The header for the PDF'
- type: boolean
- example: false
- all_pages_footer:
- description: 'The footer for the PDF'
- type: boolean
- example: false
- document_email_attachment:
- description: 'Toggles whether to attach documents in the email'
- type: boolean
- example: false
- enable_client_portal_password:
- description: 'Toggles password protection of the client portal'
- type: boolean
- example: false
- enable_email_markup:
- description: 'Toggles the use of markdown in emails'
- type: boolean
- example: false
- enable_client_portal_dashboard:
- description: 'Toggles whether the client dashboard is shown in the client portal'
- type: boolean
- example: false
- enable_client_portal:
- description: 'Toggles whether the entire client portal is displayed to the client, or only the context'
- type: boolean
- example: false
- email_template_statement:
- description: 'The body of the email for statements'
- type: string
- example: 'template matter'
- email_subject_statement:
- description: 'The subject of the email for statements'
- type: string
- example: 'subject matter'
- signature_on_pdf:
- description: 'Toggles whether the signature (if available) is displayed on the PDF'
- type: boolean
- example: false
- quote_footer:
- description: 'The default quote footer'
- type: string
- example: 'the quote footer'
- email_subject_custom1:
- description: 'Custom reminder template subject'
- type: string
- example: 'Custom Subject 1'
- email_subject_custom2:
- description: 'Custom reminder template subject'
- type: string
- example: 'Custom Subject 2'
- email_subject_custom3:
- description: 'Custom reminder template subject'
- type: string
- example: 'Custom Subject 3'
- email_template_custom1:
- description: 'Custom reminder template body'
- type: string
- example: ''
- email_template_custom2:
- description: 'Custom reminder template body'
- type: string
- example: ''
- email_template_custom3:
- description: 'Custom reminder template body'
- type: string
- example: ''
- enable_reminder1:
- description: 'Toggles whether this reminder is enabled'
- type: boolean
- example: false
- enable_reminder2:
- description: 'Toggles whether this reminder is enabled'
- type: boolean
- example: false
- enable_reminder3:
- description: 'Toggles whether this reminder is enabled'
- type: boolean
- example: false
- num_days_reminder1:
- description: 'The Reminder interval'
- type: number
- example: '9'
- num_days_reminder2:
- description: 'The Reminder interval'
- type: number
- example: '9'
- num_days_reminder3:
- description: 'The Reminder interval'
- type: number
- example: '9'
- schedule_reminder1:
- description: '(enum: after_invoice_date, before_due_date, after_due_date)'
- type: string
- example: after_invoice_date
- schedule_reminder2:
- description: '(enum: after_invoice_date, before_due_date, after_due_date)'
- type: string
- example: after_invoice_date
- schedule_reminder3:
- description: '(enum: after_invoice_date, before_due_date, after_due_date)'
- type: string
- example: after_invoice_date
- late_fee_amount1:
- description: 'The late fee amount for reminder 1'
- type: number
- example: 10
- late_fee_amount2:
- description: 'The late fee amount for reminder 2'
- type: number
- example: 20
- late_fee_amount3:
- description: 'The late fee amount for reminder 2'
- type: number
- example: 100
- endless_reminder_frequency_id:
- description: 'The frequency id of the endless reminder'
- type: string
- example: '1'
- client_online_payment_notification:
- description: 'Determines if a client should receive the notification for a online payment'
- type: boolean
- example: false
- client_manual_payment_notification:
- description: 'Determines if a client should receive the notification for a manually entered payment'
- type: boolean
- example: false
- enable_e_invoice:
- description: 'Determines if e-invoicing is enabled'
- type: boolean
- example: false
- default_expense_payment_type_id:
- description: 'The default payment type for expenses'
- type: string
- example: '0'
- e_invoice_type:
- description: 'The e-invoice type'
- type: string
- example: 'EN16931'
- mailgun_endpoint:
- description: 'The mailgun endpoint - used to determine whether US or EU endpoints are used'
- type: string
- example: 'api.mailgun.net or api.eu.mailgun.net'
- client_initiated_payments:
- description: 'Determines if clients can initiate payments directly from the client portal'
- type: boolean
- example: false
- client_initiated_payments_minimum:
- description: 'The minimum amount a client can pay'
- type: number
- example: 10
- sync_invoice_quote_columns:
- description: 'Determines if invoice and quote columns are synced for the PDF rendering, or if they use their own columns'
- type: boolean
- example: false
- show_task_item_description:
- description: 'Determines if the task item description is shown on the invoice'
- type: boolean
- example: false
- allow_billable_task_items:
- description: 'Determines if task items can be marked as billable'
- type: boolean
- example: false
- accept_client_input_quote_approval:
- description: 'Determines if clients can approve quotes and also pass through a PO Number reference'
- type: boolean
- example: false
- custom_sending_email:
- description: 'When using Mailgun or Postmark, the FROM email address can be customized using this setting.'
- type: string
- example: 'bob@gmail.com'
- show_paid_stamp:
- description: 'Determines if the PAID stamp is shown on the invoice'
- type: boolean
- example: false
- show_shipping_address:
- description: 'Determines if the shipping address is shown on the invoice'
- type: boolean
- example: false
- company_logo_size:
- description: 'The size of the company logo on the PDF - percentage value between 0 and 100'
- type: number
- example: 100
- show_email_footer:
- description: 'Determines if the email footer is shown on emails'
- type: boolean
- example: false
- email_alignment:
- description: 'The alignment of the email body text, options include left / center / right'
- type: string
- example: 'left'
- auto_bill_standard_invoices:
- description: 'Determines if standard invoices are automatically billed when they are created or due'
- type: boolean
- example: false
- postmark_secret:
- description: 'The Postmark secret API key'
- type: string
- example: '123456'
- mailgun_secret:
- description: 'The Mailgun secret API key'
- type: string
- example: '123456'
- mailgun_domain:
- description: 'The Mailgun domain'
- type: string
- example: 'sandbox123456.mailgun.org'
- send_email_on_mark_paid:
- description: 'Determines if an email is sent when an invoice is marked as paid'
- type: boolean
- example: false
- vendor_portal_enable_uploads:
- description: 'Determines if vendors can upload files to the portal'
- type: boolean
- example: false
- besr_id:
- description: 'The BESR ID'
- type: string
- example: '123456'
- qr_iban:
- description: 'The IBAN for the QR code'
- type: string
- example: 'CH123456'
- email_subject_purchase_order:
- description: 'The email subject for purchase orders'
- type: string
- example: 'Purchase Order'
- email_template_purchase_order:
- description: 'The email template for purchase orders'
- type: string
- example: 'Please see attached your purchase order.'
- require_purchase_order_signature:
- description: 'Determines if a signature is required on purchase orders'
- type: boolean
- example: false
- purchase_order_public_notes:
- description: 'The public notes for purchase orders'
- type: string
- example: 'Please see attached your purchase order.'
- purchase_order_terms:
- description: 'The terms for purchase orders'
- type: string
- example: 'Please see attached your purchase order.'
- purchase_order_footer:
- description: 'The footer for purchase orders'
- type: string
- example: 'Please see attached your purchase order.'
- purchase_order_design_id:
- description: 'The design id for purchase orders'
- type: string
- example: 'hd677df'
- purchase_order_number_pattern:
- description: 'The pattern for purchase order numbers'
- type: string
- example: 'PO-000000'
- purchase_order_number_counter:
- description: 'The counter for purchase order numbers'
- type: number
- example: 1
- page_numbering_alignment:
- description: 'The alignment for page numbering: options include left / center / right'
- type: string
- example: 'left'
- page_numbering:
- description: 'Determines if page numbering is enabled on Document PDFs'
- type: boolean
- example: false
- auto_archive_invoice_cancelled:
- description: 'Determines if invoices are automatically archived when they are cancelled'
- type: boolean
- example: false
- email_from_name:
- description: 'The FROM name for emails when using Custom emailers'
- type: string
- example: 'Bob Smith'
- show_all_tasks_client_portal:
- description: 'Determines if all tasks are shown on the client portal'
- type: boolean
- example: false
- entity_send_time:
- description: 'The time that emails are sent. The time is localized to the clients locale, integer values from 1 - 24'
- type: integer
- example: 9
- shared_invoice_credit_counter:
- description: 'Determines if the invoice and credit counter are shared'
- type: boolean
- example: false
- reply_to_name:
- description: 'The reply to name for emails'
- type: string
- example: 'Bob Smith'
- hide_empty_columns_on_pdf:
- description: 'Determines if empty columns are hidden on PDFs'
- type: boolean
- example: false
- enable_reminder_endless:
- description: 'Determines if endless reminders are enabled'
- type: boolean
- example: false
- use_credits_payment:
- description: 'Determines if credits can be used as a payment method'
- type: boolean
- example: false
- recurring_invoice_number_pattern:
- description: 'The pattern for recurring invoice numbers'
- type: string
- example: 'R-000000'
- recurring_invoice_number_counter:
- description: 'The counter for recurring invoice numbers'
- type: number
- example: 1
- client_portal_under_payment_minimum:
- description: 'The minimum payment payment'
- type: number
- example: 10
- auto_bill_date:
- description: 'Determines when the invoices are auto billed, options are on_send_date (when the invoice is sent) or on_due_date (when the invoice is due))'
- type: string
- example: 'on_send_date'
- primary_color:
- description: 'The primary color for the client portal / document highlights'
- type: string
- example: '#ffffff'
- secondary_color:
- description: 'The secondary color for the client portal / document highlights'
- type: string
- example: '#ffffff'
- client_portal_allow_under_payment:
- description: 'Determines if clients can pay invoices under the invoice amount due'
- type: boolean
- example: false
- client_portal_allow_over_payment:
- description: 'Determines if clients can pay invoices over the invoice amount'
- type: boolean
- example: false
- auto_bill:
- description: 'Determines how autobilling is applied for recurring invoices. off (no auto billed), always (always auto bill), optin (The user must opt in to auto billing), optout (The user must opt out of auto billing'
- type: string
- example: 'off'
- client_portal_terms:
- description: 'The terms which are displayed on the client portal'
- type: string
- example: 'Please see attached your invoice.'
- client_portal_privacy_policy:
- description: 'The privacy policy which is displayed on the client portal'
- type: string
- example: 'These are the terms of use for using the client portal.'
- client_can_register:
- description: 'Determines if clients can register on the client portal'
- type: boolean
- example: false
- portal_design_id:
- description: 'The design id for the client portal'
- type: string
- example: 'hd677df'
- late_fee_endless_percent:
- description: 'The late fee percentage for endless late fees'
- type: number
- example: 10
- late_fee_endless_amount:
- description: 'The late fee amount for endless late fees'
- type: number
- example: 10
- auto_email_invoice:
- description: 'Determines if invoices are automatically emailed when they are created'
- type: boolean
- example: false
- email_signature:
- description: 'The email signature for emails'
- type: string
- example: 'Bob Smith'
- type: object
- Product:
- type: object
- properties:
- id:
- type: string
- description: 'The hashed product ID.'
- example: eP01N
- readOnly: true
- company_id:
- type: string
- description: 'The hashed ID of the company that owns this product.'
- example: eP01N
- readOnly: true
- user_id:
- type: string
- description: 'The hashed ID of the user that created this product.'
- example: n30m4
- readOnly: true
- assigned_user_id:
- type: string
- description: 'The hashed ID of the user assigned to this product.'
- example: pR0j3
- project_id:
- type: string
- description: 'The hashed ID of the project that this product is associated with.'
- example: pR0j3
- vendor_id:
- type: string
- description: 'The hashed ID of the vendor that this product is associated with.'
- example: pR0j3
- custom_value1:
- type: string
- description: 'Custom value field 1.'
- example: 'Custom value 1'
- custom_value2:
- type: string
- description: 'Custom value field 2.'
- example: 'Custom value 2'
- custom_value3:
- type: string
- description: 'Custom value field 3.'
- example: 'Custom value 3'
- custom_value4:
- type: string
- description: 'Custom value field 4.'
- example: 'Custom value 4'
- product_key:
- type: string
- description: 'The product key.'
- example: '1234'
- notes:
- type: string
- description: 'Notes about the product.'
- example: 'These are some notes about the product.'
- cost:
- type: number
- format: double
- description: 'The cost of the product. (Your purchase price for this product)'
- example: 10.0
- price:
- type: number
- format: double
- description: 'The price of the product that you are charging.'
- example: 20.0
- quantity:
- type: number
- format: double
- description: 'The quantity of the product. (used as a default)'
- example: 5.0
- tax_name1:
- type: string
- description: 'The name of tax 1.'
- example: 'Tax 1'
- tax_rate1:
- type: number
- format: double
- description: 'The rate of tax 1.'
- example: 10.0
- tax_name2:
- type: string
- description: 'The name of tax 2.'
- example: 'Tax 2'
- tax_rate2:
- type: number
- format: double
- description: 'The rate of tax 2.'
- example: 5.0
- tax_name3:
- type: string
- description: 'The name of tax 3.'
- example: 'Tax 3'
- tax_rate3:
- type: number
- format: double
- description: 'The rate of tax 3.'
- example: 0.0
- archived_at:
- type: integer
- format: timestamp
- description: 'The timestamp when the product was archived.'
- example: '2022-03-18T15:00:00Z'
- readOnly: true
- created_at:
- type: integer
- format: timestamp
- description: 'The timestamp when the product was created.'
- example: '2022-03-18T15:00:00Z'
- readOnly: true
- updated_at:
- description: Timestamp
- type: integer
- format: timestamp
- example: '2022-03-18T12:34:56.789Z'
- readOnly: true
- is_deleted:
- type: boolean
- description: 'Boolean flag determining if the product has been deleted'
- example: false
- readOnly: true
- in_stock_quantity:
- type: integer
- format: int32
- description: The quantity of the product that is currently in stock
- default: 0
- stock_notification:
- type: boolean
- description: Indicates whether stock notifications are enabled for this product
- default: true
- stock_notification_threshold:
- type: integer
- format: int32
- description: The minimum quantity threshold for which stock notifications will be triggered
- default: 0
- max_quantity:
- type: integer
- format: int32
- description: The maximum quantity that can be ordered for this product
- product_image:
- type: string
- description: The URL of the product image
- format: uri-reference
- tax_id:
- type: string
- default: '1'
- description: |
- The tax category id for this product.'
-
- The following constants are available (default = '1')
-
- ```
- PRODUCT_TYPE_PHYSICAL = '1'
- PRODUCT_TYPE_SERVICE = '2'
- PRODUCT_TYPE_DIGITAL = '3'
- PRODUCT_TYPE_SHIPPING = '4'
- PRODUCT_TYPE_EXEMPT = '5'
- PRODUCT_TYPE_REDUCED_TAX = '6'
- PRODUCT_TYPE_OVERRIDE_TAX = '7'
- PRODUCT_TYPE_ZERO_RATED = '8'
- PRODUCT_TYPE_REVERSE_TAX = '9'
- ```
- example: '1'
-
- ClientContactRequest:
- properties:
- id:
- description: 'The hashed if of the contact'
- type: string
- example: Opnel5aKBz
- readOnly: true
- first_name:
- description: 'The first name of the contact'
- type: string
- example: John
- last_name:
- description: 'The last name of the contact'
- type: string
- example: Doe
- phone:
- description: 'The phone number of the contact'
- type: string
- example: 555-152-4524
- custom_value1:
- description: 'A Custom field value'
- type: string
- example: ''
- custom_value2:
- description: 'A Custom field value'
- type: string
- example: ''
- custom_value3:
- description: 'A Custom field value'
- type: string
- example: ''
- custom_value4:
- description: 'A Custom field value'
- type: string
- example: ''
- email:
- description: 'The email of the contact'
- type: string
- example: ''
- password:
- description: 'The hashed password of the contact'
- type: string
- example: '*****'
- send_email:
- description: 'Boolean value determines is this contact should receive emails'
- type: boolean
- example: true
- type: object
- ClientRequest:
- required:
- - contacts
- - country_id
- properties:
- id:
- description: 'The unique identifier of the client'
- type: string
- example: Opnel5aKBz
- readOnly: true
- contacts:
- type: array
- description: 'A list of contacts associated with the client'
- items:
- $ref: '#/components/schemas/ClientContactRequest'
- name:
- description: 'The name of the client company or organization'
- type: string
- example: "Jim's Housekeeping"
- website:
- description: 'The website URL of the client company or organization'
- type: string
- example: 'https://www.jims-housekeeping.com'
- private_notes:
- description: 'Notes that are only visible to the user who created the client'
- type: string
- example: 'Client prefers email communication over phone calls'
- industry_id:
- description: 'The unique identifier of the industry the client operates in'
- type: number
- example: '5'
- size_id:
- description: 'The unique identifier for the size category of the client company or organization'
- type: number
- example: '2'
- address1:
- description: "First line of the client's address"
- type: string
- example: '123 Main St'
- address2:
- description: "Second line of the client's address, if needed"
- type: string
- example: 'Apt 4B'
- city:
- description: 'The city the client is located in'
- type: string
- example: 'Beverly Hills'
- state:
- description: 'The state, province, or locality the client is located in'
- type: string
- example: 'California'
- postal_code:
- description: 'The postal code or ZIP code of the client'
- type: string
- example: '90210'
- phone:
- description: "The client's phone number"
- type: string
- example: '555-3434-3434'
- country_id:
- description: "The unique identifier of the client's country"
- type: number
- format: integer
- example: '1'
- custom_value1:
- description: 'A custom field for storing additional information'
- type: string
- example: 'Preferred contact: Email'
- custom_value2:
- description: 'A custom field for storing additional information'
- type: string
- example: 'Account manager: John Doe'
- custom_value3:
- description: 'A custom field for storing additional information'
- type: string
- example: 'VIP client: Yes'
- custom_value4:
- description: 'A custom field for storing additional information'
- type: string
- example: 'Annual contract value: $50,000'
- vat_number:
- description: "The client's VAT (Value Added Tax) number, if applicable"
- type: string
- example: 'VAT123456'
- id_number:
- description: 'A unique identification number for the client, such as a tax ID or business registration number'
- type: string
- number:
- description: 'A system-assigned unique number for the client, typically used for invoicing purposes'
- type: string
- example: 'CL-0001'
- shipping_address1:
- description: "First line of the client's shipping address"
- type: string
- example: '5 Wallaby Way'
- shipping_address2:
- description: "Second line of the client's shipping address, if needed"
- type: string
- example: 'Suite 5'
- shipping_city:
- description: "The city of the client's shipping address"
- type: string
- example: 'Perth'
- shipping_state:
- description: "The state, province, or locality of the client's shipping address"
- type: string
- example: 'Western Australia'
- shipping_postal_code:
- description: "The postal code or ZIP code of the client's shipping address"
- type: string
- example: '6110'
- shipping_country_id:
- description: "The unique identifier of the country for the client's shipping address"
- type: number
- format: integer
- example: '4'
- is_deleted:
- description: 'A boolean value indicating whether the client has been deleted or not'
- type: boolean
- example: false
- readOnly: true
- group_settings_id:
- description: 'The group settings assigned to the client'
- type: string
- example: Opnel5aKBz
- routing_id:
- description: 'The routing address id for e-invoicing for this client'
- type: string
- example: Opnel5aKBz3489-dfkiu-2239-sdsd
- is_tax_exempt:
- description: 'Flag which defines if the client is exempt from taxes'
- type: boolean
- example: false
- has_valid_vat_number:
- description: 'Flag which defines if the client has a valid VAT number'
- type: boolean
- example: false
- readOnly: true
- classification:
- description: 'The classification of the client'
- type: string
- example: 'individual'
- settings:
- $ref: '#/components/schemas/ClientSettings'
- type: object
- Error:
- properties:
- message:
- description: 'Something terrible went wrong'
- type: string
- example: 'Unexpected error'
- code:
- description: 'The HTTP error code, ie 5xx 4xx'
- type: integer
- example: '500'
- type: object
- BTRules:
- properties:
- data_key:
- description: 'The key to search'
- type: string
- example: 'description,amount'
- operator:
- description: 'The operator flag of the search'
- type: string
- example: '>'
- value:
- description: 'The value to search for'
- type: string
- example: bob
- type: object
CompanySettings:
required:
- currency_id
@@ -21010,6 +16610,1598 @@ components:
type: string
example: 'individual'
type: object
+ SystemLog:
+ properties:
+ id:
+ description: 'The account hashed id'
+ type: string
+ example: AS3df3A
+ user_id:
+ description: 'The user_id hashed id'
+ type: string
+ example: AS3df3A
+ client_id:
+ description: 'The client_id hashed id'
+ type: string
+ example: AS3df3A
+ event_id:
+ description: 'The Log Type ID'
+ type: integer
+ example: 1
+ category_id:
+ description: 'The Category Type ID'
+ type: integer
+ example: 1
+ type_id:
+ description: 'The Type Type ID'
+ type: integer
+ example: 1
+ log:
+ description: 'The json object of the error'
+ type: object
+ example: '{''key'':''value''}'
+ updated_at:
+ description: Timestamp
+ type: string
+ example: '2'
+ created_at:
+ description: Timestamp
+ type: string
+ example: '2'
+ type: object
+ ClientGatewayToken:
+ properties:
+ id:
+ description: 'The hashed id of the client gateway token'
+ type: string
+ example: Opnel5aKBz
+ client_id:
+ description: 'The hashed_id of the client'
+ type: string
+ example: '2'
+ token:
+ description: 'The payment token'
+ type: string
+ example: '2'
+ routing_number:
+ description: 'THe bank account routing number'
+ type: string
+ example: '2'
+ company_gateway_id:
+ description: 'The hashed id of the company gateway'
+ type: string
+ example: '2'
+ is_default:
+ description: 'Flag determining if the token is the default payment method'
+ type: boolean
+ example: 'true'
+ type: object
+
+ GenericBulkAction:
+ properties:
+ action:
+ type: string
+ example: archive
+ description: 'The action to perform ie. archive / restore / delete'
+ ids:
+ type: array
+ items:
+ format: string
+ type: string
+ example: 2J234DFA,D2J234DFA,D2J234DFA
+ description: string array of client hashed ids
+ type: object
+ InvoiceInvitationRequest:
+ required:
+ - client_contact_id
+ properties:
+ id:
+ description: 'The entity invitation hashed id'
+ type: string
+ example: Opnel5aKBz
+ readOnly: true
+ client_contact_id:
+ description: 'The client contact hashed id'
+ type: string
+ example: Opnel5aKBz
+ key:
+ description: 'The invitation key'
+ type: string
+ example: Opnel5aKBz4343343566236gvbb
+ readOnly: true
+ link:
+ description: 'The invitation link'
+ type: string
+ example: 'https://www.example.com/invitations/Opnel5aKBz4343343566236gvbb'
+ readOnly: true
+ sent_date:
+ description: 'The invitation sent date'
+ type: string
+ format: date-time
+ readOnly: true
+ viewed_date:
+ description: 'The invitation viewed date'
+ type: string
+ format: date-time
+ readOnly: true
+ opened_date:
+ description: 'The invitation opened date'
+ type: string
+ format: date-time
+ readOnly: true
+ updated_at:
+ description: 'Timestamp'
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ archived_at:
+ description: 'Timestamp'
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ email_error:
+ description: 'The email error'
+ type: string
+ example: 'The email error'
+ readOnly: true
+ email_status:
+ description: 'The email status'
+ type: string
+ readOnly: true
+
+ Client:
+ properties:
+ id:
+ description: 'The unique identifier of the client'
+ type: string
+ example: Opnel5aKBz
+ readOnly: true
+ contacts:
+ type: array
+ items:
+ $ref: '#/components/schemas/ClientContact'
+ user_id:
+ description: 'The unique identifier of the user who created the client'
+ type: string
+ example: Ua6Rw4pVbS
+ readOnly: true
+ assigned_user_id:
+ description: 'The unique identifier of the user who has been assigned the client'
+ type: string
+ example: Ua6Rw4pVbS
+ name:
+ description: 'The name of the client company or organization'
+ type: string
+ example: "Jim's Housekeeping"
+ website:
+ description: 'The website URL of the client company or organization'
+ type: string
+ example: 'https://www.jims-housekeeping.com'
+ private_notes:
+ description: 'Notes that are only visible to the user who created the client'
+ type: string
+ example: 'Client prefers email communication over phone calls'
+ client_hash:
+ description: 'A unique hash value for the client'
+ type: string
+ example: asdfkjhk342hjhbfdvmnfb1
+ readOnly: true
+ industry_id:
+ description: 'The unique identifier of the industry the client operates in'
+ type: number
+ example: '5'
+ size_id:
+ description: 'The unique identifier for the size category of the client company or organization'
+ type: number
+ example: '2'
+ address1:
+ description: "First line of the client's address"
+ type: string
+ example: '123 Main St'
+ address2:
+ description: "Second line of the client's address, if needed"
+ type: string
+ example: 'Apt 4B'
+ city:
+ description: 'The city the client is located in'
+ type: string
+ example: 'Beverly Hills'
+ state:
+ description: 'The state, province, or locality the client is located in'
+ type: string
+ example: 'California'
+ postal_code:
+ description: 'The postal code or ZIP code of the client'
+ type: string
+ example: '90210'
+ phone:
+ description: "The client's phone number"
+ type: string
+ example: '555-3434-3434'
+ country_id:
+ description: "The unique identifier of the client's country"
+ type: number
+ format: integer
+ example: '1'
+ custom_value1:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'Preferred contact: Email'
+ custom_value2:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'Account manager: John Doe'
+ custom_value3:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'VIP client: Yes'
+ custom_value4:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'Annual contract value: $50,000'
+ vat_number:
+ description: "The client's VAT (Value Added Tax) number, if applicable"
+ type: string
+ example: 'VAT123456'
+ id_number:
+ description: 'A unique identification number for the client, such as a tax ID or business registration number'
+ type: string
+ number:
+ description: 'A system-assigned unique number for the client, typically used for invoicing purposes'
+ type: string
+ example: 'CL-0001'
+ shipping_address1:
+ description: "First line of the client's shipping address"
+ type: string
+ example: '5 Wallaby Way'
+ shipping_address2:
+ description: "Second line of the client's shipping address, if needed"
+ type: string
+ example: 'Suite 5'
+ shipping_city:
+ description: "The city of the client's shipping address"
+ type: string
+ example: 'Perth'
+ shipping_state:
+ description: "The state, province, or locality of the client's shipping address"
+ type: string
+ example: 'Western Australia'
+ shipping_postal_code:
+ description: "The postal code or ZIP code of the client's shipping address"
+ type: string
+ example: '6110'
+ shipping_country_id:
+ description: "The unique identifier of the country for the client's shipping address"
+ type: number
+ format: integer
+ example: '4'
+ is_deleted:
+ description: 'A boolean value indicating whether the client has been deleted or not'
+ type: boolean
+ example: false
+ readOnly: true
+ balance:
+ description: 'The outstanding balance the client owes'
+ type: number
+ format: float
+ example: '500.00'
+ readOnly: true
+ paid_to_date:
+ description: 'The total amount the client has paid to date'
+ type: number
+ format: float
+ example: '2000.00'
+ readOnly: true
+ credit_balance:
+ description: 'The available credit balance for the client to use on future purchases'
+ type: number
+ format: float
+ example: '100.00'
+ readOnly: true
+ last_login:
+ description: "The timestamp of the client's last login"
+ type: number
+ format: integer
+ example: '1628686031'
+ readOnly: true
+ created_at:
+ description: 'The timestamp when the client was created'
+ type: number
+ format: integer
+ example: '1617629031'
+ readOnly: true
+ updated_at:
+ description: 'The timestamp when the client was last updated'
+ type: number
+ format: integer
+ example: '1628445631'
+ readOnly: true
+ group_settings_id:
+ description: 'The group settings assigned to the client'
+ type: string
+ example: Opnel5aKBz
+ routing_id:
+ description: 'The routing address id for e-invoicing for this client'
+ type: string
+ example: Opnel5aKBz3489-dfkiu-2239-sdsd
+ is_tax_exempt:
+ description: 'Flag which defines if the client is exempt from taxes'
+ type: boolean
+ example: false
+ has_valid_vat_number:
+ description: 'Flag which defines if the client has a valid VAT number'
+ type: boolean
+ example: false
+ readOnly: true
+ payment_balance:
+ description: 'Defines the payment balance the client has on file (pre payments / over payments / unapplied amounts)'
+ type: number
+ example: 100
+ readOnly: true
+ settings:
+ $ref: '#/components/schemas/ClientSettings'
+ type: object
+ CompanyUser:
+ properties:
+ permissions:
+ description: 'The user permissionsfor this company in a comma separated list'
+ type: string
+ example: 'create_invoice,create_client,view_client'
+ settings:
+ description: 'Settings that are used for the flutter applications to store user preferences / metadata'
+ type: object
+ readOnly: true
+ react_settings:
+ description: 'Dedicated settings object for the react web application'
+ type: object
+ readOnly: true
+ is_owner:
+ description: 'Determines whether the user owns this company'
+ type: boolean
+ example: true
+ readOnly: true
+ is_admin:
+ description: 'Determines whether the user is the admin of this company'
+ type: boolean
+ example: true
+ readOnly: true
+ is_locked:
+ description: 'Determines whether the users access to this company has been locked'
+ type: boolean
+ example: true
+ readOnly: true
+ updated_at:
+ description: 'The last time the record was modified, format Unix Timestamp'
+ type: integer
+ example: '1231232312321'
+ deleted_at:
+ description: 'Timestamp when the user was archived, format Unix Timestamp'
+ type: integer
+ example: '12312312321'
+ account:
+ $ref: '#/components/schemas/Account'
+ company:
+ $ref: '#/components/schemas/Company'
+ user:
+ $ref: '#/components/schemas/User'
+ token:
+ $ref: '#/components/schemas/CompanyToken'
+ type: object
+ Design:
+ properties:
+ id:
+ description: 'The design hashed id'
+ type: string
+ example: AS3df3A
+ name:
+ description: 'The design name'
+ type: string
+ example: Beauty
+ design:
+ description: 'The design HTML'
+ type: string
+ example: ''
+ is_custom:
+ description: 'Flag to determine if the design is a custom user design'
+ type: boolean
+ example: true
+ is_active:
+ description: 'Flag to determine if the design is available for use'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Flag to determine if the design is deleted'
+ type: boolean
+ example: true
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ deleted_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ type: object
+ InvoiceRequest:
+ required:
+ - client_id
+ properties:
+ id:
+ description: 'The invoice hashed id'
+ type: string
+ example: Opnel5aKBz
+ readOnly: true
+ user_id:
+ description: 'The user hashed id'
+ type: string
+ example: Opnel5aKBz
+ assigned_user_id:
+ description: 'The assigned user hashed id'
+ type: string
+ example: Opnel5aKBz
+ client_id:
+ description: 'The client hashed id'
+ type: string
+ example: Opnel5aKBz
+ status_id:
+ description: 'The invoice status variable'
+ type: string
+ example: '4'
+ readOnly: true
+ number:
+ description: 'The invoice number - is a unique alpha numeric number per invoice per company'
+ type: string
+ example: INV_101
+ po_number:
+ description: 'The purchase order associated with this invoice'
+ type: string
+ example: PO-1234
+ terms:
+ description: 'The invoice terms'
+ type: string
+ example: 'These are invoice terms'
+ public_notes:
+ description: 'The public notes of the invoice'
+ type: string
+ example: 'These are some public notes'
+ private_notes:
+ description: 'The private notes of the invoice'
+ type: string
+ example: 'These are some private notes'
+ footer:
+ description: 'The invoice footer notes'
+ type: string
+ example: ''
+ custom_value1:
+ description: 'A custom field value'
+ type: string
+ example: '2022-10-01'
+ custom_value2:
+ description: 'A custom field value'
+ type: string
+ example: 'Something custom'
+ custom_value3:
+ description: 'A custom field value'
+ type: string
+ example: ''
+ custom_value4:
+ description: 'A custom field value'
+ type: string
+ example: ''
+ tax_name1:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_name2:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_rate1:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_rate2:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_name3:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_rate3:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ total_taxes:
+ description: 'The total taxes for the invoice'
+ type: number
+ format: float
+ example: '10.00'
+ readOnly: true
+ line_items:
+ type: array
+ description: 'An array of objects which define the line items of the invoice'
+ items:
+ $ref: '#/components/schemas/InvoiceItem'
+ invitations:
+ type: array
+ description: 'An array of objects which define the invitations of the invoice'
+ items:
+ $ref: '#/components/schemas/InvoiceInvitationRequest'
+ amount:
+ description: 'The invoice amount'
+ type: number
+ format: float
+ example: '10.00'
+ readOnly: true
+ balance:
+ description: 'The invoice balance'
+ type: number
+ format: float
+ example: '10.00'
+ readOnly: true
+ paid_to_date:
+ description: 'The amount paid on the invoice to date'
+ type: number
+ format: float
+ example: '10.00'
+ readOnly: true
+ discount:
+ description: 'The invoice discount, can be an amount or a percentage'
+ type: number
+ format: float
+ example: '10.00'
+ partial:
+ description: 'The deposit/partial amount'
+ type: number
+ format: float
+ example: '10.00'
+ is_amount_discount:
+ description: 'Flag determining if the discount is an amount or a percentage'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Defines if the invoice has been deleted'
+ type: boolean
+ example: true
+ readOnly: true
+ uses_inclusive_taxes:
+ description: 'Defines the type of taxes used as either inclusive or exclusive'
+ type: boolean
+ example: true
+ date:
+ description: 'The Invoice Date'
+ type: string
+ format: date
+ example: '1994-07-30'
+ last_sent_date:
+ description: 'The last date the invoice was sent out'
+ type: string
+ format: date
+ example: '1994-07-30'
+ readOnly: true
+ next_send_date:
+ description: 'The Next date for a reminder to be sent'
+ type: string
+ format: date
+ example: '1994-07-30'
+ readOnly: true
+ partial_due_date:
+ description: 'The due date for the deposit/partial amount'
+ type: string
+ format: date
+ example: '1994-07-30'
+ due_date:
+ description: 'The due date of the invoice'
+ type: string
+ format: date
+ example: '1994-07-30'
+ last_viewed:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ custom_surcharge1:
+ description: 'First Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge2:
+ description: 'Second Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge3:
+ description: 'Third Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge4:
+ description: 'Fourth Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge_tax1:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax2:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax3:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax4:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ project_id:
+ description: 'The project associated with this invoice'
+ type: string
+ example: Opnel5aKBz
+ type: object
+ FillableInvoice:
+ properties:
+ assigned_user_id:
+ description: "The assigned user's hashed ID"
+ type: string
+ example: 'a1b2c3d4'
+ client_id:
+ description: "The client's hashed ID"
+ type: string
+ example: 'x1y2z3a4'
+ number:
+ description: "The unique alphanumeric invoice number for each invoice per company"
+ type: string
+ example: INV_101
+ po_number:
+ description: "The purchase order number associated with the invoice"
+ type: string
+ example: 'PO12345'
+ terms:
+ description: "The terms and conditions for the invoice"
+ type: string
+ example: 'Net 30'
+ public_notes:
+ description: "Public notes visible to the client on the invoice"
+ type: string
+ example: 'Thank you for your business.'
+ private_notes:
+ description: "Private notes for internal use only"
+ type: string
+ example: 'Client is a slow payer.'
+ footer:
+ description: "The footer text displayed on the invoice"
+ type: string
+ example: 'Authorized Signature'
+ custom_value1:
+ description: "First custom value for additional information"
+ type: string
+ example: 'Project ABC'
+ custom_value2:
+ description: "Second custom value for additional information"
+ type: string
+ example: 'Department XYZ'
+ custom_value3:
+ description: "Third custom value for additional information"
+ type: string
+ example: 'Location 123'
+ custom_value4:
+ description: "Fourth custom value for additional information"
+ type: string
+ example: 'Currency USD'
+ tax_name1:
+ description: "Name of the first tax applied to the invoice"
+ type: string
+ example: 'VAT'
+ tax_name2:
+ description: "Name of the second tax applied to the invoice"
+ type: string
+ example: 'GST'
+ tax_rate1:
+ description: "Rate of the first tax applied to the invoice"
+ type: number
+ example: 10.00
+ tax_rate2:
+ description: "Rate of the second tax applied to the invoice"
+ type: number
+ example: 5.00
+ tax_name3:
+ description: "Name of the third tax applied to the invoice"
+ type: string
+ example: 'PST'
+ tax_rate3:
+ description: "Rate of the third tax applied to the invoice"
+ type: number
+ example: 8.00
+ line_items:
+ type: array
+ description: 'An array of objects which define the line items of the invoice'
+ items:
+ $ref: '#/components/schemas/InvoiceItem'
+ discount:
+ description: "The discount applied to the invoice"
+ type: number
+ example: 10.00
+ partial:
+ description: "The partial amount applied to the invoice"
+ type: number
+ example: 20.00
+ is_amount_discount:
+ description: "Indicates whether the discount applied is a fixed amount or a percentage"
+ type: boolean
+ example: true
+ uses_inclusive_taxes:
+ description: "Indicates whether the tax rates applied to the invoice are inclusive or exclusive"
+ type: boolean
+ example: true
+ date:
+ description: "The date the invoice was issued"
+ type: string
+ example: '1994-07-30'
+ partial_due_date:
+ description: "The due date for the partial payment"
+ type: string
+ example: '1994-08-15'
+ due_date:
+ description: "The due date for the invoice"
+ type: string
+ example: '1994-08-30'
+ custom_surcharge1:
+ description: "First custom surcharge applied to the invoice"
+ type: number
+ example: 10.00
+ custom_surcharge2:
+ description: "Second custom surcharge applied to the invoice"
+ type: number
+ example: 15.00
+ custom_surcharge3:
+ description: "Third custom surcharge applied to the invoice"
+ type: number
+ example: 5.00
+ custom_surcharge4:
+ description: "Fourth custom surcharge applied to the invoice"
+ type: number
+ example: 20.00
+ type: object
+ Paymentable:
+ properties:
+ id:
+ description: 'The paymentable hashed id'
+ type: string
+ example: AS3df3A
+ invoice_id:
+ description: 'The invoice hashed id'
+ type: string
+ example: AS3df3A
+ credit_id:
+ description: 'The credit hashed id'
+ type: string
+ example: AS3df3A
+ refunded:
+ description: 'The amount that has been refunded for this payment'
+ type: number
+ format: float
+ example: '10.00'
+ amount:
+ description: 'The amount that has been applied to the payment'
+ type: number
+ format: float
+ example: '10.00'
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ type: object
+ BankTransaction:
+ properties:
+ id:
+ description: 'The bank integration hashed id'
+ type: string
+ example: AS3df3A
+ user_id:
+ description: 'The user hashed id'
+ type: string
+ example: AS3df3A
+ transaction_id:
+ description: 'The id of the transaction rule'
+ type: integer
+ example: 343434
+ amount:
+ description: 'The transaction amount'
+ type: number
+ example: 10
+ currency_id:
+ description: 'The currency ID of the currency'
+ type: string
+ example: '1'
+ account_type:
+ description: 'The account type'
+ type: string
+ example: creditCard
+ description:
+ description: 'The description of the transaction'
+ type: string
+ example: 'Potato purchases for kevin'
+ category_id:
+ description: 'The category id'
+ type: integer
+ example: 1
+ category_type:
+ description: 'The category description'
+ type: string
+ example: Expenses
+ base_type:
+ description: 'Either CREDIT or DEBIT'
+ type: string
+ example: CREDIT
+ date:
+ description: 'The date of the transaction'
+ type: string
+ example: '2022-09-01'
+ bank_account_id:
+ description: 'The ID number of the bank account'
+ type: integer
+ example: '1'
+ type: object
+ Meta:
+ properties:
+ pagination:
+ $ref: '#/components/schemas/Pagination'
+ Pagination:
+ type: object
+ properties:
+ total:
+ type: integer
+ description: 'The total number of items'
+ example: 1
+ readOnly: true
+ count:
+ type: integer
+ description: 'The number of items per page'
+ example: 1
+ readOnly: true
+ per_page:
+ type: integer
+ description: 'The number of items per page'
+ example: 1
+ readOnly: true
+ current_page:
+ type: integer
+ description: 'The current page number'
+ example: 1
+ readOnly: true
+ total_pages:
+ type: integer
+ description: 'The total number of pages'
+ example: 1
+ readOnly: true
+ links:
+ type: object
+ description: 'The pagination links'
+ readOnly: true
+
+ FeesAndLimits:
+ properties:
+ min_limit:
+ description: 'The minimum amount accepted for this gateway'
+ type: string
+ example: '2'
+ max_limit:
+ description: 'The maximum amount accepted for this gateway'
+ type: string
+ example: '2'
+ fee_amount:
+ description: 'The gateway fee amount'
+ type: number
+ format: float
+ example: '2.0'
+ fee_percent:
+ description: 'The gateway fee percentage'
+ type: number
+ format: float
+ example: '2.0'
+ fee_tax_name1:
+ description: 'Fee tax name'
+ type: string
+ example: GST
+ fee_tax_name2:
+ description: 'Fee tax name'
+ type: string
+ example: VAT
+ fee_tax_name3:
+ description: 'Fee tax name'
+ type: string
+ example: 'CA Sales Tax'
+ fee_tax_rate1:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.0'
+ fee_tax_rate2:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '17.5'
+ fee_tax_rate3:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '25.0'
+ fee_cap:
+ description: 'If set the fee amount will be no higher than this amount'
+ type: number
+ format: float
+ example: '2.0'
+ adjust_fee_percent:
+ description: 'Adjusts the fee to match the exact gateway fee.'
+ type: boolean
+ example: true
+ type: object
+ InvoiceItem:
+ type: object
+ properties:
+ quantity:
+ type: number
+ example: 1
+ description: 'The quantity of the product offered for this line item'
+ cost:
+ type: number
+ format: float
+ example: 10.00
+ description: 'The cost of the product offered for this line item'
+ product_key:
+ type: string
+ example: 'Product key'
+ description: 'The product key of the product offered for this line item (Referred to as Product in the product tab)'
+ product_cost:
+ type: number
+ format: float
+ example: 10.00
+ description: 'The cost of the product offered for this line item (Referred to as Cost in the product tab)'
+ notes:
+ type: string
+ example: 'Item notes'
+ description: 'The notes/description for the product offered for this line item'
+ discount:
+ type: number
+ format: float
+ example: 5.00
+ description: 'The discount applied to the product offered for this line item'
+ is_amount_discount:
+ type: boolean
+ example: false
+ description: 'Indicates whether the discount applied to the product offered for this line item is a fixed amount or a percentage'
+ tax_name1:
+ type: string
+ example: 'GST'
+ description: 'The name of the first tax applied to the product offered for this line item'
+ tax_rate1:
+ type: number
+ format: float
+ example: 10.00
+ description: 'The rate of the first tax applied to the product offered for this line item'
+ tax_name2:
+ type: string
+ example: 'VAT'
+ description: 'The name of the second tax applied to the product offered for this line item'
+ tax_rate2:
+ type: number
+ format: float
+ example: 5.00
+ description: 'The rate of the second tax applied to the product offered for this line item'
+ tax_name3:
+ type: string
+ example: 'CA Sales Tax'
+ description: 'The name of the third tax applied to the product offered for this line item'
+ tax_rate3:
+ type: number
+ format: float
+ example: 3.00
+ description: 'The rate of the third tax applied to the product offered for this line item'
+ sort_id:
+ type: string
+ example: '0'
+ description: 'Deprecated'
+ deprecated: true
+ line_total:
+ type: number
+ format: float
+ example: 10.00
+ description: 'The total amount of the product offered for this line item'
+ readOnly: true
+ gross_line_total:
+ type: number
+ format: float
+ example: 15.00
+ description: 'The total amount of the product offered for this line item before discounts'
+ readOnly: true
+ tax_amount:
+ type: number
+ format: float
+ example: 1.00
+ description: 'The total amount of tax applied to the product offered for this line item'
+ readOnly: true
+ date:
+ type: string
+ format: date-time
+ example: '2023-03-19T00:00:00Z'
+ description: 'Deprecated'
+ deprecated: true
+ custom_value1:
+ type: string
+ example: 'Custom value 1'
+ description: 'The first custom value of the product offered for this line item'
+ custom_value2:
+ type: string
+ example: 'Custom value 2'
+ description: 'The second custom value of the product offered for this line item'
+ custom_value3:
+ type: string
+ example: 'Custom value 3'
+ description: 'The third custom value of the product offered for this line item'
+ custom_value4:
+ type: string
+ example: 'Custom value 4'
+ description: 'The fourth custom value of the product offered for this line item'
+ type_id:
+ type: string
+ example: '1'
+ description: '1 = product, 2 = service, 3 unpaid gateway fee, 4 paid gateway fee, 5 late fee, 6 expense'
+ default: '1'
+ tax_id:
+ type: string
+ example: '1'
+ default: '1'
+ description: 'The tax ID of the product: 1 product, 2 service, 3 digital, 4 shipping, 5 exempt, 5 reduced tax, 7 override, 8 zero rate, 9 reverse tax'
+ Project:
+ type: object
+ properties:
+ id:
+ description: 'The project hashed id'
+ type: string
+ example: Opnel5aKBz
+ user_id:
+ description: 'The user hashed id'
+ type: string
+ example: Opnel5aKBz
+ assigned_user_id:
+ description: The assigned user identifier associated with the project
+ type: string
+ example: Opnel5aKBz
+ client_id:
+ type: string
+ example: Opnel5aKBz
+ description: The client identifier associated with the project
+ name:
+ type: string
+ description: The name of the project
+ example: 'New Project'
+ task_rate:
+ type: number
+ format: float
+ example: 10
+ description: The default rate per task for the project
+ due_date:
+ type: string
+ format: date
+ example: '2019-01-01'
+ description: The due date for the project
+ private_notes:
+ type: string
+ description: Private notes associated with the project
+ budgeted_hours:
+ type: number
+ format: float
+ description: The number of budgeted hours for the project
+ custom_value1:
+ type: string
+ description: Custom value field 1
+ custom_value2:
+ type: string
+ description: Custom value field 2
+ custom_value3:
+ type: string
+ description: Custom value field 3
+ custom_value4:
+ type: string
+ description: Custom value field 4
+ created_at:
+ type: number
+ format: integer
+ example: 134341234234
+ description: The timestamp of the project creation
+ updated_at:
+ type: number
+ format: integer
+ example: 134341234234
+ description: The timestamp of the last project update
+ archived_at:
+ type: number
+ format: integer
+ example: 134341234234
+ description: The timestamp of the project deletion
+ public_notes:
+ type: string
+ description: Public notes associated with the project
+ is_deleted:
+ type: boolean
+ description: A flag indicating if the project is deleted
+ number:
+ type: string
+ description: The project number
+ color:
+ type: string
+ description: The color associated with the project
+ required:
+ - id
+ - user_id
+ - name
+ - task_rate
+ - budgeted_hours
+ - is_deleted
+ - color
+
+ PaymentTerm:
+ properties:
+ num_days:
+ description: 'The payment term length in days'
+ type: integer
+ example: '1'
+ name:
+ description: 'The payment term length in string format'
+ type: string
+ example: 'NET 1'
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ type: object
+ BankIntegration:
+ properties:
+ id:
+ description: 'The bank integration hashed id'
+ type: string
+ example: AS3df3A
+ user_id:
+ description: 'The user hashed id'
+ type: string
+ example: AS3df3A
+ provider_bank_name:
+ description: 'The providers bank name'
+ type: string
+ example: 'Chase Bank'
+ bank_account_id:
+ description: 'The bank account id'
+ type: integer
+ example: '1233434'
+ bank_account_name:
+ description: 'The name of the account'
+ type: string
+ example: 'My Checking Acc'
+ bank_account_number:
+ description: 'The account number'
+ type: string
+ example: '111 234 2332'
+ bank_account_status:
+ description: 'The status of the bank account'
+ type: string
+ example: ACTIVE
+ bank_account_type:
+ description: 'The type of account'
+ type: string
+ example: CREDITCARD
+ balance:
+ description: 'The current bank balance if available'
+ type: number
+ example: '1000000'
+ currency:
+ description: 'iso_3166_3 code'
+ type: string
+ example: USD
+ type: object
+ PurchaseOrder:
+ properties:
+ id:
+ description: 'The unique hashed identifier for the purchase order'
+ type: string
+ example: Opnel5aKBz
+ user_id:
+ description: 'The unique hashed identifier for the user who created the purchase order'
+ type: string
+ example: ''
+ assigned_user_id:
+ description: 'The unique hashed identifier for the user assigned to the purchase order'
+ type: string
+ example: ''
+ vendor_id:
+ description: 'The unique hashed identifier for the vendor associated with the purchase order'
+ type: string
+ example: ''
+ status_id:
+ description: 'The status of the purchase order represented by a unique identifier'
+ type: string
+ example: ''
+ number:
+ description: 'The unique alpha-numeric purchase order number per company'
+ type: string
+ example: PO_101
+ quote_number:
+ description: 'The quote number associated with this purchase order'
+ type: string
+ example: QUOTE_101
+ terms:
+ description: 'The terms and conditions for the purchase order'
+ type: string
+ example: 'These are some purchase order terms. Valid for 14 days.'
+ public_notes:
+ description: 'Publicly visible notes associated with the purchase order'
+ type: string
+ example: 'These are public notes which the vendor may see'
+ private_notes:
+ description: 'Privately visible notes associated with the purchase order, not disclosed to the vendor'
+ type: string
+ example: 'These are private notes, not to be disclosed to the vendor'
+ footer:
+ description: 'The footer text of the purchase order'
+ type: string
+ example: 'The text goes in the footer of the purchase order'
+ custom_value1:
+ description: 'First custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ custom_value2:
+ description: 'Second custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ custom_value3:
+ description: 'Third custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ custom_value4:
+ description: 'Fourth custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ tax_name1:
+ description: 'The name of the first tax applied to the purchase order'
+ type: string
+ example: GST
+ tax_name2:
+ description: 'The name of the second tax applied to the purchase order'
+ type: string
+ example: VAT
+ tax_rate1:
+ description: 'The rate of the first tax applied to the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ tax_rate2:
+ description: 'The rate of the second tax applied to the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ tax_name3:
+ description: 'The name of the third tax applied to the purchase order'
+ type: string
+ example: ''
+ tax_rate3:
+ description: 'The rate of the third tax applied to the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ total_taxes:
+ description: 'The total amount of taxes applied to the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ line_items:
+ type: array
+ description: 'An array of objects which define the line items of the purchase order'
+ items:
+ $ref: '#/components/schemas/InvoiceItem'
+ amount:
+ description: 'The total amount of the purchase order before taxes and discounts'
+ type: number
+ format: float
+ example: 10.00
+ balance:
+ description: 'The balance due for the purchase order after accounting for payments'
+ type: number
+ format: float
+ example: 10.00
+ paid_to_date:
+ description: 'The total amount paid on the purchase order so far'
+ type: number
+ format: float
+ example: 10.00
+ discount:
+ description: 'The discount amount or percentage applied to the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ partial:
+ description: 'The partial or deposit amount for the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ is_amount_discount:
+ description: 'Boolean flag indicating if the discount is a fixed amount or a percentage'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Boolean flag indicating if the purchase order has been deleted'
+ type: boolean
+ example: false
+ uses_inclusive_taxes:
+ description: 'Boolean flag indicating if the taxes used are inclusive or exclusive'
+ type: boolean
+ example: true
+ date:
+ description: 'The date the purchase order was created'
+ type: string
+ format: date
+ example: '1994-07-30'
+ last_sent_date:
+ description: 'The last date the purchase order was sent to the vendor'
+ type: string
+ format: date
+ example: '1994-07-30'
+ next_send_date:
+ description: 'The next scheduled date for sending a reminder for the purchase order'
+ type: string
+ format: date
+ example: '1994-07-30'
+ partial_due_date:
+ description: 'The due date for the partial or deposit amount'
+ type: string
+ format: date
+ example: '1994-07-30'
+ due_date:
+ description: 'The due date for the total amount of the purchase order'
+ type: string
+ format: date
+ example: '1994-07-30'
+ settings:
+ $ref: '#/components/schemas/CompanySettings'
+ last_viewed:
+ description: Timestamp
+ type: number
+ format: integer
+ example: 1434342123
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: 1434342123
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: 1434342123
+ custom_surcharge1:
+ description: 'First custom surcharge amount for the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge2:
+ description: 'Second custom surcharge amount for the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge3:
+ description: 'Third custom surcharge amount for the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge4:
+ description: 'Fourth custom surcharge amount for the purchase order'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge_tax1:
+ description: 'Boolean flag indicating if taxes are charged on the first custom surcharge amount'
+ type: boolean
+ example: true
+ custom_surcharge_tax2:
+ description: 'Boolean flag indicating if taxes are charged on the second custom surcharge amount'
+ type: boolean
+ example: true
+ custom_surcharge_tax3:
+ description: 'Boolean flag indicating if taxes are charged on the third custom surcharge amount'
+ type: boolean
+ example: true
+ custom_surcharge_tax4:
+ description: 'Boolean flag indicating if taxes are charged on the fourth custom surcharge amount'
+ type: boolean
+ example: true
+ type: object
+
+
+ CompanyLedger:
+ properties:
+ entity_id:
+ description: 'This field will reference one of the following entity hashed ID payment_id, invoice_id or credit_id'
+ type: string
+ example: AS3df3A
+ notes:
+ description: 'The notes which reference this entry of the ledger'
+ type: string
+ example: 'Credit note for invoice #3212'
+ balance:
+ description: 'The client balance'
+ type: number
+ format: float
+ example: '10.00'
+ adjustment:
+ description: 'The amount the client balance is adjusted by'
+ type: number
+ format: float
+ example: '10.00'
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ type: object
+ Task:
+ properties:
+ id:
+ description: 'The hashed id of the task'
+ type: string
+ example: Opnel5aKBz
+ user_id:
+ description: 'The hashed id of the user who created the task'
+ type: string
+ example: Opnel5aKBz
+ assigned_user_id:
+ description: 'The assigned user of the task'
+ type: string
+ example: Opnel5aKBz
+ client_id:
+ description: 'The hashed if of the client'
+ type: string
+ example: Opnel5aKBz
+ invoice_id:
+ description: 'The hashed id of the invoice associated with the task'
+ type: string
+ example: Opnel5aKBz
+ project_id:
+ description: 'The hashed id of the project associated with the task'
+ type: string
+ example: Opnel5aKBz
+ number:
+ description: 'The number of the task'
+ type: string
+ example: TASK-123
+ time_log:
+ description: 'An array of unix time stamps defining the start and end times of the task'
+ type: string
+ example: '[[1,2],[3,4]]'
+ is_running:
+ description: 'Determines if the task is still running'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Boolean flag determining if the task has been deleted'
+ type: boolean
+ example: true
+ task_status_id:
+ description: 'The hashed id of the task status'
+ type: string
+ example: Opnel5aKBz
+ description:
+ description: 'The task description'
+ type: string
+ example: 'A wonder task to work on'
+ duration:
+ description: 'The task duration in seconds'
+ type: integer
+ example: '3600'
+ task_status_order:
+ description: 'The order of the task'
+ type: integer
+ example: '4'
+ rate:
+ description: 'The task rate'
+ type: number
+ example: 10.00
+ custom_value1:
+ description: 'A custom value'
+ type: string
+ example: '2022-10-10'
+ custom_value2:
+ description: 'A custom value'
+ type: string
+ example: $1100
+ custom_value3:
+ description: 'A custom value'
+ type: string
+ example: 'I need help'
+ custom_value4:
+ description: 'A custom value'
+ type: string
+ example: INV-3343
+ is_date_based:
+ description: 'Boolean flag determining if the task is date based'
+ type: boolean
+ example: true
+ calculated_start_date:
+ description: 'The calculated start date of the task'
+ type: string
+ example: '2022-10-10'
+ readOnly: true
+ invoice_documents:
+ description: "Boolean flags which determines whether to include the task documents on the invoice"
+ type: boolean
+ example: true
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ readOnly: true
+ type: object
ClientContact:
properties:
id:
@@ -21022,11 +18214,6 @@ components:
type: string
example: Opnel5aKBz
readOnly: true
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
- readOnly: true
client_id:
description: 'The hashed id of the client'
type: string
@@ -21141,239 +18328,2827 @@ components:
example: '134341234234'
readOnly: true
type: object
-
- FeesAndLimits:
+ ClientContactRequest:
properties:
- min_limit:
- description: 'The minimum amount accepted for this gateway'
+ id:
+ description: 'The hashed if of the contact'
type: string
- example: '2'
- max_limit:
- description: 'The maximum amount accepted for this gateway'
+ example: Opnel5aKBz
+ readOnly: true
+ first_name:
+ description: 'The first name of the contact'
type: string
- example: '2'
- fee_amount:
- description: 'The gateway fee amount'
- type: number
- format: float
- example: '2.0'
- fee_percent:
- description: 'The gateway fee percentage'
- type: number
- format: float
- example: '2.0'
- fee_tax_name1:
- description: 'Fee tax name'
+ example: John
+ last_name:
+ description: 'The last name of the contact'
type: string
- example: GST
- fee_tax_name2:
- description: 'Fee tax name'
+ example: Doe
+ phone:
+ description: 'The phone number of the contact'
type: string
- example: VAT
- fee_tax_name3:
- description: 'Fee tax name'
+ example: 555-152-4524
+ custom_value1:
+ description: 'A Custom field value'
type: string
- example: 'CA Sales Tax'
- fee_tax_rate1:
- description: 'The tax rate'
- type: number
- format: float
- example: '10.0'
- fee_tax_rate2:
- description: 'The tax rate'
- type: number
- format: float
- example: '17.5'
- fee_tax_rate3:
- description: 'The tax rate'
- type: number
- format: float
- example: '25.0'
- fee_cap:
- description: 'If set the fee amount will be no higher than this amount'
- type: number
- format: float
- example: '2.0'
- adjust_fee_percent:
- description: 'Adjusts the fee to match the exact gateway fee.'
+ example: ''
+ custom_value2:
+ description: 'A Custom field value'
+ type: string
+ example: ''
+ custom_value3:
+ description: 'A Custom field value'
+ type: string
+ example: ''
+ custom_value4:
+ description: 'A Custom field value'
+ type: string
+ example: ''
+ email:
+ description: 'The email of the contact'
+ type: string
+ example: ''
+ password:
+ description: 'The hashed password of the contact'
+ type: string
+ example: '*****'
+ send_email:
+ description: 'Boolean value determines is this contact should receive emails'
type: boolean
example: true
type: object
- Account:
+ VendorContact:
properties:
id:
- description: 'The account hashed id'
+ description: 'The hashed id of the vendor contact'
type: string
- example: AS3df3A
- account_sms_verified:
- description: 'Boolean flag if the account has been verified by sms'
+ example: Opnel5aKBz
+ readOnly: true
+ user_id:
+ description: 'The hashed id of the user id'
type: string
+ example: Opnel5aKBz
+ readOnly: true
+ vendor_id:
+ description: 'The hashed id of the vendor'
+ type: string
+ example: Opnel5aKBz
+ readOnly: true
+ first_name:
+ description: 'The first name of the contact'
+ type: string
+ example: Harry
+ last_name:
+ description: 'The last name of the contact'
+ type: string
+ example: Windsor
+ contact_key:
+ description: 'A unique identifier for the contact'
+ type: string
+ example: JD0X52bkfZlJRiroCJ0tcSiAjsJTntZ5uqKdiZ0a
+ readOnly: true
+ confirmation_code:
+ description: 'The confirmation code used to authenticate the contacts email address'
+ type: string
+ example: 333-sdjkh34gbasd
+ readOnly: true
+ phone:
+ description: 'The contacts phone number'
+ type: string
+ example: 555-123-1234
+ custom_value1:
+ description: 'A custom value'
+ type: string
+ example: '2022-10-10'
+ custom_value2:
+ description: 'A custom value'
+ type: string
+ example: $1000
+ custom_value3:
+ description: 'A custom value'
+ type: string
+ example: ''
+ custom_value4:
+ description: 'A custom value'
+ type: string
+ example: ''
+ email:
+ description: 'The contact email address'
+ type: string
+ example: harry@windsor.com
+ email_verified_at:
+ description: 'The date which the contact confirmed their email'
+ type: number
+ format: integer
+ example: '134341234234'
+ readOnly: true
+ password:
+ description: 'The hashed password of the contact'
+ type: string
+ example: '*****'
+ is_primary:
+ description: 'Boolean flag determining if the contact is the primary contact for the vendor'
+ type: boolean
example: true
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ readOnly: true
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ readOnly: true
+ deleted_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ readOnly: true
type: object
- BankTransactionRule:
+ Subscription:
properties:
id:
- description: 'The bank transaction rules hashed id'
+ description: Unique identifier for the subscription
type: string
- example: AS3df3A
- company_id:
- description: 'The company hashed id'
+ example: Opnel5aKBz
+ user_id:
+ description: Unique identifier for the user associated with the subscription
type: string
- example: AS3df3A
+ example: Ua6Rw4pVbS
+ product_id:
+ description: Unique identifier for the product associated with the subscription
+ type: string
+ example: Pr5Ft7yBmC
+ recurring_invoice_id:
+ description: Unique identifier for the recurring invoice associated with the subscription
+ type: string
+ example: Ri2Yt8zJkP
+ is_recurring:
+ description: Indicates whether the subscription is recurring
+ type: boolean
+ example: 'true'
+ frequency_id:
+ description: 'integer const representation of the frequency'
+ type: string
+ example: '1'
+ auto_bill:
+ description: 'enum setting'
+ type: string
+ example: always
+ promo_code:
+ description: Promotional code applied to the subscription
+ type: string
+ example: PROMOCODE4U
+ promo_discount:
+ description: Discount percentage or amount applied to the subscription
+ type: number
+ example: 10
+ is_amount_discount:
+ description: Indicates whether the discount is a fixed amount
+ type: boolean
+ example: 'true'
+ allow_cancellation:
+ description: Indicates whether the subscription can be cancelled
+ type: boolean
+ example: 'true'
+ per_seat_enabled:
+ description: Indicates whether the subscription pricing is per seat
+ type: boolean
+ example: 'true'
+ currency_id:
+ description: Unique identifier for the currency used in the subscription
+ type: integer
+ example: '1'
+ max_seats_limit:
+ description: Maximum number of seats allowed for the subscription
+ type: integer
+ example: '100'
+ trial_enabled:
+ description: Indicates whether the subscription has a trial period
+ type: boolean
+ example: 'true'
+ trial_duration:
+ description: Duration of the trial period in days
+ type: integer
+ example: '14'
+ allow_query_overrides:
+ description: Indicates whether query overrides are allowed for the subscription
+ type: boolean
+ example: 'true'
+ allow_plan_changes:
+ description: Indicates whether plan changes are allowed for the subscription
+ type: boolean
+ example: 'true'
+ refund_period:
+ description: Number of days within which refunds can be requested
+ type: integer
+ example: '30'
+ webhook_configuration:
+ description: Webhook configuration for the subscription
+ type: string
+ example: 'expand reference for this'
+ is_deleted:
+ description: Indicates whether the subscription has been deleted
+ type: boolean
+ example: 'false'
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ type: object
+ BulkAction:
+ type: array
+ items:
+ type: integer
+ example: '[0,1,2,3,]'
+ BTRules:
+ properties:
+ data_key:
+ description: 'The key to search'
+ type: string
+ example: 'description,amount'
+ operator:
+ description: 'The operator flag of the search'
+ type: string
+ example: '>'
+ value:
+ description: 'The value to search for'
+ type: string
+ example: bob
+ type: object
+ Company:
+ properties:
+ id:
+ description: "The unique hashed identifier for the company"
+ type: string
+ example: WJxbojagwO
+ size_id:
+ description: "The unique identifier representing the company's size category"
+ type: string
+ example: '2'
+ industry_id:
+ description: "The unique identifier representing the company's industry category"
+ type: string
+ example: '5'
+ slack_webhook_url:
+ description: "The URL for the company's Slack webhook notifications"
+ type: string
+ example: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
+ google_analytics_key:
+ description: "The company's Google Analytics tracking ID"
+ type: string
+ example: 'UA-123456789-1'
+ portal_mode:
+ description: "The mode determining how client-facing URLs are structured (e.g., subdomain, domain, or iframe)"
+ type: string
+ example: subdomain
+ subdomain:
+ description: "The subdomain prefix for the company's domain (e.g., 'acme' in acme.domain.com)"
+ type: string
+ example: acme
+ portal_domain:
+ description: "The fully qualified domain used for client-facing URLs"
+ type: string
+ example: 'https://subdomain.invoicing.co'
+ enabled_tax_rates:
+ description: "The number of tax rates used per entity"
+ type: integer
+ example: '2'
+ fill_products:
+ description: "A flag determining whether to auto-fill product descriptions based on the product key"
+ type: boolean
+ example: true
+ convert_products:
+ description: "A flag determining whether to convert products between different types or units"
+ type: boolean
+ example: true
+ update_products:
+ description: "A flag determining whether to update product descriptions when the description changes"
+ type: boolean
+ example: true
+ show_product_details:
+ description: "A flag determining whether to display product details in the user interface"
+ type: boolean
+ example: true
+ show_product_cost:
+ description: "A flag determining whether to display product cost is shown in the user interface"
+ type: boolean
+ example: true
+ custom_fields:
+ description: "A mapping of custom fields for various objects within the company"
+ type: object
+ enable_product_cost:
+ description: "A flag determining whether to show or hide the product cost field in the user interface"
+ type: boolean
+ example: true
+ enable_product_quantity:
+ description: "A flag determining whether to show or hide the product quantity field in the user interface"
+ type: boolean
+ example: true
+ default_quantity:
+ description: "A flag determining whether to use a default quantity for products"
+ type: boolean
+ example: true
+ custom_surcharge_taxes1:
+ description: "A flag determining whether to apply taxes on custom surcharge amounts for the first custom surcharge field"
+ type: boolean
+ example: true
+ custom_surcharge_taxes2:
+ description: "A flag determining whether to apply taxes on custom surcharge amounts for the second custom surcharge field"
+ type: boolean
+ example: true
+ custom_surcharge_taxes3:
+ description: "A flag determining whether to apply taxes on custom surcharge amounts for the third custom surcharge field"
+ type: boolean
+ example: true
+ custom_surcharge_taxes4:
+ description: "A flag determining whether to apply taxes on custom surcharge amounts for the fourth custom"
+ logo:
+ description: "The company logo file in binary format"
+ type: string
+ format: binary
+ example: logo.png
+ company_key:
+ description: "The static company key hash used to identify the Company"
+ readOnly: true
+ type: string
+ example: "Vnb14bRlwiFjc5ckte6cfbygTRkn5IMQ"
+ client_can_register:
+ description: "A flag determining whether clients can register for the client portal"
+ type: boolean
+ example: true
+ enabled_modules:
+ type: integer
+ description: |
+ Bitmask representation of the modules that are enabled in the application
+
+ ```
+ self::ENTITY_RECURRING_INVOICE => 1,
+ self::ENTITY_CREDIT => 2,
+ self::ENTITY_QUOTE => 4,
+ self::ENTITY_TASK => 8,
+ self::ENTITY_EXPENSE => 16,
+ self::ENTITY_PROJECT => 32,
+ self::ENTITY_VENDOR => 64,
+ self::ENTITY_TICKET => 128,
+ self::ENTITY_PROPOSAL => 256,
+ self::ENTITY_RECURRING_EXPENSE => 512,
+ self::ENTITY_RECURRING_TASK => 1024,
+ self::ENTITY_RECURRING_QUOTE => 2048,
+ ```
+
+ The default per_page value is 20.
+
+ example: 2048
+ db:
+ readOnly: true
+ type: string
+ example: 'db-ninja-01'
+ first_day_of_week:
+ description: "The first day of the week for the company"
+ type: string
+ example: '1'
+ first_month_of_year:
+ description: "The first month for the company financial year"
+ type: string
+ example: '1'
+ enabled_item_tax_rates:
+ description: "The number of tax rates used per item"
+ type: integer
+ example: 2
+ is_large:
+ description: "A flag determining whether the company is considered large"
+ type: boolean
+ example: true
+ default_auto_bill:
+ type: string
+ example: 'always'
+ description: |
+ A flag determining whether to auto-bill clients by default
+
+ values:
+
+ - always - Always auto bill
+ - disabled - Never auto bill
+ - optin - Allow the client to select their auto bill status with the default being disabled
+ - optout -Allow the client to select their auto bill status with the default being enabled
+ mark_expenses_invoiceable:
+ description: "A flag determining whether to mark expenses as invoiceable by default"
+ type: boolean
+ example: true
+ mark_expenses_paid:
+ description: "A flag determining whether to mark expenses as paid by default"
+ type: boolean
+ example: true
+ invoice_expense_documents:
+ description: "A flag determining whether to include expense documents on invoices by default"
+ type: boolean
+ example: true
+ auto_start_tasks:
+ description: "A flag determining whether to auto-start tasks by default"
+ type: boolean
+ example: true
+ invoice_task_timelog:
+ description: "A flag determining whether to include task time logs on invoices by default"
+ type: boolean
+ example: true
+ invoice_task_documents:
+ description: "A flag determining whether to include task documents on invoices by default"
+ type: boolean
+ example: true
+ show_tasks_table:
+ description: "A flag determining whether to show the tasks table on invoices by default"
+ type: boolean
+ example: true
+ is_disabled:
+ description: "A flag determining whether the company is disabled"
+ type: boolean
+ example: true
+ default_task_is_date_based:
+ description: "A flag determining whether to default tasks to be date-based"
+ type: boolean
+ example: true
+ enable_product_discount:
+ description: "A flag determining whether to show or hide the product discount field in the user interface"
+ type: boolean
+ example: true
+ calculate_expense_tax_by_amount:
+ description: "A flag determining whether to calculate expense taxes by amount"
+ type: boolean
+ example: true
+ expense_inclusive_taxes:
+ description: "A flag determining whether to include taxes in the expense amount"
+ type: boolean
+ example: true
+ session_timeout:
+ description: "The session timeout for the company"
+ type: integer
+ example: 60
+ oauth_password_required:
+ description: "A flag determining whether to require a password for `dangerous` actions when using OAuth"
+ type: boolean
+ example: true
+ invoice_task_datelog:
+ description: "A flag determining whether to include task date logs on invoices by default"
+ type: boolean
+ example: true
+ default_password_timeout:
+ description: "The default password timeout for the company"
+ type: integer
+ example: 60
+ show_task_end_date:
+ description: "A flag determining whether to show the task end date on invoices by default"
+ type: boolean
+ example: true
+ markdown_enabled:
+ description: "A flag determining whether markdown is enabled for the company"
+ type: boolean
+ example: true
+ report_include_drafts:
+ description: "A flag determining whether to include draft invoices in reports"
+ type: boolean
+ example: true
+ client_registration_fields:
+ description: "The client registration fields for the company"
+ type: object
+ stop_on_unpaid_recurring:
+ description: "A flag determining whether to stop recurring invoices when they are unpaid"
+ type: boolean
+ example: true
+ use_quote_terms_on_conversion:
+ description: "A flag determining whether to use quote terms on conversion to an invoice"
+ type: boolean
+ example: true
+ enable_applying_payments:
+ description: "A flag determining whether to enable applying payments to invoices"
+ type: boolean
+ example: true
+ track_inventory:
+ description: "A flag determining whether to track inventory for the company"
+ type: boolean
+ example: true
+ inventory_notification_threshold:
+ description: "The inventory notification threshold for the company"
+ type: integer
+ example: 60
+ stock_notification:
+ description: "A flag determining whether to send stock notifications for the company"
+ type: boolean
+ example: true
+ matomo_url:
+ description: "The Matomo URL for the company"
+ type: string
+ example: 'https://matomo.example.com'
+ matomo_id:
+ description: "The Matomo ID for the company"
+ type: string
+ example: '1'
+ enabled_expense_tax_rates:
+ description: "The number of tax rates used per expense"
+ type: integer
+ example: 2
+ invoice_task_project:
+ description: "A flag determining whether to include the project on invoices by default"
+ type: boolean
+ example: true
+ report_include_deleted:
+ description: "A flag determining whether to include deleted invoices in reports"
+ type: boolean
+ example: true
+ invoice_task_lock:
+ description: "A flag determining whether to lock tasks when invoiced"
+ type: boolean
+ example: true
+ convert_payment_currency:
+ description: "A flag determining whether to convert the payment currency"
+ type: boolean
+ example: true
+ convert_expense_currency:
+ description: "A flag determining whether to convert the expense currency"
+ type: boolean
+ example: true
+ notify_vendor_when_paid:
+ description: "A flag determining whether to notify the vendor when an expense is paid"
+ type: boolean
+ example: true
+ invoice_task_hours:
+ description: "A flag determining whether to include the task hours on invoices by default"
+ type: boolean
+ example: true
+ calculate_taxes:
+ description: "A flag determining whether to calculate taxes for the company"
+ type: boolean
+ example: true
+ tax_data:
+ description: "The tax data for the company"
+ type: object
+ e_invoice_certificate:
+ description: "The e-invoice certificate for the company"
+ type: string
+ example: '-----BEGIN CERTIFICATE-----'
+ e_invoice_certificate_passphrase:
+ description: "The e-invoice certificate passphrase for the company"
+ type: string
+ example: 'secret'
+ origin_tax_data:
+ description: "The origin tax data for the company"
+ type: object
+ invoice_task_project_header:
+ description: "A flag determining whether to include the project header on invoices by default"
+ type: boolean
+ example: true
+ invoice_task_item_description:
+ description: "A flag determining whether to include the item description on invoices by default"
+ type: boolean
+ example: true
+
+ settings:
+ $ref: '#/components/schemas/CompanySettings'
+ type: object
+ RecurringInvoice:
+ properties:
+ id:
+ description: 'The hashed id of the recurring invoice'
+ type: string
+ example: Opnel5aKBz
user_id:
description: 'The user hashed id'
type: string
- example: AS3df3A
- name:
- description: 'The name of the transaction'
+ example: Opnel5aKBz
+ assigned_user_id:
+ description: 'The assigned user hashed id'
type: string
- example: 'Rule 1'
- rules:
- description: 'A mapped collection of the sub rules for the BankTransactionRule'
- type: array
- items:
- $ref: '#/components/schemas/BTRules'
- auto_convert:
- description: 'Flags whether the rule converts the transaction automatically'
- type: boolean
- example: true
- matches_on_all:
- description: 'Flags whether all subrules are required for the match'
- type: boolean
- example: true
- applies_to:
- description: 'Flags whether the rule applies to a CREDIT or DEBIT'
- type: string
- example: CREDIT
+ example: Opnel5aKBz
client_id:
description: 'The client hashed id'
type: string
- example: AS3df3A
- vendor_id:
- description: 'The vendor hashed id'
+ example: Opnel5aKBz
+ status_id:
+ description: 'The invoice status variable'
type: string
- example: AS3df3A
- category_id:
- description: 'The category hashed id'
+ example: '4'
+ frequency_id:
+ description: 'The recurring invoice frequency'
+ type: number
+ example: '4'
+ remaining_cycles:
+ description: 'The number of invoices left to be generated'
+ type: number
+ example: '4'
+ number:
+ description: 'The recurringinvoice number - is a unique alpha numeric number per invoice per company'
type: string
- example: AS3df3A
- type: object
- CompanyToken:
- properties:
- name:
- description: 'The token name'
+ example: INV_101
+ po_number:
+ description: 'The purchase order associated with this recurring invoice'
type: string
- example: 'Token Name'
- token:
- description: 'The token value'
+ example: PO-1234
+ terms:
+ description: 'The invoice terms'
type: string
- example: AS3df3jUUH765fhfd9KJuidj3JShjA
- is_system:
- description: 'Determines whether the token is created by the system rather than a user'
+ example: 'These are invoice terms'
+ public_notes:
+ description: 'The public notes of the invoice'
+ type: string
+ example: 'These are some public notes'
+ private_notes:
+ description: 'The private notes of the invoice'
+ type: string
+ example: 'These are some private notes'
+ footer:
+ description: 'The invoice footer notes'
+ type: string
+ example: ''
+ custom_value1:
+ description: 'A custom field value'
+ type: string
+ example: '2022-10-01'
+ custom_value2:
+ description: 'A custom field value'
+ type: string
+ example: 'Something custom'
+ custom_value3:
+ description: 'A custom field value'
+ type: string
+ example: ''
+ custom_value4:
+ description: 'A custom field value'
+ type: string
+ example: ''
+ tax_name1:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_name2:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_rate1:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_rate2:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_name3:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_rate3:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ total_taxes:
+ description: 'The total taxes for the invoice'
+ type: number
+ format: float
+ example: '10.00'
+ line_items:
+ description: 'An array of objects which define the line items of the invoice'
+ type: object
+ example: ''
+ amount:
+ description: 'The invoice amount'
+ type: number
+ format: float
+ example: '10.00'
+ balance:
+ description: 'The invoice balance'
+ type: number
+ format: float
+ example: '10.00'
+ paid_to_date:
+ description: 'The amount paid on the invoice to date'
+ type: number
+ format: float
+ example: '10.00'
+ discount:
+ description: 'The invoice discount, can be an amount or a percentage'
+ type: number
+ format: float
+ example: '10.00'
+ partial:
+ description: 'The deposit/partial amount'
+ type: number
+ format: float
+ example: '10.00'
+ is_amount_discount:
+ description: 'Flag determining if the discount is an amount or a percentage'
type: boolean
- example: 'true'
- type: object
- CompanyUser:
- properties:
- permissions:
- description: 'The company user permissions'
+ example: true
+ is_deleted:
+ description: 'Defines if the invoice has been deleted'
+ type: boolean
+ example: true
+ uses_inclusive_taxes:
+ description: 'Defines the type of taxes used as either inclusive or exclusive'
+ type: boolean
+ example: true
+ date:
+ description: 'The Invoice Date'
type: string
- example: '[create_invoice]'
+ format: date
+ example: '1994-07-30'
+ last_sent_date:
+ description: 'The last date the invoice was sent out'
+ type: string
+ format: date
+ example: '1994-07-30'
+ next_send_date:
+ description: 'The Next date for a reminder to be sent'
+ type: string
+ format: date
+ example: '1994-07-30'
+ partial_due_date:
+ description: 'The due date for the deposit/partial amount'
+ type: string
+ format: date
+ example: '1994-07-30'
+ due_date:
+ description: 'The due date of the invoice'
+ type: string
+ format: date
+ example: '1994-07-30'
settings:
- description: 'Settings that are used for the frontend applications to store user preferences / metadata'
- type: object
- react_settings:
- description: 'Dedicated settings object for the react web application'
- type: object
- is_owner:
- description: 'Determines whether the user owns this company'
- type: boolean
- example: true
- is_admin:
- description: 'Determines whether the user is the admin of this company'
- type: boolean
- example: true
- is_locked:
- description: 'Determines whether the users access to this company has been locked'
- type: boolean
- example: true
+ $ref: '#/components/schemas/CompanySettings'
+ last_viewed:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
updated_at:
- description: 'The last time the record was modified, format Unix Timestamp'
- type: integer
- example: '1231232312321'
- deleted_at:
- description: 'Timestamp when the user was archived, format Unix Timestamp'
- type: integer
- example: '12312312321'
- account:
- $ref: '#/components/schemas/Account'
- company:
- $ref: '#/components/schemas/Company'
- user:
- $ref: '#/components/schemas/User'
- token:
- $ref: '#/components/schemas/CompanyToken'
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ custom_surcharge1:
+ description: 'First Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge2:
+ description: 'Second Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge3:
+ description: 'Third Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge4:
+ description: 'Fourth Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge_tax1:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax2:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax3:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax4:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
type: object
- InvoiceInvitationRequest:
- required:
- - client_contact_id
+
+ Quote:
properties:
id:
- description: 'The entity invitation hashed id'
+ description: 'The unique hashed identifier for the quote'
+ type: string
+ example: Opnel5aKBz
+ user_id:
+ description: 'The unique hashed identifier for the user who created the quote'
+ type: string
+ example: ''
+ assigned_user_id:
+ description: 'The unique hashed identifier for the user assigned to the quote'
+ type: string
+ example: ''
+ client_id:
+ description: 'The unique hashed identifier for the client associated with the quote'
+ type: string
+ example: ''
+ status_id:
+ description: 'The status of the quote represented by a unique identifier'
+ type: string
+ example: ''
+ number:
+ description: 'The unique alpha-numeric quote number for the quote per company'
+ type: string
+ example: QUOTE_101
+ po_number:
+ description: 'The purchase order number associated with the quote'
+ type: string
+ example: PO-1234
+ terms:
+ description: 'The terms and conditions for the quote'
+ type: string
+ example: 'These are some quote terms. Valid for 14 days.'
+ public_notes:
+ description: 'Publicly visible notes associated with the quote'
+ type: string
+ example: 'These are public notes which the client may see'
+ private_notes:
+ description: 'Privately visible notes associated with the quote, not disclosed to the client'
+ type: string
+ example: 'These are private notes, not to be disclosed to the client'
+ footer:
+ description: 'The footer text of the quote'
+ type: string
+ example: 'The text goes in the footer of the quote'
+ custom_value1:
+ description: 'First custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ custom_value2:
+ description: 'Second custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ custom_value3:
+ description: 'Third custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ custom_value4:
+ description: 'Fourth custom value field for additional information'
+ type: string
+ example: 'A custom value'
+ tax_name1:
+ description: 'The name of the first tax applied to the quote'
+ type: string
+ example: GST
+ tax_name2:
+ description: 'The name of the second tax applied to the quote'
+ type: string
+ example: VAT
+ tax_rate1:
+ description: 'The rate of the first tax applied to the quote'
+ type: number
+ format: float
+ example: 10.00
+ tax_rate2:
+ description: 'The rate of the second tax applied to the quote'
+ type: number
+ format: float
+ example: 10.00
+ tax_name3:
+ description: 'The name of the third tax applied to the quote'
+ type: string
+ example: ''
+ tax_rate3:
+ description: 'The rate of the third tax applied to the quote'
+ type: number
+ format: float
+ example: 10.00
+ total_taxes:
+ description: 'The total amount of taxes for the quote'
+ type: number
+ format: float
+ example: 10.00
+ line_items:
+ type: array
+ description: 'An array of objects which define the line items of the quote'
+ items:
+ $ref: '#/components/schemas/InvoiceItem'
+ amount:
+ description: 'The total amount of the quote before taxes and discounts'
+ type: number
+ format: float
+ example: 10.00
+ balance:
+ description: 'The balance due for the quote after accounting for payments'
+ type: number
+ format: float
+ example: 10.00
+ paid_to_date:
+ description: 'The total amount paid on the quote so far'
+ type: number
+ format: float
+ example: 10.00
+ discount:
+ description: 'The discount amount or percentage applied to the quote'
+ type: number
+ format: float
+ example: 10.00
+ partial:
+ description: 'The partial or deposit amount for the quote'
+ type: number
+ format: float
+ example: 10.00
+ is_amount_discount:
+ description: 'Boolean flag indicating if the discount is a fixed amount or a percentage'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Boolean flag indicating if the quote has been deleted'
+ type: boolean
+ example: false
+ uses_inclusive_taxes:
+ description: 'Boolean flag indicating if the taxes used are inclusive or exclusive'
+ type: boolean
+ example: true
+ date:
+ description: 'The date the quote was created'
+ type: string
+ format: date
+ example: '1994-07-30'
+ last_sent_date:
+ description: 'The last date the quote was sent to the client'
+ type: string
+ format: date
+ example: '1994-07-30'
+ next_send_date:
+ description: 'The next scheduled date for sending a reminder for the quote'
+ type: string
+ format: date
+ example: '1994-07-30'
+ partial_due_date:
+ description: 'The due date for the partial or deposit amount'
+ type: string
+ format: date
+ example: '1994-07-30'
+ due_date:
+ description: 'The due date for the total amount of the quote'
+ type: string
+ format: date
+ example: '1994-07-30'
+ settings:
+ $ref: '#/components/schemas/CompanySettings'
+ last_viewed:
+ description: 'The timestamp of the last time the quote was viewed'
+ type: number
+ format: integer
+ example: 1434342123
+ updated_at:
+ description: 'The timestamp of the last update to the quote'
+ type: number
+ format: integer
+ example: 1434342123
+ archived_at:
+ description: 'The timestamp of when the quote was archived'
+ type: number
+ format: integer
+ example: 1434342123
+ custom_surcharge1:
+ description: 'First custom surcharge amount for the quote'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge2:
+ description: 'Second custom surcharge amount for the quote'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge3:
+ description: 'Third custom surcharge amount for the quote'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge4:
+ description: 'Fourth custom surcharge amount for the quote'
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge_tax1:
+ description: 'Boolean flag indicating if taxes are charged on the first custom surcharge amount'
+ type: boolean
+ example: true
+ custom_surcharge_tax2:
+ description: 'Boolean flag indicating if taxes are charged on the second custom surcharge amount'
+ type: boolean
+ example: true
+ custom_surcharge_tax3:
+ description: 'Boolean flag indicating if taxes are charged on the third custom surcharge amount'
+ type: boolean
+ example: true
+ custom_surcharge_tax4:
+ description: 'Boolean flag indicating if taxes are charged on the fourth custom surcharge amount'
+ type: boolean
+ example: true
+ type: object
+ Invoice:
+ properties:
+ id:
+ description: 'The invoice hashed id'
type: string
example: Opnel5aKBz
readOnly: true
- client_contact_id:
- description: 'The client contact hashed id'
+ user_id:
+ description: 'The user hashed id'
type: string
example: Opnel5aKBz
- key:
- description: 'The invitation key'
- type: string
- example: Opnel5aKBz4343343566236gvbb
readOnly: true
- link:
- description: 'The invitation link'
+ assigned_user_id:
+ description: 'The assigned user hashed id'
type: string
- example: 'https://www.example.com/invitations/Opnel5aKBz4343343566236gvbb'
+ example: Opnel5aKBz
+ client_id:
+ description: 'The client hashed id'
+ type: string
+ example: Opnel5aKBz
+ status_id:
+ description: 'The invoice status variable'
+ type: string
+ example: '4'
+ number:
+ description: 'The invoice number - is a unique alpha numeric number per invoice per company'
+ type: string
+ example: INV_101
+ po_number:
+ description: 'The purchase order associated with this invoice'
+ type: string
+ example: PO-1234
+ terms:
+ description: 'The invoice terms'
+ type: string
+ example: 'These are invoice terms'
+ public_notes:
+ description: 'The public notes of the invoice'
+ type: string
+ example: 'These are some public notes'
+ private_notes:
+ description: 'The private notes of the invoice'
+ type: string
+ example: 'These are some private notes'
+ footer:
+ description: 'The invoice footer notes'
+ type: string
+ example: ''
+ custom_value1:
+ description: 'A custom field value'
+ type: string
+ example: '2022-10-01'
+ custom_value2:
+ description: 'A custom field value'
+ type: string
+ example: 'Something custom'
+ custom_value3:
+ description: 'A custom field value'
+ type: string
+ example: ''
+ custom_value4:
+ description: 'A custom field value'
+ type: string
+ example: ''
+ tax_name1:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_name2:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_rate1:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_rate2:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_name3:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_rate3:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ total_taxes:
+ description: 'The total taxes for the invoice'
+ type: number
+ format: float
+ example: '10.00'
+ line_items:
+ type: array
+ description: 'An array of objects which define the line items of the invoice'
+ items:
+ $ref: '#/components/schemas/InvoiceItem'
+ invitations:
+ type: array
+ description: 'An array of objects which define the invitations of the invoice'
+ items:
+ $ref: '#/components/schemas/InvoiceInvitation'
+ amount:
+ description: 'The invoice amount'
+ type: number
+ format: float
+ example: '10.00'
+ balance:
+ description: 'The invoice balance'
+ type: number
+ format: float
+ example: '10.00'
+ paid_to_date:
+ description: 'The amount paid on the invoice to date'
+ type: number
+ format: float
+ example: '10.00'
+ discount:
+ description: 'The invoice discount, can be an amount or a percentage'
+ type: number
+ format: float
+ example: '10.00'
+ partial:
+ description: 'The deposit/partial amount'
+ type: number
+ format: float
+ example: '10.00'
+ is_amount_discount:
+ description: 'Flag determining if the discount is an amount or a percentage'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Defines if the invoice has been deleted'
+ type: boolean
+ example: true
+ uses_inclusive_taxes:
+ description: 'Defines the type of taxes used as either inclusive or exclusive'
+ type: boolean
+ example: true
+ date:
+ description: 'The Invoice Date'
+ type: string
+ format: date
+ example: '1994-07-30'
+ last_sent_date:
+ description: 'The last date the invoice was sent out'
+ type: string
+ format: date
+ example: '1994-07-30'
+ next_send_date:
+ description: 'The Next date for a reminder to be sent'
+ type: string
+ format: date
+ example: '1994-07-30'
+ partial_due_date:
+ description: 'The due date for the deposit/partial amount'
+ type: string
+ format: date
+ example: '1994-07-30'
+ due_date:
+ description: 'The due date of the invoice'
+ type: string
+ format: date
+ example: '1994-07-30'
+ last_viewed:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ custom_surcharge1:
+ description: 'First Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge2:
+ description: 'Second Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge3:
+ description: 'Third Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge4:
+ description: 'Fourth Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge_tax1:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax2:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax3:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax4:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ project_id:
+ description: 'The project associated with this invoice'
+ type: string
+ example: Opnel5aKBz
+ auto_bill_tries:
+ description: 'The number of times the invoice has attempted to be auto billed'
+ type: integer
+ example: '1'
readOnly: true
- sent_date:
- description: 'The invitation sent date'
+ auto_bill_enabled:
+ description: 'Boolean flag determining if the invoice is set to auto bill'
+ type: boolean
+ example: true
+ subscription_id:
+ description: 'The subscription associated with this invoice'
type: string
- format: date-time
+ example: Opnel5aKBz
+
+ type: object
+ ClientRequest:
+ required:
+ - contacts
+ - country_id
+ properties:
+ id:
+ description: 'The unique identifier of the client'
+ type: string
+ example: Opnel5aKBz
readOnly: true
- viewed_date:
- description: 'The invitation viewed date'
+ contacts:
+ type: array
+ description: 'A list of contacts associated with the client'
+ items:
+ $ref: '#/components/schemas/ClientContactRequest'
+ name:
+ description: 'The name of the client company or organization'
type: string
- format: date-time
+ example: "Jim's Housekeeping"
+ website:
+ description: 'The website URL of the client company or organization'
+ type: string
+ example: 'https://www.jims-housekeeping.com'
+ private_notes:
+ description: 'Notes that are only visible to the user who created the client'
+ type: string
+ example: 'Client prefers email communication over phone calls'
+ industry_id:
+ description: 'The unique identifier of the industry the client operates in'
+ type: number
+ example: '5'
+ size_id:
+ description: 'The unique identifier for the size category of the client company or organization'
+ type: number
+ example: '2'
+ address1:
+ description: "First line of the client's address"
+ type: string
+ example: '123 Main St'
+ address2:
+ description: "Second line of the client's address, if needed"
+ type: string
+ example: 'Apt 4B'
+ city:
+ description: 'The city the client is located in'
+ type: string
+ example: 'Beverly Hills'
+ state:
+ description: 'The state, province, or locality the client is located in'
+ type: string
+ example: 'California'
+ postal_code:
+ description: 'The postal code or ZIP code of the client'
+ type: string
+ example: '90210'
+ phone:
+ description: "The client's phone number"
+ type: string
+ example: '555-3434-3434'
+ country_id:
+ description: "The unique identifier of the client's country"
+ type: number
+ format: integer
+ example: '1'
+ custom_value1:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'Preferred contact: Email'
+ custom_value2:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'Account manager: John Doe'
+ custom_value3:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'VIP client: Yes'
+ custom_value4:
+ description: 'A custom field for storing additional information'
+ type: string
+ example: 'Annual contract value: $50,000'
+ vat_number:
+ description: "The client's VAT (Value Added Tax) number, if applicable"
+ type: string
+ example: 'VAT123456'
+ id_number:
+ description: 'A unique identification number for the client, such as a tax ID or business registration number'
+ type: string
+ number:
+ description: 'A system-assigned unique number for the client, typically used for invoicing purposes'
+ type: string
+ example: 'CL-0001'
+ shipping_address1:
+ description: "First line of the client's shipping address"
+ type: string
+ example: '5 Wallaby Way'
+ shipping_address2:
+ description: "Second line of the client's shipping address, if needed"
+ type: string
+ example: 'Suite 5'
+ shipping_city:
+ description: "The city of the client's shipping address"
+ type: string
+ example: 'Perth'
+ shipping_state:
+ description: "The state, province, or locality of the client's shipping address"
+ type: string
+ example: 'Western Australia'
+ shipping_postal_code:
+ description: "The postal code or ZIP code of the client's shipping address"
+ type: string
+ example: '6110'
+ shipping_country_id:
+ description: "The unique identifier of the country for the client's shipping address"
+ type: number
+ format: integer
+ example: '4'
+ is_deleted:
+ description: 'A boolean value indicating whether the client has been deleted or not'
+ type: boolean
+ example: false
readOnly: true
- opened_date:
- description: 'The invitation opened date'
+ group_settings_id:
+ description: 'The group settings assigned to the client'
type: string
- format: date-time
+ example: Opnel5aKBz
+ routing_id:
+ description: 'The routing address id for e-invoicing for this client'
+ type: string
+ example: Opnel5aKBz3489-dfkiu-2239-sdsd
+ is_tax_exempt:
+ description: 'Flag which defines if the client is exempt from taxes'
+ type: boolean
+ example: false
+ has_valid_vat_number:
+ description: 'Flag which defines if the client has a valid VAT number'
+ type: boolean
+ example: false
+ readOnly: true
+ classification:
+ description: 'The classification of the client'
+ type: string
+ example: 'individual'
+ settings:
+ $ref: '#/components/schemas/ClientSettings'
+ type: object
+ Vendor:
+ properties:
+ id:
+ description: 'The hashed id of the vendor. This is a unique identifier for the vendor.'
+ type: string
+ example: Opnel5aKBz
+ readOnly: true
+ user_id:
+ description: 'The hashed id of the user who created the vendor. This is a unique identifier for the user.'
+ type: string
+ example: Opnel5aKBz
+ assigned_user_id:
+ description: 'The hashed id of the assigned user to this vendor. This is a unique identifier for the user.'
+ type: string
+ example: Opnel5aKBz
+ contacts:
+ type: array
+ items:
+ $ref: '#/components/schemas/VendorContact'
+ description: 'An array of contacts associated with the vendor.'
+ name:
+ description: 'The name of the vendor.'
+ type: string
+ example: 'Harry cafe de wheels'
+ classification:
+ description: 'The classification of the vendor.'
+ type: string
+ example: 'individual'
+ website:
+ description: 'The website of the vendor.'
+ type: string
+ example: www.harry.com
+ private_notes:
+ description: 'The private notes of the vendor. These notes are only visible to users with appropriate permissions.'
+ type: string
+ example: 'Shhh, do not tell the vendor'
+ industry_id:
+ description: 'The industry id of the vendor. This is a unique identifier for the industry.'
+ type: string
+ example: '1'
+ size_id:
+ description: 'The size id of the vendor. This is a unique identifier for the size of the vendor.'
+ type: string
+ example: ''
+ address1:
+ description: 'The first line of the vendor''s address.'
+ type: string
+ example: ''
+ address2:
+ description: 'The second line of the vendor''s address.'
+ type: string
+ example: ''
+ city:
+ description: 'The city of the vendor''s address.'
+ type: string
+ example: ''
+ state:
+ description: 'The state of the vendor''s address.'
+ type: string
+ example: ''
+ postal_code:
+ description: 'The postal code of the vendor''s address.'
+ type: string
+ example: ''
+ phone:
+ description: 'The phone number of the vendor.'
+ type: string
+ example: 555-3434-3434
+ country_id:
+ description: 'The country id of the vendor. This is a unique identifier for the country.'
+ type: string
+ example: ''
+ currency_id:
+ description: 'The currency id of the vendor. This is a unique identifier for the currency.'
+ type: string
+ example: '4'
+ custom_value1:
+ description: 'The value of the first custom field for the vendor.'
+ type: string
+ example: ''
+ custom_value2:
+ description: 'The value of the second custom field for the vendor.'
+ type: string
+ example: ''
+ custom_value3:
+ description: 'The value of the third custom field for the vendor.'
+ type: string
+ example: ''
+ custom_value4:
+ description: 'The value of the fourth custom field for the vendor.'
+ type: string
+ example: ''
+ vat_number:
+ description: 'The VAT number of the vendor.'
+ type: string
+ example: ''
+ id_number:
+ description: 'The ID number of the vendor.'
+ type: string
+ example: ''
+ number:
+ description: 'The number of the vendor'
+ type: string
+ example: '11234'
+ is_deleted:
+ description: 'Boolean flag determining if the vendor has been deleted'
+ type: boolean
+ example: true
+ language_id:
+ description: 'The language id of the vendor. This is a unique identifier for the language.'
+ type: string
+ example: '1'
+ vendor_hash:
+ description: 'The vendor hash of the vendor. This is a unique identifier for the vendor.'
+ type: string
+ example: 'aaa-sss-www'
+ readOnly: true
+ transaction_name:
+ description: 'The transaction name of the vendor.'
+ type: string
+ example: 'aaa-sss-www'
+ last_login:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ readOnly: true
+ created_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
readOnly: true
updated_at:
- description: 'Timestamp'
+ description: Timestamp
+ type: number
+ format: integer
+ example: '134341234234'
+ readOnly: true
+ display_name:
+ description: 'The display name of the vendor.'
+ type: string
+ example: 'Bob the vendor'
+ readOnly: true
+ type: object
+ ClientSettings:
+ required:
+ - currency_id
+ properties:
+ currency_id:
+ description: 'The default currency id'
+ type: string
+ example: true
+ timezone_id:
+ description: 'The timezone id'
+ type: string
+ example: '15'
+ date_format_id:
+ description: 'The date format id'
+ type: string
+ example: '15'
+ military_time:
+ description: 'Toggles 12/24 hour time'
+ type: boolean
+ example: true
+ language_id:
+ description: 'The language id'
+ type: string
+ example: '1'
+ show_currency_code:
+ description: 'Toggles whether the currency symbol or code is shown'
+ type: boolean
+ example: true
+ payment_terms:
+ description: '-1 sets no payment term, 0 sets payment due immediately, positive integers indicates payment terms in days'
+ type: integer
+ example: '1'
+ company_gateway_ids:
+ description: 'A commad separate list of available gateways'
+ type: string
+ example: '1,2,3,4'
+ custom_value1:
+ description: 'A Custom Label'
+ type: string
+ example: 'Custom Label'
+ custom_value2:
+ description: 'A Custom Label'
+ type: string
+ example: 'Custom Label'
+ custom_value3:
+ description: 'A Custom Label'
+ type: string
+ example: 'Custom Label'
+ custom_value4:
+ description: 'A Custom Label'
+ type: string
+ example: 'Custom Label'
+ default_task_rate:
+ description: 'The default task rate'
+ type: number
+ format: float
+ example: '10.00'
+ send_reminders:
+ description: 'Toggles whether reminders are sent'
+ type: boolean
+ example: true
+ enable_client_portal_tasks:
+ description: 'Show/hide the tasks panel in the client portal'
+ type: boolean
+ example: true
+ email_style:
+ description: 'options include plain,light,dark,custom'
+ type: string
+ example: light
+ reply_to_email:
+ description: 'The reply to email address'
+ type: string
+ example: email@gmail.com
+ bcc_email:
+ description: 'A comma separate list of BCC emails'
+ type: string
+ example: 'email@gmail.com, contact@gmail.com'
+ pdf_email_attachment:
+ description: 'Toggles whether to attach PDF as attachment'
+ type: boolean
+ example: true
+ ubl_email_attachment:
+ description: 'Toggles whether to attach UBL as attachment'
+ type: boolean
+ example: true
+ email_style_custom:
+ description: 'The custom template'
+ type: string
+ example: ''
+ counter_number_applied:
+ description: 'enum when the invoice number counter is set, ie when_saved, when_sent, when_paid'
+ type: string
+ example: when_sent
+ quote_number_applied:
+ description: 'enum when the quote number counter is set, ie when_saved, when_sent'
+ type: string
+ example: when_sent
+ custom_message_dashboard:
+ description: 'A custom message which is displayed on the dashboard'
+ type: string
+ example: 'Please pay invoices immediately'
+ custom_message_unpaid_invoice:
+ description: 'A custom message which is displayed in the client portal when a client is viewing a unpaid invoice.'
+ type: string
+ example: 'Please pay invoices immediately'
+ custom_message_paid_invoice:
+ description: 'A custom message which is displayed in the client portal when a client is viewing a paid invoice.'
+ type: string
+ example: 'Thanks for paying this invoice!'
+ custom_message_unapproved_quote:
+ description: 'A custom message which is displayed in the client portal when a client is viewing a unapproved quote.'
+ type: string
+ example: 'Please approve quote'
+ lock_invoices:
+ description: 'Toggles whether invoices are locked once sent and cannot be modified further'
+ type: boolean
+ example: true
+ auto_archive_invoice:
+ description: 'Toggles whether a invoice is archived immediately following payment'
+ type: boolean
+ example: true
+ auto_archive_quote:
+ description: 'Toggles whether a quote is archived after being converted to a invoice'
+ type: boolean
+ example: true
+ auto_convert_quote:
+ description: 'Toggles whether a quote is converted to a invoice when approved'
+ type: boolean
+ example: true
+ inclusive_taxes:
+ description: 'Boolean flag determining whether inclusive or exclusive taxes are used'
+ type: boolean
+ example: true
+ task_number_pattern:
+ description: 'Allows customisation of the task number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ task_number_counter:
+ description: 'The incrementing counter for tasks'
+ type: integer
+ example: '1'
+ reminder_send_time:
+ description: 'Time from UTC +0 when the email will be sent to the client'
+ type: integer
+ example: '32400'
+ expense_number_pattern:
+ description: 'Allows customisation of the expense number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ expense_number_counter:
+ description: 'The incrementing counter for expenses'
+ type: integer
+ example: '1'
+ vendor_number_pattern:
+ description: 'Allows customisation of the vendor number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ vendor_number_counter:
+ description: 'The incrementing counter for vendors'
+ type: integer
+ example: '1'
+ ticket_number_pattern:
+ description: 'Allows customisation of the ticket number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ ticket_number_counter:
+ description: 'The incrementing counter for tickets'
+ type: integer
+ example: '1'
+ payment_number_pattern:
+ description: 'Allows customisation of the payment number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ payment_number_counter:
+ description: 'The incrementing counter for payments'
+ type: integer
+ example: '1'
+ invoice_number_pattern:
+ description: 'Allows customisation of the invoice number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ invoice_number_counter:
+ description: 'The incrementing counter for invoices'
+ type: integer
+ example: '1'
+ quote_number_pattern:
+ description: 'Allows customisation of the quote number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ quote_number_counter:
+ description: 'The incrementing counter for quotes'
+ type: integer
+ example: '1'
+ client_number_pattern:
+ description: 'Allows customisation of the client number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ client_number_counter:
+ description: 'The incrementing counter for clients'
+ type: integer
+ example: '1'
+ credit_number_pattern:
+ description: 'Allows customisation of the credit number pattern'
+ type: string
+ example: '{$year}-{$counter}'
+ credit_number_counter:
+ description: 'The incrementing counter for credits'
+ type: integer
+ example: '1'
+ recurring_invoice_number_prefix:
+ description: 'This string is prepended to the recurring invoice number'
+ type: string
+ example: R
+ reset_counter_frequency_id:
+ description: 'CONSTANT which is used to apply the frequency which the counters are reset'
+ type: integer
+ example: '1'
+ reset_counter_date:
+ description: 'The explicit date which is used to reset counters'
+ type: string
+ example: '2019-01-01'
+ counter_padding:
+ description: 'Pads the counter with leading zeros'
+ type: integer
+ example: '1'
+ shared_invoice_quote_counter:
+ description: 'Flags whether to share the counter for invoices and quotes'
+ type: boolean
+ example: true
+ update_products:
+ description: 'Determines if client fields are updated from third party APIs'
+ type: boolean
+ example: true
+ convert_products:
+ description: ''
+ type: boolean
+ example: true
+ fill_products:
+ description: 'Automatically fill products based on product_key'
+ type: boolean
+ example: true
+ invoice_terms:
+ description: 'The default invoice terms'
+ type: string
+ example: 'Invoice Terms are...'
+ quote_terms:
+ description: 'The default quote terms'
+ type: string
+ example: 'Quote Terms are...'
+ invoice_taxes:
+ description: 'Taxes can be applied to the invoice'
+ type: number
+ example: '1'
+ invoice_design_id:
+ description: 'The default design id (invoice, quote etc)'
+ type: string
+ example: '1'
+ quote_design_id:
+ description: 'The default design id (invoice, quote etc)'
+ type: string
+ example: '1'
+ invoice_footer:
+ description: 'The default invoice footer'
+ type: string
+ example: '1'
+ invoice_labels:
+ description: 'JSON string of invoice labels'
+ type: string
+ example: '1'
+ tax_rate1:
+ description: 'The tax rate (float)'
+ type: number
+ example: '10'
+ tax_name1:
+ description: 'The tax name'
+ type: string
+ example: GST
+ tax_rate2:
+ description: 'The tax rate (float)'
+ type: number
+ example: '10'
+ tax_name2:
+ description: 'The tax name'
+ type: string
+ example: GST
+ tax_rate3:
+ description: 'The tax rate (float)'
+ type: number
+ example: '10'
+ tax_name3:
+ description: 'The tax name'
+ type: string
+ example: GST
+ payment_type_id:
+ description: 'The default payment type id'
+ type: string
+ example: '1'
+ custom_fields:
+ description: 'JSON string of custom fields'
+ type: string
+ example: '{}'
+ email_footer:
+ description: 'The default email footer'
+ type: string
+ example: 'A default email footer'
+ email_sending_method:
+ description: 'The email driver to use to send email, options include default, gmail'
+ type: string
+ example: default
+ gmail_sending_user_id:
+ description: 'The hashed_id of the user account to send email from'
+ type: string
+ example: F76sd34D
+ email_subject_invoice:
+ description: ''
+ type: string
+ example: 'Your Invoice Subject'
+ email_subject_quote:
+ description: ''
+ type: string
+ example: 'Your Quote Subject'
+ email_subject_payment:
+ description: ''
+ type: string
+ example: 'Your Payment Subject'
+ email_template_invoice:
+ description: 'The full template for invoice emails'
+ type: string
+ example: ''
+ email_template_quote:
+ description: 'The full template for quote emails'
+ type: string
+ example: ''
+ email_template_payment:
+ description: 'The full template for payment emails'
+ type: string
+ example: ''
+ email_subject_reminder1:
+ description: 'Email subject for Reminder'
+ type: string
+ example: ''
+ email_subject_reminder2:
+ description: 'Email subject for Reminder'
+ type: string
+ example: ''
+ email_subject_reminder3:
+ description: 'Email subject for Reminder'
+ type: string
+ example: ''
+ email_subject_reminder_endless:
+ description: 'Email subject for endless reminders'
+ type: string
+ example: ''
+ email_template_reminder1:
+ description: 'The full template for Reminder 1'
+ type: string
+ example: ''
+ email_template_reminder2:
+ description: 'The full template for Reminder 2'
+ type: string
+ example: ''
+ email_template_reminder3:
+ description: 'The full template for Reminder 3'
+ type: string
+ example: ''
+ email_template_reminder_endless:
+ description: 'The full template for enless reminders'
+ type: string
+ example: ''
+ enable_portal_password:
+ description: 'Toggles whether a password is required to log into the client portal'
+ type: boolean
+ example: true
+ show_accept_invoice_terms:
+ description: 'Toggles whether the terms dialogue is shown to the client'
+ type: boolean
+ example: true
+ show_accept_quote_terms:
+ description: 'Toggles whether the terms dialogue is shown to the client'
+ type: boolean
+ example: true
+ require_invoice_signature:
+ description: 'Toggles whether a invoice signature is required'
+ type: boolean
+ example: true
+ require_quote_signature:
+ description: 'Toggles whether a quote signature is required'
+ type: boolean
+ example: true
+ name:
+ description: 'The company name'
+ type: string
+ example: 'Acme Co'
+ company_logo:
+ description: 'The company logo file'
+ type: object
+ example: logo.png
+ website:
+ description: 'The company website URL'
+ type: string
+ example: www.acme.com
+ address1:
+ description: 'The company address line 1'
+ type: string
+ example: 'Suite 888'
+ address2:
+ description: 'The company address line 2'
+ type: string
+ example: '5 Jimbo Way'
+ city:
+ description: 'The company city'
+ type: string
+ example: Sydney
+ state:
+ description: 'The company state'
+ type: string
+ example: Florisa
+ postal_code:
+ description: 'The company zip/postal code'
+ type: string
+ example: '90210'
+ phone:
+ description: 'The company phone'
+ type: string
+ example: 555-213-3948
+ email:
+ description: 'The company email'
+ type: string
+ example: joe@acme.co
+ country_id:
+ description: 'The country ID'
+ type: string
+ example: '1'
+ vat_number:
+ description: 'The company VAT/TAX ID number'
+ type: string
+ example: '32 120 377 720'
+ page_size:
+ description: 'The default page size'
+ type: string
+ example: A4
+ font_size:
+ description: 'The font size'
+ type: number
+ example: '9'
+ primary_font:
+ description: 'The primary font'
+ type: string
+ example: roboto
+ secondary_font:
+ description: 'The secondary font'
+ type: string
+ example: roboto
+ hide_paid_to_date:
+ description: 'Flags whether to hide the paid to date field'
+ type: boolean
+ example: false
+ embed_documents:
+ description: 'Toggled whether to embed documents in the PDF'
+ type: boolean
+ example: false
+ all_pages_header:
+ description: 'The header for the PDF'
+ type: boolean
+ example: false
+ all_pages_footer:
+ description: 'The footer for the PDF'
+ type: boolean
+ example: false
+ document_email_attachment:
+ description: 'Toggles whether to attach documents in the email'
+ type: boolean
+ example: false
+ enable_client_portal_password:
+ description: 'Toggles password protection of the client portal'
+ type: boolean
+ example: false
+ enable_email_markup:
+ description: 'Toggles the use of markdown in emails'
+ type: boolean
+ example: false
+ enable_client_portal_dashboard:
+ description: 'Toggles whether the client dashboard is shown in the client portal'
+ type: boolean
+ example: false
+ enable_client_portal:
+ description: 'Toggles whether the entire client portal is displayed to the client, or only the context'
+ type: boolean
+ example: false
+ email_template_statement:
+ description: 'The body of the email for statements'
+ type: string
+ example: 'template matter'
+ email_subject_statement:
+ description: 'The subject of the email for statements'
+ type: string
+ example: 'subject matter'
+ signature_on_pdf:
+ description: 'Toggles whether the signature (if available) is displayed on the PDF'
+ type: boolean
+ example: false
+ quote_footer:
+ description: 'The default quote footer'
+ type: string
+ example: 'the quote footer'
+ email_subject_custom1:
+ description: 'Custom reminder template subject'
+ type: string
+ example: 'Custom Subject 1'
+ email_subject_custom2:
+ description: 'Custom reminder template subject'
+ type: string
+ example: 'Custom Subject 2'
+ email_subject_custom3:
+ description: 'Custom reminder template subject'
+ type: string
+ example: 'Custom Subject 3'
+ email_template_custom1:
+ description: 'Custom reminder template body'
+ type: string
+ example: ''
+ email_template_custom2:
+ description: 'Custom reminder template body'
+ type: string
+ example: ''
+ email_template_custom3:
+ description: 'Custom reminder template body'
+ type: string
+ example: ''
+ enable_reminder1:
+ description: 'Toggles whether this reminder is enabled'
+ type: boolean
+ example: false
+ enable_reminder2:
+ description: 'Toggles whether this reminder is enabled'
+ type: boolean
+ example: false
+ enable_reminder3:
+ description: 'Toggles whether this reminder is enabled'
+ type: boolean
+ example: false
+ num_days_reminder1:
+ description: 'The Reminder interval'
+ type: number
+ example: '9'
+ num_days_reminder2:
+ description: 'The Reminder interval'
+ type: number
+ example: '9'
+ num_days_reminder3:
+ description: 'The Reminder interval'
+ type: number
+ example: '9'
+ schedule_reminder1:
+ description: '(enum: after_invoice_date, before_due_date, after_due_date)'
+ type: string
+ example: after_invoice_date
+ schedule_reminder2:
+ description: '(enum: after_invoice_date, before_due_date, after_due_date)'
+ type: string
+ example: after_invoice_date
+ schedule_reminder3:
+ description: '(enum: after_invoice_date, before_due_date, after_due_date)'
+ type: string
+ example: after_invoice_date
+ late_fee_amount1:
+ description: 'The late fee amount for reminder 1'
+ type: number
+ example: 10
+ late_fee_amount2:
+ description: 'The late fee amount for reminder 2'
+ type: number
+ example: 20
+ late_fee_amount3:
+ description: 'The late fee amount for reminder 2'
+ type: number
+ example: 100
+ endless_reminder_frequency_id:
+ description: 'The frequency id of the endless reminder'
+ type: string
+ example: '1'
+ client_online_payment_notification:
+ description: 'Determines if a client should receive the notification for a online payment'
+ type: boolean
+ example: false
+ client_manual_payment_notification:
+ description: 'Determines if a client should receive the notification for a manually entered payment'
+ type: boolean
+ example: false
+ enable_e_invoice:
+ description: 'Determines if e-invoicing is enabled'
+ type: boolean
+ example: false
+ default_expense_payment_type_id:
+ description: 'The default payment type for expenses'
+ type: string
+ example: '0'
+ e_invoice_type:
+ description: 'The e-invoice type'
+ type: string
+ example: 'EN16931'
+ mailgun_endpoint:
+ description: 'The mailgun endpoint - used to determine whether US or EU endpoints are used'
+ type: string
+ example: 'api.mailgun.net or api.eu.mailgun.net'
+ client_initiated_payments:
+ description: 'Determines if clients can initiate payments directly from the client portal'
+ type: boolean
+ example: false
+ client_initiated_payments_minimum:
+ description: 'The minimum amount a client can pay'
+ type: number
+ example: 10
+ sync_invoice_quote_columns:
+ description: 'Determines if invoice and quote columns are synced for the PDF rendering, or if they use their own columns'
+ type: boolean
+ example: false
+ show_task_item_description:
+ description: 'Determines if the task item description is shown on the invoice'
+ type: boolean
+ example: false
+ allow_billable_task_items:
+ description: 'Determines if task items can be marked as billable'
+ type: boolean
+ example: false
+ accept_client_input_quote_approval:
+ description: 'Determines if clients can approve quotes and also pass through a PO Number reference'
+ type: boolean
+ example: false
+ custom_sending_email:
+ description: 'When using Mailgun or Postmark, the FROM email address can be customized using this setting.'
+ type: string
+ example: 'bob@gmail.com'
+ show_paid_stamp:
+ description: 'Determines if the PAID stamp is shown on the invoice'
+ type: boolean
+ example: false
+ show_shipping_address:
+ description: 'Determines if the shipping address is shown on the invoice'
+ type: boolean
+ example: false
+ company_logo_size:
+ description: 'The size of the company logo on the PDF - percentage value between 0 and 100'
+ type: number
+ example: 100
+ show_email_footer:
+ description: 'Determines if the email footer is shown on emails'
+ type: boolean
+ example: false
+ email_alignment:
+ description: 'The alignment of the email body text, options include left / center / right'
+ type: string
+ example: 'left'
+ auto_bill_standard_invoices:
+ description: 'Determines if standard invoices are automatically billed when they are created or due'
+ type: boolean
+ example: false
+ postmark_secret:
+ description: 'The Postmark secret API key'
+ type: string
+ example: '123456'
+ mailgun_secret:
+ description: 'The Mailgun secret API key'
+ type: string
+ example: '123456'
+ mailgun_domain:
+ description: 'The Mailgun domain'
+ type: string
+ example: 'sandbox123456.mailgun.org'
+ send_email_on_mark_paid:
+ description: 'Determines if an email is sent when an invoice is marked as paid'
+ type: boolean
+ example: false
+ vendor_portal_enable_uploads:
+ description: 'Determines if vendors can upload files to the portal'
+ type: boolean
+ example: false
+ besr_id:
+ description: 'The BESR ID'
+ type: string
+ example: '123456'
+ qr_iban:
+ description: 'The IBAN for the QR code'
+ type: string
+ example: 'CH123456'
+ email_subject_purchase_order:
+ description: 'The email subject for purchase orders'
+ type: string
+ example: 'Purchase Order'
+ email_template_purchase_order:
+ description: 'The email template for purchase orders'
+ type: string
+ example: 'Please see attached your purchase order.'
+ require_purchase_order_signature:
+ description: 'Determines if a signature is required on purchase orders'
+ type: boolean
+ example: false
+ purchase_order_public_notes:
+ description: 'The public notes for purchase orders'
+ type: string
+ example: 'Please see attached your purchase order.'
+ purchase_order_terms:
+ description: 'The terms for purchase orders'
+ type: string
+ example: 'Please see attached your purchase order.'
+ purchase_order_footer:
+ description: 'The footer for purchase orders'
+ type: string
+ example: 'Please see attached your purchase order.'
+ purchase_order_design_id:
+ description: 'The design id for purchase orders'
+ type: string
+ example: 'hd677df'
+ purchase_order_number_pattern:
+ description: 'The pattern for purchase order numbers'
+ type: string
+ example: 'PO-000000'
+ purchase_order_number_counter:
+ description: 'The counter for purchase order numbers'
+ type: number
+ example: 1
+ page_numbering_alignment:
+ description: 'The alignment for page numbering: options include left / center / right'
+ type: string
+ example: 'left'
+ page_numbering:
+ description: 'Determines if page numbering is enabled on Document PDFs'
+ type: boolean
+ example: false
+ auto_archive_invoice_cancelled:
+ description: 'Determines if invoices are automatically archived when they are cancelled'
+ type: boolean
+ example: false
+ email_from_name:
+ description: 'The FROM name for emails when using Custom emailers'
+ type: string
+ example: 'Bob Smith'
+ show_all_tasks_client_portal:
+ description: 'Determines if all tasks are shown on the client portal'
+ type: boolean
+ example: false
+ entity_send_time:
+ description: 'The time that emails are sent. The time is localized to the clients locale, integer values from 1 - 24'
+ type: integer
+ example: 9
+ shared_invoice_credit_counter:
+ description: 'Determines if the invoice and credit counter are shared'
+ type: boolean
+ example: false
+ reply_to_name:
+ description: 'The reply to name for emails'
+ type: string
+ example: 'Bob Smith'
+ hide_empty_columns_on_pdf:
+ description: 'Determines if empty columns are hidden on PDFs'
+ type: boolean
+ example: false
+ enable_reminder_endless:
+ description: 'Determines if endless reminders are enabled'
+ type: boolean
+ example: false
+ use_credits_payment:
+ description: 'Determines if credits can be used as a payment method'
+ type: boolean
+ example: false
+ recurring_invoice_number_pattern:
+ description: 'The pattern for recurring invoice numbers'
+ type: string
+ example: 'R-000000'
+ recurring_invoice_number_counter:
+ description: 'The counter for recurring invoice numbers'
+ type: number
+ example: 1
+ client_portal_under_payment_minimum:
+ description: 'The minimum payment payment'
+ type: number
+ example: 10
+ auto_bill_date:
+ description: 'Determines when the invoices are auto billed, options are on_send_date (when the invoice is sent) or on_due_date (when the invoice is due))'
+ type: string
+ example: 'on_send_date'
+ primary_color:
+ description: 'The primary color for the client portal / document highlights'
+ type: string
+ example: '#ffffff'
+ secondary_color:
+ description: 'The secondary color for the client portal / document highlights'
+ type: string
+ example: '#ffffff'
+ client_portal_allow_under_payment:
+ description: 'Determines if clients can pay invoices under the invoice amount due'
+ type: boolean
+ example: false
+ client_portal_allow_over_payment:
+ description: 'Determines if clients can pay invoices over the invoice amount'
+ type: boolean
+ example: false
+ auto_bill:
+ description: 'Determines how autobilling is applied for recurring invoices. off (no auto billed), always (always auto bill), optin (The user must opt in to auto billing), optout (The user must opt out of auto billing'
+ type: string
+ example: 'off'
+ client_portal_terms:
+ description: 'The terms which are displayed on the client portal'
+ type: string
+ example: 'Please see attached your invoice.'
+ client_portal_privacy_policy:
+ description: 'The privacy policy which is displayed on the client portal'
+ type: string
+ example: 'These are the terms of use for using the client portal.'
+ client_can_register:
+ description: 'Determines if clients can register on the client portal'
+ type: boolean
+ example: false
+ portal_design_id:
+ description: 'The design id for the client portal'
+ type: string
+ example: 'hd677df'
+ late_fee_endless_percent:
+ description: 'The late fee percentage for endless late fees'
+ type: number
+ example: 10
+ late_fee_endless_amount:
+ description: 'The late fee amount for endless late fees'
+ type: number
+ example: 10
+ auto_email_invoice:
+ description: 'Determines if invoices are automatically emailed when they are created'
+ type: boolean
+ example: false
+ email_signature:
+ description: 'The email signature for emails'
+ type: string
+ example: 'Bob Smith'
+ type: object
+ RecurringExpense:
+ properties:
+ id:
+ description: 'The hashed id of the recurring expense'
+ type: string
+ example: Opnel5aKBz
+ user_id:
+ description: 'The hashed id of the user who created the recurring expense'
+ type: string
+ example: Opnel5aKBz
+ assigned_user_id:
+ description: 'The hashed id of the user assigned to this recurring expense'
+ type: string
+ example: Opnel5aKBz
+ client_id:
+ description: 'The hashed id of the client'
+ type: string
+ example: Opnel5aKBz
+ invoice_id:
+ description: 'The hashed id of the invoice'
+ type: string
+ example: Opnel5aKBz
+ bank_id:
+ description: 'The id of the bank associated with this recurring expense'
+ type: string
+ example: '22'
+ invoice_currency_id:
+ description: 'The currency id of the invoice associated with this recurring expense'
+ type: string
+ example: '1'
+ expense_currency_id:
+ description: 'The currency id of the expense associated with this recurring expense'
+ type: string
+ example: '1'
+ invoice_category_id:
+ description: 'The category id of the invoice'
+ type: string
+ example: '1'
+ payment_type_id:
+ description: 'The payment type id'
+ type: string
+ example: '1'
+ private_notes:
+ description: 'The recurring expense private notes'
+ type: string
+ example: 'Private and confidential'
+ public_notes:
+ description: 'The recurring expense public notes'
+ type: string
+ example: 'This is the best client in the world'
+ transaction_reference:
+ description: 'The recurring expense transaction reference'
+ type: string
+ example: EXP-1223-2333
+ transcation_id:
+ description: 'The transaction id of the recurring expense'
+ type: string
+ example: '1233312312'
+ custom_value1:
+ description: 'Custom value field'
+ type: string
+ example: $1000
+ custom_value2:
+ description: 'Custom value field'
+ type: string
+ example: '2022-10-10'
+ custom_value3:
+ description: 'Custom value field'
+ type: string
+ example: 'short text'
+ custom_value4:
+ description: 'Custom value field'
+ type: string
+ example: 'very long text'
+ tax_name1:
+ description: 'The tax name'
+ type: string
+ example: GST
+ tax_name2:
+ description: 'The tax name'
+ type: string
+ example: VAT
+ tax_rate1:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_rate2:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ tax_name3:
+ description: 'The tax name'
+ type: string
+ example: ''
+ tax_rate3:
+ description: 'The tax rate'
+ type: number
+ format: float
+ example: '10.00'
+ amount:
+ description: 'The total amount of the recurring expense'
+ type: number
+ format: float
+ example: '10.00'
+ frequency_id:
+ description: 'The frequency this recurring expense fires'
+ type: number
+ format: int
+ example: '1'
+ remaining_cycles:
+ description: 'The number of remaining cycles for this recurring expense'
+ type: number
+ format: int
+ example: '1'
+ foreign_amount:
+ description: 'The foreign currency amount of the recurring expense'
+ type: number
+ format: float
+ example: '10.00'
+ exchange_rate:
+ description: 'The exchange rate for the expernse'
+ type: number
+ format: float
+ example: '0.80'
+ date:
+ description: 'The date of the expense'
+ type: string
+ example: ''
+ payment_date:
+ description: 'The date the expense was paid'
+ type: string
+ example: ''
+ should_be_invoiced:
+ description: 'Boolean flag determining if the expense should be invoiced'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Boolean flag determining if the recurring expense is deleted'
+ type: boolean
+ example: true
+ last_sent_date:
+ description: 'The Date it was sent last'
+ type: string
+ format: date
+ example: '1994-07-30'
+ next_send_date:
+ description: 'The next send date'
+ type: string
+ format: date
+ example: '1994-07-30'
+ invoice_documents:
+ description: 'Boolean flag determining if the documents associated with this expense should be passed onto the invoice if it is converted to an invoice'
+ type: boolean
+ example: true
+ updated_at:
+ description: Timestamp
type: number
format: integer
example: '1434342123'
- readOnly: true
archived_at:
- description: 'Timestamp'
+ description: Timestamp
type: number
format: integer
example: '1434342123'
- readOnly: true
- email_error:
- description: 'The email error'
+ type: object
+ Activity:
+ properties:
+ id:
+ description: 'The id field of the activity'
type: string
- example: 'The email error'
- readOnly: true
- email_status:
- description: 'The email status'
+ example: Opnel5aKBz
+ activity_type_id:
+ description: 'The activity type id'
type: string
- readOnly: true
-
+ example: Opnel5aKBz
+ client_id:
+ description: 'The client hashed id'
+ type: string
+ example: Opnel5aKBz
+ company_id:
+ description: 'The company hashed id'
+ type: string
+ example: Opnel5aKBz
+ user_id:
+ description: 'The user hashed id'
+ type: string
+ example: Opnel5aKBz
+ invoice_id:
+ description: 'The invoice hashed id'
+ type: string
+ example: Opnel5aKBz
+ payment_id:
+ description: 'The payment hashed id'
+ type: string
+ example: Opnel5aKBz
+ credit_id:
+ description: 'The credit hashed id'
+ type: string
+ example: Opnel5aKBz
+ updated_at:
+ description: 'Unixtimestamp the last time the record was updated'
+ type: integer
+ example: '343421434'
+ expense_id:
+ description: 'The expense hashed id'
+ type: string
+ example: Opnel5aKBz
+ is_system:
+ description: 'Defines is the activity was performed by the system'
+ type: boolean
+ example: true
+ contact_id:
+ description: 'The contact hashed id'
+ type: string
+ example: Opnel5aKBz
+ task_id:
+ description: 'The task hashed id'
+ type: string
+ example: Opnel5aKBz
+ notes:
+ description: 'Activity Notes'
+ type: string
+ example: Opnel5aKBz
+ token_id:
+ description: 'The hashed ID of the token who performed the action'
+ type: string
+ example: Opnel5aKBz
+ ip:
+ description: 'The IP Address of the user who performed the action'
+ type: string
+ example: 192.168.1.252
+ user:
+ $ref: '#/components/schemas/User'
+ client:
+ $ref: '#/components/schemas/Client'
+ contact:
+ $ref: '#/components/schemas/ClientContact'
+ recurring_invoice:
+ $ref: '#/components/schemas/RecurringInvoice'
+ invoice:
+ $ref: '#/components/schemas/Invoice'
+ credit:
+ $ref: '#/components/schemas/Credit'
+ quote:
+ $ref: '#/components/schemas/Quote'
+ payment:
+ $ref: '#/components/schemas/Payment'
+ expense:
+ $ref: '#/components/schemas/Expense'
+ task:
+ $ref: '#/components/schemas/Task'
+ purchase_order:
+ $ref: '#/components/schemas/PurchaseOrder'
+ vendor:
+ $ref: '#/components/schemas/Vendor'
+ vendor_contact:
+ $ref: '#/components/schemas/VendorContact'
+ type: object
+ Expense:
+ properties:
+ id:
+ description: 'The expense hashed id'
+ type: string
+ example: 'Opnel5aKBz'
+ user_id:
+ description: 'The user hashed id'
+ type: string
+ example: 'Opnel5aKBz'
+ assigned_user_id:
+ description: 'The assigned user hashed id'
+ type: string
+ example: 'Opnel5aKBz'
+ project_id:
+ description: 'The associated project_id'
+ type: string
+ example: 'Opnel5aKBz'
+ client_id:
+ description: 'The client hashed id'
+ type: string
+ example: 'Opnel5aKBz'
+ invoice_id:
+ description: 'The related invoice hashed id'
+ type: string
+ example: 'Opnel5aKBz'
+ bank_id:
+ description: 'The bank id related to this expense'
+ type: string
+ example: ''
+ invoice_currency_id:
+ description: 'The currency id of the related invoice'
+ type: string
+ example: '1'
+ currency_id:
+ description: 'The currency id of the expense'
+ type: string
+ example: '2'
+ invoice_category_id:
+ description: 'The invoice category id'
+ type: string
+ example: 'Opnel5aKBz'
+ payment_type_id:
+ description: 'The payment type id'
+ type: string
+ example: ''
+ recurring_expense_id:
+ description: 'The related recurring expense this expense was created from'
+ type: string
+ example: 'Opnel5aKBz'
+ private_notes:
+ description: 'The private notes of the expense'
+ type: string
+ example: ''
+ public_notes:
+ description: 'The public notes of the expense'
+ type: string
+ example: ''
+ transaction_reference:
+ description: 'The transaction references of the expense'
+ type: string
+ example: ''
+ transcation_id:
+ description: 'The transaction id of the expense'
+ type: string
+ example: ''
+ custom_value1:
+ description: 'A custom value'
+ type: string
+ example: ''
+ custom_value2:
+ description: 'A custom value'
+ type: string
+ example: ''
+ custom_value3:
+ description: 'A custom value'
+ type: string
+ example: ''
+ custom_value4:
+ description: 'A custom value'
+ type: string
+ example: ''
+ tax_amount:
+ description: 'The tax amount'
+ type: number
+ example: 10.00
+ tax_name1:
+ description: 'Tax Name 1'
+ type: string
+ example: 'GST'
+ tax_name2:
+ description: 'Tax Name 2'
+ type: string
+ example: 'VAT'
+ tax_name3:
+ description: 'Tax Name 3'
+ type: string
+ example: 'IVA'
+ tax_rate1:
+ description: 'Tax rate 1'
+ type: number
+ format: float
+ example: '10.00'
+ tax_rate2:
+ description: 'Tax rate 2'
+ type: number
+ format: float
+ example: '10.00'
+ tax_rate3:
+ description: 'Tax rate 3'
+ type: number
+ format: float
+ example: '10.00'
+ amount:
+ description: 'The total expense amont'
+ type: number
+ format: float
+ example: '10.00'
+ foreign_amount:
+ description: 'The total foreign amount of the expense'
+ type: number
+ format: float
+ example: '10.00'
+ exchange_rate:
+ description: 'The exchange rate at the time of the expense'
+ type: number
+ format: float
+ example: '0.80'
+ date:
+ description: 'The expense date format Y-m-d'
+ type: string
+ example: '2022-12-01'
+ payment_date:
+ description: 'The date of payment for the expense, format Y-m-d'
+ type: string
+ example: '2022-12-01'
+ should_be_invoiced:
+ description: 'Flag whether the expense should be invoiced'
+ type: boolean
+ example: true
+ is_deleted:
+ description: 'Boolean determining whether the expense has been deleted'
+ type: boolean
+ example: true
+ invoice_documents:
+ description: 'Passing the expense documents over to the invoice'
+ type: boolean
+ example: true
+ updated_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ archived_at:
+ description: Timestamp
+ type: number
+ format: integer
+ example: '1434342123'
+ type: object
+ Error:
+ properties:
+ message:
+ description: 'Something terrible went wrong'
+ type: string
+ example: 'Unexpected error'
+ code:
+ description: 'The HTTP error code, ie 5xx 4xx'
+ type: integer
+ example: '500'
+ type: object
InvoiceInvitation:
properties:
id:
@@ -21432,47 +21207,376 @@ components:
type: string
readOnly: true
- Design:
+
+ ProductBulkAction:
+ required:
+ - action
+ - ids
+ properties:
+ action:
+ type: string
+ example: archive
+ description: 'The action to perform ie. archive / restore / delete / set_tax_id'
+ ids:
+ type: array
+ items:
+ format: string
+ type: string
+ example: 2J234DFA,D2J234DFA,D2J234DFA
+ description: string array of client hashed ids
+ tax_id:
+ type: string
+ example: '1'
+ description: |
+ The tax rate id to set on the list of products
+
+ The following constants are available (default = '1')
+
+ ```
+ PRODUCT_TYPE_PHYSICAL = '1'
+ PRODUCT_TYPE_SERVICE = '2'
+ PRODUCT_TYPE_DIGITAL = '3'
+ PRODUCT_TYPE_SHIPPING = '4'
+ PRODUCT_TYPE_EXEMPT = '5'
+ PRODUCT_TYPE_REDUCED_TAX = '6'
+ PRODUCT_TYPE_OVERRIDE_TAX = '7'
+ PRODUCT_TYPE_ZERO_RATED = '8'
+ PRODUCT_TYPE_REVERSE_TAX = '9'
+ ```
+ type: object
+ User:
properties:
id:
- description: 'The design hashed id'
+ description: 'The hashed id of the user'
type: string
- example: AS3df3A
- name:
- description: 'The design name'
+ example: Opnel5aKBz
+ readOnly: true
+ first_name:
+ description: 'The first name of the user'
type: string
- example: Beauty
- design:
- description: 'The design HTML'
+ example: Brad
+ last_name:
+ description: 'The last name of the user'
type: string
- example: ''
- is_custom:
- description: 'Flag to determine if the design is a custom user design'
+ example: Pitt
+ email:
+ description: 'The users email address'
+ type: string
+ example: brad@pitt.com
+ phone:
+ description: 'The users phone number'
+ type: string
+ example: 555-1233-23232
+ signature:
+ description: 'The users sign off signature'
+ type: string
+ example: 'Have a nice day!'
+ avatar:
+ description: 'The users avatar'
+ type: string
+ example: 'https://url.to.your/avatar.png'
+ accepted_terms_version:
+ description: 'The version of the invoice ninja terms that has been accepted by the user'
+ type: string
+ example: 1.0.1
+ readOnly: true
+ oauth_user_id:
+ description: 'The provider id of the oauth entity'
+ type: string
+ example: jkhasdf789as6f675sdf768sdfs
+ readOnly: true
+ oauth_provider_id:
+ description: 'The oauth entity id'
+ type: string
+ example: google
+ readOnly: true
+ language_id:
+ description: 'The language id of the user'
+ type: string
+ example: 1
+ verified_phone_number:
+ description: 'Boolean flag if the user has their phone verified. Required to settings up 2FA'
type: boolean
example: true
- is_active:
- description: 'Flag to determine if the design is available for use'
+ readOnly: true
+ sms_verification_code:
+ description: 'The sms verification code for the user. Required to settings up 2FA'
+ type: string
+ example: '123456'
+ readOnly: true
+ oauth_user_token_expiry:
+ description: 'The expiry date of the oauth token'
+ type: string
+ example: '2022-10-10'
+ readOnly: true
+ has_password:
+ description: 'Boolean flag determining if the user has a password'
+ type: boolean
+ example: true
+ readOnly: true
+ last_confirmed_email_address:
+ description: 'The last confirmed email address of the user'
+ type: string
+ example: 'bob@gmail.com'
+ readOnly: true
+ custom_value1:
+ description: 'A custom value'
+ type: string
+ example: 'Custom value 1'
+ custom_value2:
+ description: 'A custom value'
+ type: string
+ example: '$1000'
+ custom_value3:
+ description: 'A custom value'
+ type: string
+ example: 'Custom value 3'
+ custom_value4:
+ description: 'A custom value'
+ type: string
+ example: 'Custom value 4'
+ is_deleted:
+ description: 'Boolean flag determining if the user has been deleted'
+ type: boolean
+ example: true
+ readOnly: true
+ google_2fa_secret:
+ description: 'The google 2fa secret for the user'
+ type: string
+ example: '123456'
+ readOnly: true
+ company_user:
+ $ref: '#/components/schemas/CompanyUser'
+ type: object
+ Account:
+ properties:
+ id:
+ description: 'The account hashed id'
+ type: string
+ example: AS3df3A
+ account_sms_verified:
+ description: 'Boolean flag if the account has been verified by sms'
+ type: string
+ example: true
+ type: object
+ Credit:
+ properties:
+ id:
+ description: "The unique hashed ID of the credit"
+ type: string
+ example: Opnel5aKBz
+ user_id:
+ description: "The unique hashed ID of the user associated with the credit"
+ type: string
+ example: 1a2b3c4d5e
+ assigned_user_id:
+ description: "The unique hashed ID of the assigned user responsible for the credit"
+ type: string
+ example: 6f7g8h9i0j
+ client_id:
+ description: "The unique hashed ID of the client associated with the credit"
+ type: string
+ example: p1q2r3s4t5
+ status_id:
+ description: "The ID representing the current status of the credit"
+ type: string
+ example: 3
+ invoice_id:
+ description: "The unique hashed ID of the linked invoice to which the credit is applied"
+ type: string
+ example: u1v2w3x4y5
+ number:
+ description: "The unique alphanumeric credit number per company"
+ type: string
+ example: QUOTE_101
+ po_number:
+ description: "The purchase order number referred to by the credit"
+ type: string
+ example: PO_12345
+ terms:
+ description: "The terms associated with the credit"
+ type: string
+ example: "Net 30"
+ public_notes:
+ description: "Public notes for the credit"
+ type: string
+ example: "Thank you for your business."
+ private_notes:
+ description: "Private notes for internal use, not visible to the client"
+ type: string
+ example: "Client is requesting a discount."
+ footer:
+ description: "The footer text for the credit"
+ type: string
+ example: "Footer text goes here."
+ custom_value1:
+ description: "Custom value 1 for additional credit information"
+ type: string
+ example: "Custom data 1"
+ custom_value2:
+ description: "Custom value 2 for additional credit information"
+ type: string
+ example: "Custom data 2"
+ custom_value3:
+ description: "Custom value 3 for additional credit information"
+ type: string
+ example: "Custom data 3"
+ custom_value4:
+ description: "Custom value 4 for additional credit information"
+ type: string
+ example: "Custom data 4"
+ tax_name1:
+ description: "The name of the first tax applied to the credit"
+ type: string
+ example: "VAT"
+ tax_name2:
+ description: "The name of the second tax applied to the credit"
+ type: string
+ example: "GST"
+ tax_rate1:
+ description: "The rate of the first tax applied to the credit"
+ type: number
+ format: float
+ example: 10.00
+ tax_rate2:
+ description: "The rate of the second tax applied to the credit"
+ type: number
+ format: float
+ example: 5.00
+ tax_name3:
+ description: "The name of the third tax applied to the credit"
+ type: string
+ example: "PST"
+ tax_rate3:
+ description: "The rate of the third tax applied to the credit"
+ type: number
+ format: float
+ example: 8.00
+ total_taxes:
+ description: "The total amount of taxes for the credit"
+ type: number
+ format: float
+ example: 23.00
+ line_items:
+ type: array
+ description: 'An array of objects which define the line items of the credit'
+ items:
+ $ref: '#/components/schemas/InvoiceItem'
+ amount:
+ description: "The total amount of the credit"
+ type: number
+ format: float
+ example: 100.00
+ balance:
+ description: "The outstanding balance of the credit"
+ type: number
+ format: float
+ example: 50.00
+ paid_to_date:
+ description: "The total amount paid to date for the credit"
+ type: number
+ format: float
+ example: 50.00
+ discount:
+ description: "The discount applied to the credit"
+ type: number
+ format: float
+ example: 10.00
+ partial:
+ description: "The partial amount applied to the credit"
+ type: number
+ format: float
+ example: 20.00
+ is_amount_discount:
+ description: "Indicates whether the discount applied is a fixed amount or a percentage"
type: boolean
example: true
is_deleted:
- description: 'Flag to determine if the design is deleted'
+ description: "Indicates whether the credit has been deleted"
+ type: boolean
+ example: false
+ uses_inclusive_taxes:
+ description: "Indicates whether the tax rates applied to the credit are inclusive or exclusive"
type: boolean
example: true
- created_at:
- description: Timestamp
+ date:
+ description: "The date the credit was issued"
+ type: string
+ format: date
+ example: "1994-07-30"
+ last_sent_date:
+ description: "The date the credit was last sent out"
+ type: string
+ format: date
+ example: "1994-07-30"
+ next_send_date:
+ description: "The next scheduled date for sending a credit reminder"
+ type: string
+ format: date
+ example: "1994-07-30"
+ partial_due_date:
+ description: "The due date for the partial amount of the credit"
+ type: string
+ format: date
+ example: "1994-07-30"
+ due_date:
+ description: "The due date for the total amount of the credit"
+ type: string
+ format: date
+ example: "1994-07-30"
+ settings:
+ $ref: "#/components/schemas/CompanySettings"
+ last_viewed:
+ description: "The timestamp of the last time the credit was viewed"
type: number
format: integer
- example: '134341234234'
+ example: 1434342123
updated_at:
- description: Timestamp
+ description: "The timestamp of the last time the credit was updated"
type: number
format: integer
- example: '134341234234'
- deleted_at:
- description: Timestamp
+ example: 1434342123
+ archived_at:
+ description: "The timestamp of the last time the credit was archived"
type: number
format: integer
- example: '134341234234'
+ example: 1434342123
+ custom_surcharge1:
+ description: "First custom surcharge amount"
+ type: number
+ format: float
+ example: 10.00
+ custom_surcharge2:
+ description: 'Second Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge3:
+ description: 'Third Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge4:
+ description: 'Fourth Custom Surcharge'
+ type: number
+ format: float
+ example: '10.00'
+ custom_surcharge_tax1:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax2:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax3:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
+ custom_surcharge_tax4:
+ description: 'Toggles charging taxes on custom surcharge amounts'
+ type: boolean
+ example: true
type: object
tags:
- name: login
diff --git a/openapi/components/examples.yaml b/openapi/components/examples.yaml
index 23213ab4f502..c5459486e137 100644
--- a/openapi/components/examples.yaml
+++ b/openapi/components/examples.yaml
@@ -6,7 +6,6 @@
# id: Opnel5aKBz
# user_id: Ua6Rw4pVbS
# assigned_user_id: Ua6Rw4pVbS
- # company_id: Co7Vn3yLmW
# name: "Jim's Housekeeping"
# website: https://www.jims-housekeeping.com
# private_notes: Client prefers email communication over phone calls
diff --git a/openapi/components/schemas.yaml b/openapi/components/schemas.yaml
index f95b31df334f..3b524ba34535 100644
--- a/openapi/components/schemas.yaml
+++ b/openapi/components/schemas.yaml
@@ -45,10 +45,6 @@
description: 'The user hashed id'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
name:
description: 'The name of the group'
type: string
diff --git a/openapi/components/schemas/bank_integration.yaml b/openapi/components/schemas/bank_integration.yaml
index a868c67ed2ff..4b2ff0d8b700 100644
--- a/openapi/components/schemas/bank_integration.yaml
+++ b/openapi/components/schemas/bank_integration.yaml
@@ -4,10 +4,6 @@
description: 'The bank integration hashed id'
type: string
example: AS3df3A
- company_id:
- description: 'The company hashed id'
- type: string
- example: AS3df3A
user_id:
description: 'The user hashed id'
type: string
diff --git a/openapi/components/schemas/bank_transaction.yaml b/openapi/components/schemas/bank_transaction.yaml
index 940da2e3f8c4..083b987d48f2 100644
--- a/openapi/components/schemas/bank_transaction.yaml
+++ b/openapi/components/schemas/bank_transaction.yaml
@@ -4,10 +4,6 @@
description: 'The bank integration hashed id'
type: string
example: AS3df3A
- company_id:
- description: 'The company hashed id'
- type: string
- example: AS3df3A
user_id:
description: 'The user hashed id'
type: string
diff --git a/openapi/components/schemas/bank_transaction_rule.yaml b/openapi/components/schemas/bank_transaction_rule.yaml
index 07c22d3d157c..fc05f2534bec 100644
--- a/openapi/components/schemas/bank_transaction_rule.yaml
+++ b/openapi/components/schemas/bank_transaction_rule.yaml
@@ -4,10 +4,6 @@
description: 'The bank transaction rules hashed id'
type: string
example: AS3df3A
- company_id:
- description: 'The company hashed id'
- type: string
- example: AS3df3A
user_id:
description: 'The user hashed id'
type: string
diff --git a/openapi/components/schemas/client.yaml b/openapi/components/schemas/client.yaml
index d242122173b5..fb0949e16fe3 100644
--- a/openapi/components/schemas/client.yaml
+++ b/openapi/components/schemas/client.yaml
@@ -18,11 +18,6 @@
description: 'The unique identifier of the user who has been assigned the client'
type: string
example: Ua6Rw4pVbS
- company_id:
- description: 'The unique identifier of the company the client belongs to'
- type: string
- example: Co7Vn3yLmW
- readOnly: true
name:
description: 'The name of the client company or organization'
type: string
diff --git a/openapi/components/schemas/client_contact.yaml b/openapi/components/schemas/client_contact.yaml
index 4127b3448d7a..b248811c6adb 100644
--- a/openapi/components/schemas/client_contact.yaml
+++ b/openapi/components/schemas/client_contact.yaml
@@ -10,11 +10,6 @@
type: string
example: Opnel5aKBz
readOnly: true
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
- readOnly: true
client_id:
description: 'The hashed id of the client'
type: string
diff --git a/openapi/components/schemas/client_gateway_token.yaml b/openapi/components/schemas/client_gateway_token.yaml
index b10587611278..408161453d42 100644
--- a/openapi/components/schemas/client_gateway_token.yaml
+++ b/openapi/components/schemas/client_gateway_token.yaml
@@ -4,10 +4,6 @@
description: 'The hashed id of the client gateway token'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: '2'
client_id:
description: 'The hashed_id of the client'
type: string
diff --git a/openapi/components/schemas/company_gateway.yaml b/openapi/components/schemas/company_gateway.yaml
index 35196f5f1d25..1e90da31c70f 100644
--- a/openapi/components/schemas/company_gateway.yaml
+++ b/openapi/components/schemas/company_gateway.yaml
@@ -4,10 +4,6 @@
description: 'The hashed id of the company gateway'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: '2'
gateway_key:
description: 'The gateway key (hash)'
type: string
diff --git a/openapi/components/schemas/company_user.yaml b/openapi/components/schemas/company_user.yaml
index b48d5e9c1635..1ed7c821e712 100644
--- a/openapi/components/schemas/company_user.yaml
+++ b/openapi/components/schemas/company_user.yaml
@@ -1,27 +1,32 @@
CompanyUser:
properties:
permissions:
- description: 'The company user permissions'
+ description: 'The user permissionsfor this company in a comma separated list'
type: string
- example: '[create_invoice]'
+ example: 'create_invoice,create_client,view_client'
settings:
- description: 'Settings that are used for the frontend applications to store user preferences / metadata'
+ description: 'Settings that are used for the flutter applications to store user preferences / metadata'
type: object
+ readOnly: true
react_settings:
description: 'Dedicated settings object for the react web application'
type: object
+ readOnly: true
is_owner:
description: 'Determines whether the user owns this company'
type: boolean
example: true
+ readOnly: true
is_admin:
description: 'Determines whether the user is the admin of this company'
type: boolean
example: true
+ readOnly: true
is_locked:
description: 'Determines whether the users access to this company has been locked'
type: boolean
example: true
+ readOnly: true
updated_at:
description: 'The last time the record was modified, format Unix Timestamp'
type: integer
diff --git a/openapi/components/schemas/credit.yaml b/openapi/components/schemas/credit.yaml
index bc06f457ea1d..7e88c70b0931 100644
--- a/openapi/components/schemas/credit.yaml
+++ b/openapi/components/schemas/credit.yaml
@@ -12,10 +12,6 @@
description: "The unique hashed ID of the assigned user responsible for the credit"
type: string
example: 6f7g8h9i0j
- company_id:
- description: "The unique hashed ID of the company associated with the credit"
- type: string
- example: k1l2m3n4o5
client_id:
description: "The unique hashed ID of the client associated with the credit"
type: string
diff --git a/openapi/components/schemas/expense.yaml b/openapi/components/schemas/expense.yaml
index 72c690638fb1..9a9b6ec5116e 100644
--- a/openapi/components/schemas/expense.yaml
+++ b/openapi/components/schemas/expense.yaml
@@ -16,10 +16,6 @@
description: 'The associated project_id'
type: string
example: 'Opnel5aKBz'
- company_id:
- description: 'The company hashed id'
- type: string
- example: 'Opnel5aKBz'
client_id:
description: 'The client hashed id'
type: string
diff --git a/openapi/components/schemas/invoice.yaml b/openapi/components/schemas/invoice.yaml
index 6993aed7e6b4..da35f9da3b9a 100644
--- a/openapi/components/schemas/invoice.yaml
+++ b/openapi/components/schemas/invoice.yaml
@@ -14,11 +14,6 @@
description: 'The assigned user hashed id'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
- readOnly: true
client_id:
description: 'The client hashed id'
type: string
diff --git a/openapi/components/schemas/invoice_request.yaml b/openapi/components/schemas/invoice_request.yaml
index 3998dfac6498..463ed3ab0bb5 100644
--- a/openapi/components/schemas/invoice_request.yaml
+++ b/openapi/components/schemas/invoice_request.yaml
@@ -15,11 +15,6 @@
description: 'The assigned user hashed id'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
- readOnly: true
client_id:
description: 'The client hashed id'
type: string
diff --git a/openapi/components/schemas/product.yaml b/openapi/components/schemas/product.yaml
index 52480f71978b..ff986e527094 100644
--- a/openapi/components/schemas/product.yaml
+++ b/openapi/components/schemas/product.yaml
@@ -6,11 +6,6 @@
description: 'The hashed product ID.'
example: eP01N
readOnly: true
- company_id:
- type: string
- description: 'The hashed ID of the company that owns this product.'
- example: eP01N
- readOnly: true
user_id:
type: string
description: 'The hashed ID of the user that created this product.'
diff --git a/openapi/components/schemas/project.yaml b/openapi/components/schemas/project.yaml
index 3588dbb4610e..66f383399c91 100644
--- a/openapi/components/schemas/project.yaml
+++ b/openapi/components/schemas/project.yaml
@@ -80,7 +80,6 @@
required:
- id
- user_id
- - company_id
- name
- task_rate
- budgeted_hours
diff --git a/openapi/components/schemas/purchase_order.yaml b/openapi/components/schemas/purchase_order.yaml
index 3202309b4408..eb9516b30692 100644
--- a/openapi/components/schemas/purchase_order.yaml
+++ b/openapi/components/schemas/purchase_order.yaml
@@ -12,10 +12,6 @@
description: 'The unique hashed identifier for the user assigned to the purchase order'
type: string
example: ''
- company_id:
- description: 'The unique hashed identifier for the company associated with the purchase order'
- type: string
- example: ''
vendor_id:
description: 'The unique hashed identifier for the vendor associated with the purchase order'
type: string
diff --git a/openapi/components/schemas/quote.yaml b/openapi/components/schemas/quote.yaml
index 3b7b00a6fb57..6fd62bf89b61 100644
--- a/openapi/components/schemas/quote.yaml
+++ b/openapi/components/schemas/quote.yaml
@@ -12,10 +12,6 @@
description: 'The unique hashed identifier for the user assigned to the quote'
type: string
example: ''
- company_id:
- description: 'The unique hashed identifier for the company associated with the quote'
- type: string
- example: ''
client_id:
description: 'The unique hashed identifier for the client associated with the quote'
type: string
diff --git a/openapi/components/schemas/recurring_expense.yaml b/openapi/components/schemas/recurring_expense.yaml
index 747b89baeff7..497b2748cf14 100644
--- a/openapi/components/schemas/recurring_expense.yaml
+++ b/openapi/components/schemas/recurring_expense.yaml
@@ -12,10 +12,6 @@
description: 'The hashed id of the user assigned to this recurring expense'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
client_id:
description: 'The hashed id of the client'
type: string
diff --git a/openapi/components/schemas/recurring_invoice.yaml b/openapi/components/schemas/recurring_invoice.yaml
index 933592f5c04e..dd94a2df9e4a 100644
--- a/openapi/components/schemas/recurring_invoice.yaml
+++ b/openapi/components/schemas/recurring_invoice.yaml
@@ -12,10 +12,6 @@
description: 'The assigned user hashed id'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
client_id:
description: 'The client hashed id'
type: string
diff --git a/openapi/components/schemas/recurring_quote.yaml b/openapi/components/schemas/recurring_quote.yaml
index 98e67953cd73..81e7d286b615 100644
--- a/openapi/components/schemas/recurring_quote.yaml
+++ b/openapi/components/schemas/recurring_quote.yaml
@@ -12,10 +12,6 @@
description: 'The assigned user hashed id'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The company hashed id'
- type: string
- example: Opnel5aKBz
client_id:
description: 'The client hashed id'
type: string
diff --git a/openapi/components/schemas/subscription.yaml b/openapi/components/schemas/subscription.yaml
index da8346dcfbc5..f1e42435d12d 100644
--- a/openapi/components/schemas/subscription.yaml
+++ b/openapi/components/schemas/subscription.yaml
@@ -12,10 +12,6 @@
description: Unique identifier for the product associated with the subscription
type: string
example: Pr5Ft7yBmC
- company_id:
- description: Unique identifier for the company associated with the subscription
- type: string
- example: Co7Vn3yLmW
recurring_invoice_id:
description: Unique identifier for the recurring invoice associated with the subscription
type: string
diff --git a/openapi/components/schemas/system_log.yaml b/openapi/components/schemas/system_log.yaml
index cdce0ebd4b62..9947473f4c85 100644
--- a/openapi/components/schemas/system_log.yaml
+++ b/openapi/components/schemas/system_log.yaml
@@ -4,10 +4,6 @@
description: 'The account hashed id'
type: string
example: AS3df3A
- company_id:
- description: 'The company hashed id'
- type: string
- example: AS3df3A
user_id:
description: 'The user_id hashed id'
type: string
diff --git a/openapi/components/schemas/task.yaml b/openapi/components/schemas/task.yaml
index ec6089548bb1..3b235f48d5ba 100644
--- a/openapi/components/schemas/task.yaml
+++ b/openapi/components/schemas/task.yaml
@@ -12,10 +12,6 @@
description: 'The assigned user of the task'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
client_id:
description: 'The hashed if of the client'
type: string
diff --git a/openapi/components/schemas/vendor.yaml b/openapi/components/schemas/vendor.yaml
index 7af19f263ee5..d9d6437f45a3 100644
--- a/openapi/components/schemas/vendor.yaml
+++ b/openapi/components/schemas/vendor.yaml
@@ -13,10 +13,6 @@
description: 'The hashed id of the assigned user to this vendor. This is a unique identifier for the user.'
type: string
example: Opnel5aKBz
- company_id:
- description: 'The hashed id of the company. This is a unique identifier for the company.'
- type: string
- example: Opnel5aKBz
contacts:
type: array
items:
diff --git a/openapi/components/schemas/vendor_contact.yaml b/openapi/components/schemas/vendor_contact.yaml
index f2c57c53cf59..6800fed8e257 100644
--- a/openapi/components/schemas/vendor_contact.yaml
+++ b/openapi/components/schemas/vendor_contact.yaml
@@ -10,11 +10,6 @@
type: string
example: Opnel5aKBz
readOnly: true
- company_id:
- description: 'The hashed id of the company'
- type: string
- example: Opnel5aKBz
- readOnly: true
vendor_id:
description: 'The hashed id of the vendor'
type: string
diff --git a/openapi/info.yaml b/openapi/info.yaml
index 242d223732b9..151ecc26f4c4 100644
--- a/openapi/info.yaml
+++ b/openapi/info.yaml
@@ -1,6 +1,6 @@
openapi: 3.0.0
info:
- title: 'Invoice Ninja API Reference - Where self host invoicing lives.'
+ title: 'Invoice Ninja API Reference.'
description: |
---
@@ -15,7 +15,7 @@ info:
license:
name: 'Elastic License'
url: 'https://www.elastic.co/licensing/elastic-license'
- version: 5.5.70
+ version: 5.8.34
servers:
-
url: 'https://demo.invoiceninja.com'
diff --git a/openapi/paths.yaml b/openapi/paths.yaml
index 21154dc1e936..1b74e64a9ec4 100644
--- a/openapi/paths.yaml
+++ b/openapi/paths.yaml
@@ -89,7 +89,14 @@ paths:
tags:
- login
summary: "Attempts authentication"
- description: "Returns a CompanyUser object on success"
+ description: |
+ After authenticating with the API, the returned object is a CompanyUser object which is a bridge linking the user to the company.
+
+ The company user object itself contains the users permissions (admin/owner or fine grained permissions) You will most likely want to
+ also include in the response of this object both the company and the user object, this can be done by using the include parameter.
+
+ /api/v1/login?include=company,user
+
operationId: postLogin
parameters:
- $ref: "#/components/parameters/X-API-SECRET"
@@ -109,10 +116,19 @@ paths:
description: "The users email address."
type: string
example: "demo@invoiceninja.com"
+ required: true
password:
description: "The user password. Must meet minimum criteria ~ > 6 characters"
type: string
example: "Password0"
+ required: true
+ one_time_password:
+ description: "The one time password if 2FA is enabled"
+ type: string
+ example: "123456"
+ required:
+ - email
+ - password
type: object
responses:
200:
@@ -127,13 +143,15 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Client"
+ $ref: "#/components/schemas/CompanyUser"
401:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
5XX:
description: 'Server error'
default:
@@ -146,7 +164,8 @@ paths:
description: |
Refreshes the dataset.
- This endpoint can be used if you only need to access the most recent data from a certain point in time.
+ This endpoint can be used if you only need to access the most recent data from a certain point in time. For example, if you only want to retrieve The
+ most recent data from the last time you accessed the system, you would pass the query parameter ?updated_at=1676173763. (unix timestamp)
operationId: refresh
parameters:
- name: updated_at
@@ -182,6 +201,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/yodlee/refresh:
@@ -214,6 +237,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations:
@@ -264,6 +291,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -296,6 +327,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_integrations/{id}":
@@ -337,6 +372,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -377,6 +416,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -413,6 +456,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_integrations/{id}/edit":
@@ -454,6 +501,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/create:
@@ -487,6 +538,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/bulk:
@@ -527,6 +582,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/refresh_accounts:
@@ -560,6 +619,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/remove_account/account_id:
@@ -593,6 +656,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_integrations/get_transactions/account_id:
@@ -626,6 +693,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transactions:
@@ -676,6 +747,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -708,6 +783,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_transactions/{id}":
@@ -749,6 +828,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -789,6 +872,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -866,6 +953,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transactions/create:
@@ -899,6 +990,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transations/bulk:
@@ -939,6 +1034,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transations/match:
@@ -979,6 +1078,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transaction_rules:
@@ -1029,6 +1132,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -1061,6 +1168,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_transaction_rules/{id}":
@@ -1102,6 +1213,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -1142,6 +1257,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -1178,6 +1297,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/bank_transaction_rules/{id}/edit":
@@ -1219,6 +1342,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transaction_rules/create:
@@ -1252,6 +1379,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/bank_transation_rules/bulk:
@@ -1292,6 +1423,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/charts/totals:
@@ -1326,6 +1461,10 @@ paths:
$ref: "#/components/headers/X-RateLimit-Limit"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
@@ -1369,6 +1508,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -1401,6 +1544,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/client_gateway_tokens/{id}":
@@ -1442,6 +1589,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -1482,6 +1633,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -1518,6 +1673,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/client_gateway_tokens/{id}/edit":
@@ -1559,6 +1718,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/client_gateway_tokens/create:
@@ -1592,6 +1755,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
@@ -1634,6 +1801,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -1666,6 +1837,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/companies/create:
@@ -1699,6 +1874,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{id}":
@@ -1740,6 +1919,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
put:
@@ -1778,9 +1961,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
delete:
@@ -1815,9 +2001,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{id}/edit":
@@ -1857,9 +2046,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{id}/upload":
@@ -1916,9 +2108,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
"/api/v1/companies/{company}/default":
@@ -1958,9 +2153,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/company_gateways:
@@ -2000,9 +2198,12 @@ paths:
$ref: "#/components/responses/401"
403:
$ref: "#/components/responses/403"
-
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
post:
@@ -2035,6 +2236,10 @@ paths:
$ref: "#/components/responses/403"
422:
$ref: "#/components/responses/422"
+ 429:
+ $ref: "#/components/responses/429"
+ 5XX:
+ description: 'Server error'
default:
$ref: "#/components/responses/default"
/api/v1/company_gateways/create:
diff --git a/public/build/assets/app-01291e40.js b/public/build/assets/app-01291e40.js
deleted file mode 100644
index 9dc720821003..000000000000
--- a/public/build/assets/app-01291e40.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import{A as ll}from"./index-08e160a7.js";import{c as Ut,g as ul}from"./_commonjsHelpers-725317a4.js";var cl={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,504174],[504176,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,63737423,63743358,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}},fl=cl,Qn={},mn={};Object.defineProperty(mn,"__esModule",{value:!0});mn.clone=void 0;function dl(e){return e?JSON.parse(JSON.stringify(e)):null}mn.clone=dl;var Zn={};Object.defineProperty(Zn,"__esModule",{value:!0});Zn.matches=void 0;function pl(e,r,n){var a=String(r).length,s=e.substr(0,a),u=parseInt(s,10);return r=parseInt(String(r).substr(0,s.length),10),n=parseInt(String(n).substr(0,s.length),10),u>=r&&u<=n}function hl(e,r){return r=String(r),r.substring(0,e.length)===e.substring(0,r.length)}function gl(e,r){return Array.isArray(r)?pl(e,r[0],r[1]):hl(e,r)}Zn.matches=gl;Object.defineProperty(Qn,"__esModule",{value:!0});Qn.addMatchingCardsToResults=void 0;var ml=mn,vl=Zn;function yl(e,r,n){var a,s;for(a=0;a=s&&(b.matchStrength=s),n.push(b);break}}}Qn.addMatchingCardsToResults=yl;var ei={};Object.defineProperty(ei,"__esModule",{value:!0});ei.isValidInputType=void 0;function bl(e){return typeof e=="string"||e instanceof String}ei.isValidInputType=bl;var ti={};Object.defineProperty(ti,"__esModule",{value:!0});ti.findBestMatch=void 0;function _l(e){var r=e.filter(function(n){return n.matchStrength}).length;return r>0&&r===e.length}function wl(e){return _l(e)?e.reduce(function(r,n){return!r||Number(r.matchStrength)Al?fn(!1,!1):Cl.test(e)?fn(!1,!0):fn(!0,!0)}ri.cardholderName=Tl;var ni={};function Pl(e){for(var r=0,n=!1,a=e.length-1,s;a>=0;)s=parseInt(e.charAt(a),10),n&&(s*=2,s>9&&(s=s%10+1)),n=!n,r+=s,a--;return r%10===0}var Rl=Pl;Object.defineProperty(ni,"__esModule",{value:!0});ni.cardNumber=void 0;var Nl=Rl,qa=Oo;function hr(e,r,n){return{card:e,isPotentiallyValid:r,isValid:n}}function Ml(e,r){r===void 0&&(r={});var n,a,s;if(typeof e!="string"&&typeof e!="number")return hr(null,!1,!1);var u=String(e).replace(/-|\s/g,"");if(!/^\d*$/.test(u))return hr(null,!1,!1);var b=qa(u);if(b.length===0)return hr(null,!1,!1);if(b.length!==1)return hr(null,!0,!1);var m=b[0];if(r.maxLength&&u.length>r.maxLength)return hr(m,!1,!1);m.type===qa.types.UNIONPAY&&r.luhnValidateUnionPay!==!0?a=!0:a=Nl(u),s=Math.max.apply(null,m.lengths),r.maxLength&&(s=Math.min(r.maxLength,s));for(var I=0;I4)return er(!1,!1);var m=parseInt(e,10),I=Number(String(s).substr(2,2)),U=!1;if(a===2){if(String(s).substr(0,2)===e)return er(!1,!0);n=I===m,U=m>=I&&m<=I+r}else a===4&&(n=s===m,U=m>=s&&m<=s+r);return er(U,U,n)}Vr.expirationYear=Ll;var oi={};Object.defineProperty(oi,"__esModule",{value:!0});oi.isArray=void 0;oi.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"};Object.defineProperty(ai,"__esModule",{value:!0});ai.parseDate=void 0;var jl=Vr,Il=oi;function Dl(e){var r=Number(e[0]),n;return r===0?2:r>1||r===1&&Number(e[1])>2?1:r===1?(n=e.substr(1),jl.expirationYear(n).isPotentiallyValid?1:2):e.length===5?1:e.length>5?2:1}function $l(e){var r;if(/^\d{4}-\d{1,2}$/.test(e)?r=e.split("-").reverse():/\//.test(e)?r=e.split(/\s*\/\s*/g):/\s/.test(e)&&(r=e.split(/ +/g)),Il.isArray(r))return{month:r[0]||"",year:r.slice(1).join()};var n=Dl(e),a=e.substr(0,n);return{month:a,year:e.substr(a.length)}}ai.parseDate=$l;var yn={};Object.defineProperty(yn,"__esModule",{value:!0});yn.expirationMonth=void 0;function dn(e,r,n){return{isValid:e,isPotentiallyValid:r,isValidForThisYear:n||!1}}function Fl(e){var r=new Date().getMonth()+1;if(typeof e!="string")return dn(!1,!1);if(e.replace(/\s/g,"")===""||e==="0")return dn(!1,!0);if(!/^\d*$/.test(e))return dn(!1,!1);var n=parseInt(e,10);if(isNaN(Number(e)))return dn(!1,!1);var a=n>0&&n<13;return dn(a,a,a&&n>=r)}yn.expirationMonth=Fl;var Xi=Ut&&Ut.__assign||function(){return Xi=Object.assign||function(e){for(var r,n=1,a=arguments.length;nr?e[n]:r;return r}function jr(e,r){return{isValid:e,isPotentiallyValid:r}}function Wl(e,r){return r===void 0&&(r=Co),r=r instanceof Array?r:[r],typeof e!="string"||!/^\d*$/.test(e)?jr(!1,!1):ql(r,e.length)?jr(!0,!0):e.lengthzl(r)?jr(!1,!1):jr(!0,!0)}si.cvv=Wl;var li={};Object.defineProperty(li,"__esModule",{value:!0});li.postalCode=void 0;var Kl=3;function qi(e,r){return{isValid:e,isPotentiallyValid:r}}function Jl(e,r){r===void 0&&(r={});var n=r.minLength||Kl;return typeof e!="string"?qi(!1,!1):e.lengthfunction(){return r||(0,e[To(e)[0]])((r={exports:{}}).exports,r),r.exports},pu=(e,r,n,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of To(r))!du.call(e,s)&&s!==n&&Ao(e,s,{get:()=>r[s],enumerable:!(a=cu(r,s))||a.enumerable});return e},Je=(e,r,n)=>(n=e!=null?uu(fu(e)):{},pu(r||!e||!e.__esModule?Ao(n,"default",{value:e,enumerable:!0}):n,e)),ft=Yt({"../alpine/packages/alpinejs/dist/module.cjs.js"(e,r){var n=Object.create,a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,b=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty,I=(t,i)=>function(){return i||(0,t[u(t)[0]])((i={exports:{}}).exports,i),i.exports},U=(t,i)=>{for(var o in i)a(t,o,{get:i[o],enumerable:!0})},se=(t,i,o,c)=>{if(i&&typeof i=="object"||typeof i=="function")for(let p of u(i))!m.call(t,p)&&p!==o&&a(t,p,{get:()=>i[p],enumerable:!(c=s(i,p))||c.enumerable});return t},V=(t,i,o)=>(o=t!=null?n(b(t)):{},se(i||!t||!t.__esModule?a(o,"default",{value:t,enumerable:!0}):o,t)),ce=t=>se(a({},"__esModule",{value:!0}),t),re=I({"node_modules/@vue/shared/dist/shared.cjs.js"(t){Object.defineProperty(t,"__esModule",{value:!0});function i(y,K){const Z=Object.create(null),ue=y.split(",");for(let Ue=0;Ue!!Z[Ue.toLowerCase()]:Ue=>!!Z[Ue]}var o={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},c={1:"STABLE",2:"DYNAMIC",3:"FORWARDED"},p="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt",d=i(p),g=2;function x(y,K=0,Z=y.length){let ue=y.split(/(\r?\n)/);const Ue=ue.filter((bt,ct)=>ct%2===1);ue=ue.filter((bt,ct)=>ct%2===0);let rt=0;const yt=[];for(let bt=0;bt=K){for(let ct=bt-g;ct<=bt+g||Z>rt;ct++){if(ct<0||ct>=ue.length)continue;const un=ct+1;yt.push(`${un}${" ".repeat(Math.max(3-String(un).length,0))}| ${ue[ct]}`);const kr=ue[ct].length,Wn=Ue[ct]&&Ue[ct].length||0;if(ct===bt){const Lr=K-(rt-(kr+Wn)),Ui=Math.max(1,Z>rt?kr-Lr:Z-K);yt.push(" | "+" ".repeat(Lr)+"^".repeat(Ui))}else if(ct>bt){if(Z>rt){const Lr=Math.max(Math.min(Z-rt,kr),1);yt.push(" | "+"^".repeat(Lr))}rt+=kr+Wn}}break}return yt.join(`
-`)}var k="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Q=i(k),Ie=i(k+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected"),Ze=/[>/="'\u0009\u000a\u000c\u0020]/,$e={};function Ke(y){if($e.hasOwnProperty(y))return $e[y];const K=Ze.test(y);return K&&console.error(`unsafe attribute name: ${y}`),$e[y]=!K}var At={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},$t=i("animation-iteration-count,border-image-outset,border-image-slice,border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-miterlimit,stroke-opacity,stroke-width"),Se=i("accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap");function He(y){if(Rt(y)){const K={};for(let Z=0;Z{if(Z){const ue=Z.split(qe);ue.length>1&&(K[ue[0].trim()]=ue[1].trim())}}),K}function Pt(y){let K="";if(!y)return K;for(const Z in y){const ue=y[Z],Ue=Z.startsWith("--")?Z:qn(Z);(cr(ue)||typeof ue=="number"&&$t(Ue))&&(K+=`${Ue}:${ue};`)}return K}function Ft(y){let K="";if(cr(y))K=y;else if(Rt(y))for(let Z=0;Z]/;function Mi(y){const K=""+y,Z=Ni.exec(K);if(!Z)return K;let ue="",Ue,rt,yt=0;for(rt=Z.index;rt||--!>|Er(Z,K))}var kn=y=>y==null?"":Bt(y)?JSON.stringify(y,ji,2):String(y),ji=(y,K)=>ur(K)?{[`Map(${K.size})`]:[...K.entries()].reduce((Z,[ue,Ue])=>(Z[`${ue} =>`]=Ue,Z),{})}:Nt(K)?{[`Set(${K.size})`]:[...K.values()]}:Bt(K)&&!Rt(K)&&!Fn(K)?String(K):K,Ii=["bigInt","optionalChaining","nullishCoalescingOperator"],rn=Object.freeze({}),nn=Object.freeze([]),an=()=>{},Or=()=>!1,Cr=/^on[^a-z]/,Ar=y=>Cr.test(y),Tr=y=>y.startsWith("onUpdate:"),Ln=Object.assign,jn=(y,K)=>{const Z=y.indexOf(K);Z>-1&&y.splice(Z,1)},In=Object.prototype.hasOwnProperty,Dn=(y,K)=>In.call(y,K),Rt=Array.isArray,ur=y=>fr(y)==="[object Map]",Nt=y=>fr(y)==="[object Set]",on=y=>y instanceof Date,sn=y=>typeof y=="function",cr=y=>typeof y=="string",Di=y=>typeof y=="symbol",Bt=y=>y!==null&&typeof y=="object",Pr=y=>Bt(y)&&sn(y.then)&&sn(y.catch),$n=Object.prototype.toString,fr=y=>$n.call(y),$i=y=>fr(y).slice(8,-1),Fn=y=>fr(y)==="[object Object]",Bn=y=>cr(y)&&y!=="NaN"&&y[0]!=="-"&&""+parseInt(y,10)===y,Hn=i(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),dr=y=>{const K=Object.create(null);return Z=>K[Z]||(K[Z]=y(Z))},Un=/-(\w)/g,Vn=dr(y=>y.replace(Un,(K,Z)=>Z?Z.toUpperCase():"")),Fi=/\B([A-Z])/g,qn=dr(y=>y.replace(Fi,"-$1").toLowerCase()),pr=dr(y=>y.charAt(0).toUpperCase()+y.slice(1)),Bi=dr(y=>y?`on${pr(y)}`:""),ln=(y,K)=>y!==K&&(y===y||K===K),Hi=(y,K)=>{for(let Z=0;Z{Object.defineProperty(y,K,{configurable:!0,enumerable:!1,value:Z})},Nr=y=>{const K=parseFloat(y);return isNaN(K)?y:K},Mr,zn=()=>Mr||(Mr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});t.EMPTY_ARR=nn,t.EMPTY_OBJ=rn,t.NO=Or,t.NOOP=an,t.PatchFlagNames=o,t.babelParserDefaultPlugins=Ii,t.camelize=Vn,t.capitalize=pr,t.def=Rr,t.escapeHtml=Mi,t.escapeHtmlComment=ki,t.extend=Ln,t.generateCodeFrame=x,t.getGlobalThis=zn,t.hasChanged=ln,t.hasOwn=Dn,t.hyphenate=qn,t.invokeArrayFns=Hi,t.isArray=Rt,t.isBooleanAttr=Ie,t.isDate=on,t.isFunction=sn,t.isGloballyWhitelisted=d,t.isHTMLTag=xr,t.isIntegerKey=Bn,t.isKnownAttr=Se,t.isMap=ur,t.isModelListener=Tr,t.isNoUnitNumericStyleProp=$t,t.isObject=Bt,t.isOn=Ar,t.isPlainObject=Fn,t.isPromise=Pr,t.isReservedProp=Hn,t.isSSRSafeAttrName=Ke,t.isSVGTag=Ri,t.isSet=Nt,t.isSpecialBooleanAttr=Q,t.isString=cr,t.isSymbol=Di,t.isVoidTag=Sr,t.looseEqual=Er,t.looseIndexOf=Mn,t.makeMap=i,t.normalizeClass=Ft,t.normalizeStyle=He,t.objectToString=$n,t.parseStringStyle=vt,t.propsToAttrMap=At,t.remove=jn,t.slotFlagsText=c,t.stringifyStyle=Pt,t.toDisplayString=kn,t.toHandlerKey=Bi,t.toNumber=Nr,t.toRawType=$i,t.toTypeString=fr}}),E=I({"node_modules/@vue/shared/index.js"(t,i){i.exports=re()}}),v=I({"node_modules/@vue/reactivity/dist/reactivity.cjs.js"(t){Object.defineProperty(t,"__esModule",{value:!0});var i=E(),o=new WeakMap,c=[],p,d=Symbol("iterate"),g=Symbol("Map key iterate");function x(l){return l&&l._isEffect===!0}function k(l,T=i.EMPTY_OBJ){x(l)&&(l=l.raw);const R=Ze(l,T);return T.lazy||R(),R}function Q(l){l.active&&($e(l),l.options.onStop&&l.options.onStop(),l.active=!1)}var Ie=0;function Ze(l,T){const R=function(){if(!R.active)return l();if(!c.includes(R)){$e(R);try{return Se(),c.push(R),p=R,l()}finally{c.pop(),He(),p=c[c.length-1]}}};return R.id=Ie++,R.allowRecurse=!!T.allowRecurse,R._isEffect=!0,R.active=!0,R.raw=l,R.deps=[],R.options=T,R}function $e(l){const{deps:T}=l;if(T.length){for(let R=0;R{gt&>.forEach(Mt=>{(Mt!==p||Mt.allowRecurse)&&it.add(Mt)})};if(T==="clear")ke.forEach(_t);else if(R==="length"&&i.isArray(l))ke.forEach((gt,Mt)=>{(Mt==="length"||Mt>=ne)&&_t(gt)});else switch(R!==void 0&&_t(ke.get(R)),T){case"add":i.isArray(l)?i.isIntegerKey(R)&&_t(ke.get("length")):(_t(ke.get(d)),i.isMap(l)&&_t(ke.get(g)));break;case"delete":i.isArray(l)||(_t(ke.get(d)),i.isMap(l)&&_t(ke.get(g)));break;case"set":i.isMap(l)&&_t(ke.get(d));break}const cn=gt=>{gt.options.onTrigger&>.options.onTrigger({effect:gt,target:l,key:R,type:T,newValue:ne,oldValue:J,oldTarget:ge}),gt.options.scheduler?gt.options.scheduler(gt):gt()};it.forEach(cn)}var vt=i.makeMap("__proto__,__v_isRef,__isVue"),Pt=new Set(Object.getOwnPropertyNames(Symbol).map(l=>Symbol[l]).filter(i.isSymbol)),Ft=Sr(),wr=Sr(!1,!0),en=Sr(!0),tn=Sr(!0,!0),xr=Ri();function Ri(){const l={};return["includes","indexOf","lastIndexOf"].forEach(T=>{l[T]=function(...R){const ne=y(this);for(let ge=0,ke=this.length;ge{l[T]=function(...R){$t();const ne=y(this)[T].apply(this,R);return He(),ne}}),l}function Sr(l=!1,T=!1){return function(ne,J,ge){if(J==="__v_isReactive")return!l;if(J==="__v_isReadonly")return l;if(J==="__v_raw"&&ge===(l?T?Vn:Un:T?dr:Hn).get(ne))return ne;const ke=i.isArray(ne);if(!l&&ke&&i.hasOwn(xr,J))return Reflect.get(xr,J,ge);const it=Reflect.get(ne,J,ge);return(i.isSymbol(J)?Pt.has(J):vt(J))||(l||Le(ne,"get",J),T)?it:ue(it)?!ke||!i.isIntegerKey(J)?it.value:it:i.isObject(it)?l?ln(it):pr(it):it}}var Ni=Nn(),Mi=Nn(!0);function Nn(l=!1){return function(R,ne,J,ge){let ke=R[ne];if(!l&&(J=y(J),ke=y(ke),!i.isArray(R)&&ue(ke)&&!ue(J)))return ke.value=J,!0;const it=i.isArray(R)&&i.isIntegerKey(ne)?Number(ne)i.isObject(l)?pr(l):l,nn=l=>i.isObject(l)?ln(l):l,an=l=>l,Or=l=>Reflect.getPrototypeOf(l);function Cr(l,T,R=!1,ne=!1){l=l.__v_raw;const J=y(l),ge=y(T);T!==ge&&!R&&Le(J,"get",T),!R&&Le(J,"get",ge);const{has:ke}=Or(J),it=ne?an:R?nn:rn;if(ke.call(J,T))return it(l.get(T));if(ke.call(J,ge))return it(l.get(ge));l!==J&&l.get(T)}function Ar(l,T=!1){const R=this.__v_raw,ne=y(R),J=y(l);return l!==J&&!T&&Le(ne,"has",l),!T&&Le(ne,"has",J),l===J?R.has(l):R.has(l)||R.has(J)}function Tr(l,T=!1){return l=l.__v_raw,!T&&Le(y(l),"iterate",d),Reflect.get(l,"size",l)}function Ln(l){l=y(l);const T=y(this);return Or(T).has.call(T,l)||(T.add(l),qe(T,"add",l,l)),this}function jn(l,T){T=y(T);const R=y(this),{has:ne,get:J}=Or(R);let ge=ne.call(R,l);ge?Bn(R,ne,l):(l=y(l),ge=ne.call(R,l));const ke=J.call(R,l);return R.set(l,T),ge?i.hasChanged(T,ke)&&qe(R,"set",l,T,ke):qe(R,"add",l,T),this}function In(l){const T=y(this),{has:R,get:ne}=Or(T);let J=R.call(T,l);J?Bn(T,R,l):(l=y(l),J=R.call(T,l));const ge=ne?ne.call(T,l):void 0,ke=T.delete(l);return J&&qe(T,"delete",l,void 0,ge),ke}function Dn(){const l=y(this),T=l.size!==0,R=i.isMap(l)?new Map(l):new Set(l),ne=l.clear();return T&&qe(l,"clear",void 0,void 0,R),ne}function Rt(l,T){return function(ne,J){const ge=this,ke=ge.__v_raw,it=y(ke),_t=T?an:l?nn:rn;return!l&&Le(it,"iterate",d),ke.forEach((cn,gt)=>ne.call(J,_t(cn),_t(gt),ge))}}function ur(l,T,R){return function(...ne){const J=this.__v_raw,ge=y(J),ke=i.isMap(ge),it=l==="entries"||l===Symbol.iterator&&ke,_t=l==="keys"&&ke,cn=J[l](...ne),gt=R?an:T?nn:rn;return!T&&Le(ge,"iterate",_t?g:d),{next(){const{value:Mt,done:Vi}=cn.next();return Vi?{value:Mt,done:Vi}:{value:it?[gt(Mt[0]),gt(Mt[1])]:gt(Mt),done:Vi}},[Symbol.iterator](){return this}}}}function Nt(l){return function(...T){{const R=T[0]?`on key "${T[0]}" `:"";console.warn(`${i.capitalize(l)} operation ${R}failed: target is readonly.`,y(this))}return l==="delete"?!1:this}}function on(){const l={get(ge){return Cr(this,ge)},get size(){return Tr(this)},has:Ar,add:Ln,set:jn,delete:In,clear:Dn,forEach:Rt(!1,!1)},T={get(ge){return Cr(this,ge,!1,!0)},get size(){return Tr(this)},has:Ar,add:Ln,set:jn,delete:In,clear:Dn,forEach:Rt(!1,!0)},R={get(ge){return Cr(this,ge,!0)},get size(){return Tr(this,!0)},has(ge){return Ar.call(this,ge,!0)},add:Nt("add"),set:Nt("set"),delete:Nt("delete"),clear:Nt("clear"),forEach:Rt(!0,!1)},ne={get(ge){return Cr(this,ge,!0,!0)},get size(){return Tr(this,!0)},has(ge){return Ar.call(this,ge,!0)},add:Nt("add"),set:Nt("set"),delete:Nt("delete"),clear:Nt("clear"),forEach:Rt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(ge=>{l[ge]=ur(ge,!1,!1),R[ge]=ur(ge,!0,!1),T[ge]=ur(ge,!1,!0),ne[ge]=ur(ge,!0,!0)}),[l,R,T,ne]}var[sn,cr,Di,Bt]=on();function Pr(l,T){const R=T?l?Bt:Di:l?cr:sn;return(ne,J,ge)=>J==="__v_isReactive"?!l:J==="__v_isReadonly"?l:J==="__v_raw"?ne:Reflect.get(i.hasOwn(R,J)&&J in ne?R:ne,J,ge)}var $n={get:Pr(!1,!1)},fr={get:Pr(!1,!0)},$i={get:Pr(!0,!1)},Fn={get:Pr(!0,!0)};function Bn(l,T,R){const ne=y(R);if(ne!==R&&T.call(l,ne)){const J=i.toRawType(l);console.warn(`Reactive ${J} contains both the raw and reactive versions of the same object${J==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var Hn=new WeakMap,dr=new WeakMap,Un=new WeakMap,Vn=new WeakMap;function Fi(l){switch(l){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function qn(l){return l.__v_skip||!Object.isExtensible(l)?0:Fi(i.toRawType(l))}function pr(l){return l&&l.__v_isReadonly?l:Rr(l,!1,Mn,$n,Hn)}function Bi(l){return Rr(l,!1,ji,fr,dr)}function ln(l){return Rr(l,!0,kn,$i,Un)}function Hi(l){return Rr(l,!0,Ii,Fn,Vn)}function Rr(l,T,R,ne,J){if(!i.isObject(l))return console.warn(`value cannot be made reactive: ${String(l)}`),l;if(l.__v_raw&&!(T&&l.__v_isReactive))return l;const ge=J.get(l);if(ge)return ge;const ke=qn(l);if(ke===0)return l;const it=new Proxy(l,ke===2?ne:R);return J.set(l,it),it}function Nr(l){return Mr(l)?Nr(l.__v_raw):!!(l&&l.__v_isReactive)}function Mr(l){return!!(l&&l.__v_isReadonly)}function zn(l){return Nr(l)||Mr(l)}function y(l){return l&&y(l.__v_raw)||l}function K(l){return i.def(l,"__v_skip",!0),l}var Z=l=>i.isObject(l)?pr(l):l;function ue(l){return!!(l&&l.__v_isRef===!0)}function Ue(l){return bt(l)}function rt(l){return bt(l,!0)}var yt=class{constructor(l,T=!1){this._shallow=T,this.__v_isRef=!0,this._rawValue=T?l:y(l),this._value=T?l:Z(l)}get value(){return Le(y(this),"get","value"),this._value}set value(l){l=this._shallow?l:y(l),i.hasChanged(l,this._rawValue)&&(this._rawValue=l,this._value=this._shallow?l:Z(l),qe(y(this),"set","value",l))}};function bt(l,T=!1){return ue(l)?l:new yt(l,T)}function ct(l){qe(y(l),"set","value",l.value)}function un(l){return ue(l)?l.value:l}var kr={get:(l,T,R)=>un(Reflect.get(l,T,R)),set:(l,T,R,ne)=>{const J=l[T];return ue(J)&&!ue(R)?(J.value=R,!0):Reflect.set(l,T,R,ne)}};function Wn(l){return Nr(l)?l:new Proxy(l,kr)}var Lr=class{constructor(l){this.__v_isRef=!0;const{get:T,set:R}=l(()=>Le(this,"get","value"),()=>qe(this,"set","value"));this._get=T,this._set=R}get value(){return this._get()}set value(l){this._set(l)}};function Ui(l){return new Lr(l)}function il(l){zn(l)||console.warn("toRefs() expects a reactive object but received a plain one.");const T=i.isArray(l)?new Array(l.length):{};for(const R in l)T[R]=Va(l,R);return T}var al=class{constructor(l,T){this._object=l,this._key=T,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(l){this._object[this._key]=l}};function Va(l,T){return ue(l[T])?l[T]:new al(l,T)}var ol=class{constructor(l,T,R){this._setter=T,this._dirty=!0,this.__v_isRef=!0,this.effect=k(l,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,qe(y(this),"set","value"))}}),this.__v_isReadonly=R}get value(){const l=y(this);return l._dirty&&(l._value=this.effect(),l._dirty=!1),Le(l,"get","value"),l._value}set value(l){this._setter(l)}};function sl(l){let T,R;return i.isFunction(l)?(T=l,R=()=>{console.warn("Write operation failed: computed value is readonly")}):(T=l.get,R=l.set),new ol(T,R,i.isFunction(l)||!l.set)}t.ITERATE_KEY=d,t.computed=sl,t.customRef=Ui,t.effect=k,t.enableTracking=Se,t.isProxy=zn,t.isReactive=Nr,t.isReadonly=Mr,t.isRef=ue,t.markRaw=K,t.pauseTracking=$t,t.proxyRefs=Wn,t.reactive=pr,t.readonly=ln,t.ref=Ue,t.resetTracking=He,t.shallowReactive=Bi,t.shallowReadonly=Hi,t.shallowRef=rt,t.stop=Q,t.toRaw=y,t.toRef=Va,t.toRefs=il,t.track=Le,t.trigger=qe,t.triggerRef=ct,t.unref=un}}),_=I({"node_modules/@vue/reactivity/index.js"(t,i){i.exports=v()}}),O={};U(O,{default:()=>nl}),r.exports=ce(O);var M=!1,j=!1,H=[],Te=-1;function D(t){C(t)}function C(t){H.includes(t)||H.push(t),ee()}function N(t){let i=H.indexOf(t);i!==-1&&i>Te&&H.splice(i,1)}function ee(){!j&&!M&&(M=!0,queueMicrotask(be))}function be(){M=!1,j=!0;for(let t=0;tt.effect(i,{scheduler:o=>{Ye?D(o):o()}}),Ge=t.raw}function ht(t){X=t}function xt(t){let i=()=>{};return[c=>{let p=X(c);return t._x_effects||(t._x_effects=new Set,t._x_runEffects=()=>{t._x_effects.forEach(d=>d())}),t._x_effects.add(p),i=()=>{p!==void 0&&(t._x_effects.delete(p),Re(p))},p},()=>{i()}]}function Et(t,i){let o=!0,c,p=X(()=>{let d=t();JSON.stringify(d),o?c=d:queueMicrotask(()=>{i(d,c),c=d}),o=!1});return()=>Re(p)}function we(t,i,o={}){t.dispatchEvent(new CustomEvent(i,{detail:o,bubbles:!0,composed:!0,cancelable:!0}))}function le(t,i){if(typeof ShadowRoot=="function"&&t instanceof ShadowRoot){Array.from(t.children).forEach(p=>le(p,i));return}let o=!1;if(i(t,()=>o=!0),o)return;let c=t.firstElementChild;for(;c;)le(c,i),c=c.nextElementSibling}function Ee(t,...i){console.warn(`Alpine Warning: ${t}`,...i)}var me=!1;function ve(){me&&Ee("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),me=!0,document.body||Ee("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `