mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-01 06:14:37 -04:00
Company Settings OpenAPI
This commit is contained in:
parent
a8b70ee25c
commit
fda6ec33fd
@ -395,7 +395,7 @@ class InvoiceController extends BaseController
|
|||||||
|
|
||||||
$invoice = $this->invoice_repo->save($request->all(), $invoice);
|
$invoice = $this->invoice_repo->save($request->all(), $invoice);
|
||||||
|
|
||||||
event(new InvoiceWasUpdated($invoice->with('client,client.currency')));
|
event(new InvoiceWasUpdated($invoice));
|
||||||
|
|
||||||
return $this->itemResponse($invoice);
|
return $this->itemResponse($invoice);
|
||||||
|
|
||||||
|
305
app/Http/Controllers/OpenAPI/CompanySettingsSchema.php
Normal file
305
app/Http/Controllers/OpenAPI/CompanySettingsSchema.php
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @OA\Schema(
|
||||||
|
* schema="CompanySettings",
|
||||||
|
* type="object",
|
||||||
|
* @OA\Property(property="timezone_id", type="string", example="15", description="The timezone id"),
|
||||||
|
* @OA\Property(property="date_format_id", type="string", example="15", description="____________"),
|
||||||
|
* @OA\Property(property="datetime_format_id", type="string", example="15", description="____________"),
|
||||||
|
* @OA\Property(property="military_time", type="boolean", example=true, description="____________"),
|
||||||
|
* )
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
start_of_week:
|
||||||
|
type: integer
|
||||||
|
description: 'References the start day of the week'
|
||||||
|
example: 1
|
||||||
|
financial_year_start:
|
||||||
|
type: string
|
||||||
|
example: "2000-01-01"
|
||||||
|
description: 'The start date of the financial year for the company'
|
||||||
|
language_id:
|
||||||
|
type: integer
|
||||||
|
example: 1
|
||||||
|
currency_id:
|
||||||
|
type: integer
|
||||||
|
example: 1
|
||||||
|
precision:
|
||||||
|
type: integer
|
||||||
|
example: 2
|
||||||
|
description: 'References the default currency precision'
|
||||||
|
show_currency_symbol:
|
||||||
|
type: boolean
|
||||||
|
show_currency_code:
|
||||||
|
type: boolean
|
||||||
|
payment_terms:
|
||||||
|
type: integer
|
||||||
|
example: 7
|
||||||
|
description: 'The company level default payments terms'
|
||||||
|
custom_label1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom label for a custom value - 1'
|
||||||
|
custom_value1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom label - 1'
|
||||||
|
custom_label2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom label for a custom value - 2'
|
||||||
|
custom_value2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom label - 2'
|
||||||
|
custom_label3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom label for a custom value - 3'
|
||||||
|
custom_value3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom label - 3'
|
||||||
|
custom_label4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom label for a custom value - 4'
|
||||||
|
custom_value4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom label - 4'
|
||||||
|
custom_client_label1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client label - 1'
|
||||||
|
custom_client_label2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client label - 2'
|
||||||
|
custom_client_label3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client label - 3'
|
||||||
|
custom_client_label4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client label - 4'
|
||||||
|
custom_client_contact_label1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client contact label - 1'
|
||||||
|
custom_client_contact_label2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client contact label - 2'
|
||||||
|
custom_client_contact_label3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client contact label - 3'
|
||||||
|
custom_client_contact_label4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom client contact label - 4'
|
||||||
|
custom_invoice_label1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom invoice label - 1'
|
||||||
|
custom_invoice_label2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom invoice label - 2'
|
||||||
|
custom_invoice_label3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom invoice label - 3'
|
||||||
|
custom_invoice_label4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom invoice label - 4'
|
||||||
|
custom_product_label1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom product label - 1'
|
||||||
|
custom_product_label2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom product label - 2'
|
||||||
|
custom_product_label3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom product label - 3'
|
||||||
|
custom_product_label4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom product label - 4'
|
||||||
|
custom_task_label1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom task label - 1'
|
||||||
|
custom_task_label2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom task label - 2'
|
||||||
|
custom_task_label3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom task label - 3'
|
||||||
|
custom_task_label4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom task label - 4'
|
||||||
|
custom_expense_label1:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom expense label - 1'
|
||||||
|
custom_expense_label2:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom expense label - 2'
|
||||||
|
custom_expense_label3:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom expense label - 3'
|
||||||
|
custom_expense_label4:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'A custom value for a custom expense label - 4'
|
||||||
|
custom_taxes1:
|
||||||
|
type: boolean
|
||||||
|
description: 'Determines whether custom fields are also taxed'
|
||||||
|
custom_taxes2:
|
||||||
|
type: boolean
|
||||||
|
description: 'Determines whether custom fields are also taxed'
|
||||||
|
default_task_rate:
|
||||||
|
type: number
|
||||||
|
example: 10.00
|
||||||
|
format: double
|
||||||
|
description: 'The company level default task rate'
|
||||||
|
send_reminders:
|
||||||
|
type: boolean
|
||||||
|
description: 'Flag for sending reminders'
|
||||||
|
show_tasks_in_portal:
|
||||||
|
type: boolean
|
||||||
|
description: 'Flag for showing tasks in the client portal'
|
||||||
|
custom_message_dashboard:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'Please pay invoices immediately'
|
||||||
|
description: 'Pins a permanent message to the dashboard'
|
||||||
|
custom_message_unpaid_invoice:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'Please pay invoice immediately'
|
||||||
|
description: 'Pins a permanent message to a unpaid invoice'
|
||||||
|
custom_message_paid_invoice:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'Thanks for paying this invoice!'
|
||||||
|
description: 'Pins a permanent message to a paid invoice'
|
||||||
|
custom_message_unapproved_quote:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: 'Please approve quote'
|
||||||
|
description: 'Pins a permanent message to a quote'
|
||||||
|
lock_sent_invoices:
|
||||||
|
type: boolean
|
||||||
|
description: 'Prevents an invoice from modification after it has been sent / marked sent'
|
||||||
|
auto_archive_invoice:
|
||||||
|
type: boolean
|
||||||
|
description: 'Flag for automatically archiving an invoice on successful payment'
|
||||||
|
inclusive_taxes:
|
||||||
|
type: boolean
|
||||||
|
description: 'Flag for the use of inclusive taxes, TRUE = inclusive, FALSE = exclusive'
|
||||||
|
translations:
|
||||||
|
type: object
|
||||||
|
description: 'Allows a user to override the default translation to use their own specific translations'
|
||||||
|
properties:
|
||||||
|
key:
|
||||||
|
type: string
|
||||||
|
example: 'invoice'
|
||||||
|
description: 'The key'
|
||||||
|
value:
|
||||||
|
type: string
|
||||||
|
example: 'Facturer'
|
||||||
|
description: 'The custom translated value'
|
||||||
|
invoice_number_prefix:
|
||||||
|
type: string
|
||||||
|
example: 'R'
|
||||||
|
description: 'This string is prepended to the invoice number'
|
||||||
|
invoice_number_pattern:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: '{$year}-{$counter}'
|
||||||
|
description: 'Allows customisation of the invoice number pattern'
|
||||||
|
invoice_number_counter:
|
||||||
|
type: integer
|
||||||
|
example: 200
|
||||||
|
description: 'The next invoice number counter.'
|
||||||
|
quote_number_prefix:
|
||||||
|
type: string
|
||||||
|
example: 'Q'
|
||||||
|
description: 'This string is prepended to the quote number'
|
||||||
|
quote_number_pattern:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: '{$year}-{$counter}'
|
||||||
|
description: 'Allows customisation of the quote number pattern'
|
||||||
|
quote_number_counter:
|
||||||
|
type: integer
|
||||||
|
example: 200
|
||||||
|
description: 'The next quote number counter.'
|
||||||
|
client_number_prefix:
|
||||||
|
type: string
|
||||||
|
example: 'C'
|
||||||
|
description: 'This string is prepended to the client number'
|
||||||
|
client_number_pattern:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: '{$year}-{$counter}'
|
||||||
|
description: 'Allows customisation of the client number pattern'
|
||||||
|
client_number_counter:
|
||||||
|
type: integer
|
||||||
|
example: 200
|
||||||
|
description: 'The next client number counter.'
|
||||||
|
credit_number_prefix:
|
||||||
|
type: string
|
||||||
|
example: 'CREDIT-'
|
||||||
|
description: 'This string is prepended to the credit number'
|
||||||
|
credit_number_pattern:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: '{$year}-{$counter}'
|
||||||
|
description: 'Allows customisation of the credit number pattern'
|
||||||
|
credit_number_counter:
|
||||||
|
type: integer
|
||||||
|
example: 200
|
||||||
|
description: 'The next credit number counter.'
|
||||||
|
shared_invoice_quote_counter:
|
||||||
|
type: boolean
|
||||||
|
description: 'Flags whether to share the counter for invoices and quotes'
|
||||||
|
recurring_invoice_number_prefix:
|
||||||
|
type: string
|
||||||
|
example: 'R'
|
||||||
|
description: 'This string is prepended to the recurring invoice number'
|
||||||
|
reset_counter_frequency_id:
|
||||||
|
type: integer
|
||||||
|
example: 1
|
||||||
|
description: 'CONSTANT which is used to apply the frequency which the counters are reset'
|
||||||
|
reset_counter_date:
|
||||||
|
type: string
|
||||||
|
nullable: true
|
||||||
|
example: '2019-01-01'
|
||||||
|
description: 'The explicit date which is used to reset counters'
|
||||||
|
counter_padding:
|
||||||
|
type: integer
|
||||||
|
example: 0
|
||||||
|
description: 'Pads the counter with leading zeros'
|
||||||
|
default_gateway:
|
||||||
|
type: integer
|
||||||
|
example: 1
|
||||||
|
description: 'The company level payment gateway to be used'
|
||||||
|
entity:
|
||||||
|
type: string
|
||||||
|
example: 'App\\Models\\Company'
|
||||||
|
description: 'The entity which these settings apply - allows generic handling'
|
@ -42,6 +42,8 @@ class CreateInvoicePdf implements ShouldQueue
|
|||||||
{
|
{
|
||||||
|
|
||||||
$invoice = $event->invoice;
|
$invoice = $event->invoice;
|
||||||
|
|
||||||
|
$invoice->load('client', 'client.currency');
|
||||||
$path = 'public/' . $invoice->client->client_hash . '/invoices/';
|
$path = 'public/' . $invoice->client->client_hash . '/invoices/';
|
||||||
$file_path = $path . $invoice->invoice_number . '.pdf';
|
$file_path = $path . $invoice->invoice_number . '.pdf';
|
||||||
|
|
||||||
|
@ -86,15 +86,15 @@ class Client extends BaseModel
|
|||||||
'id_number',
|
'id_number',
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
|
||||||
protected $with = [
|
protected $with = [
|
||||||
'contacts',
|
//'currency',
|
||||||
'primary_contact',
|
// 'primary_contact',
|
||||||
'country',
|
// 'country',
|
||||||
'shipping_country',
|
// 'shipping_country',
|
||||||
'company'
|
// 'company'
|
||||||
];
|
];
|
||||||
*/
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'settings' => 'object',
|
'settings' => 'object',
|
||||||
'updated_at' => 'timestamp',
|
'updated_at' => 'timestamp',
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace App\Utils;
|
namespace App\Utils;
|
||||||
|
|
||||||
|
use App\Models\Currency;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,7 +62,7 @@ class Number
|
|||||||
//public static function formatMoney($value, $currency, $country, $settings) :string
|
//public static function formatMoney($value, $currency, $country, $settings) :string
|
||||||
public static function formatMoney($value, $client) :string
|
public static function formatMoney($value, $client) :string
|
||||||
{
|
{
|
||||||
//\Log::error(debug_backtrace()[1]['function']);
|
|
||||||
$thousand = $client->currency->thousand_separator;
|
$thousand = $client->currency->thousand_separator;
|
||||||
$decimal = $client->currency->decimal_separator;
|
$decimal = $client->currency->decimal_separator;
|
||||||
$precision = $client->currency->precision;
|
$precision = $client->currency->precision;
|
||||||
@ -78,14 +79,14 @@ class Number
|
|||||||
$value = number_format($value, $precision, $decimal, $thousand);
|
$value = number_format($value, $precision, $decimal, $thousand);
|
||||||
$symbol = $client->currency->symbol;
|
$symbol = $client->currency->symbol;
|
||||||
|
|
||||||
if ($client->getSetting('show_currency_code') == "TRUE") {
|
if ($client->getSetting('show_currency_code') === true) {
|
||||||
return "{$value} {$code}";
|
return "{$value} {$code}";
|
||||||
} elseif ($swapSymbol) {
|
} elseif ($swapSymbol) {
|
||||||
return "{$value} " . trim($symbol);
|
return "{$value} " . trim($symbol);
|
||||||
} elseif ($client->getSetting('show_currency_code') == "FALSE") {
|
} elseif ($client->getSetting('show_currency_code') === false) {
|
||||||
return "{$symbol}{$value}";
|
return "{$symbol}{$value}";
|
||||||
} else {
|
} else {
|
||||||
return self::formatValue($value, $currency);
|
return self::formatValue($value, $client->currency);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ class ClientModelTest extends TestCase
|
|||||||
|
|
||||||
$this->makeTestData();
|
$this->makeTestData();
|
||||||
|
|
||||||
if(config('ninja.testvars.travis') == FALSE)
|
if(config('ninja.testvars.travis') == false)
|
||||||
$this->markTestSkipped('Skip test for Travis');
|
$this->markTestSkipped('Skip test for Travis');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user