mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-08 08:12:17 +01:00
update api client, and report empty state improvement
This commit is contained in:
@@ -35,12 +35,12 @@ const gridTemplate = computed(() => {
|
||||
No shared reports found
|
||||
</h3>
|
||||
<p v-if="canCreateProjects()" class="pb-5">
|
||||
Create your first project now!
|
||||
Go to the overview to create a report
|
||||
</p>
|
||||
<SecondaryButton
|
||||
:icon="PlusIcon"
|
||||
@click="router.visit(route('reporting'))"
|
||||
>Go to the overview to create a report
|
||||
>Go to overview
|
||||
</SecondaryButton>
|
||||
</div>
|
||||
<template v-for="report in reports" :key="report.id">
|
||||
|
||||
@@ -66,14 +66,16 @@ const InvoiceResource = z
|
||||
buyer_name: z.string(),
|
||||
status: z.string(),
|
||||
date: z.string(),
|
||||
created_at: z.string(),
|
||||
updated_at: z.string(),
|
||||
created_at: z.union([z.string(), z.null()]),
|
||||
updated_at: z.union([z.string(), z.null()]),
|
||||
})
|
||||
.passthrough();
|
||||
const InvoiceCollection = z.array(InvoiceResource);
|
||||
const InvoiceDiscountType = z.enum(['percentage', 'fixed']);
|
||||
const InvoiceStoreRequest = z
|
||||
.object({
|
||||
due_at: z.union([z.string(), z.null()]).optional(),
|
||||
paid_at: z.union([z.string(), z.null()]).optional(),
|
||||
seller_name: z.string(),
|
||||
seller_vatin: z.union([z.string(), z.null()]).optional(),
|
||||
seller_address_line_1: z.union([z.string(), z.null()]).optional(),
|
||||
@@ -85,6 +87,7 @@ const InvoiceStoreRequest = z
|
||||
seller_phone: z.union([z.string(), z.null()]).optional(),
|
||||
seller_email: z.union([z.string(), z.null()]).optional(),
|
||||
buyer_name: z.string(),
|
||||
buyer_vatin: z.union([z.string(), z.null()]).optional(),
|
||||
buyer_address_line_1: z.union([z.string(), z.null()]).optional(),
|
||||
buyer_address_line_2: z.union([z.string(), z.null()]).optional(),
|
||||
buyer_address_line_3: z.union([z.string(), z.null()]).optional(),
|
||||
@@ -111,7 +114,6 @@ const InvoiceStoreRequest = z
|
||||
description: z.union([z.string(), z.null()]).optional(),
|
||||
unit_price: z.number().int().gte(0).lte(99999999),
|
||||
quantity: z.number().gte(0),
|
||||
order_index: z.number().int().gte(0).lte(1000000),
|
||||
})
|
||||
.passthrough()
|
||||
)
|
||||
@@ -127,8 +129,8 @@ const InvoiceEntryResource = z
|
||||
unit_price: z.number().int(),
|
||||
quantity: z.number().int(),
|
||||
order_index: z.number().int(),
|
||||
created_at: z.string(),
|
||||
updated_at: z.string(),
|
||||
created_at: z.union([z.string(), z.null()]),
|
||||
updated_at: z.union([z.string(), z.null()]),
|
||||
})
|
||||
.passthrough();
|
||||
const DetailedInvoiceResource = z
|
||||
@@ -147,6 +149,7 @@ const DetailedInvoiceResource = z
|
||||
seller_phone: z.string(),
|
||||
seller_email: z.string(),
|
||||
buyer_name: z.string(),
|
||||
buyer_vatin: z.string(),
|
||||
buyer_address_line_1: z.string(),
|
||||
buyer_address_line_2: z.string(),
|
||||
buyer_address_line_3: z.string(),
|
||||
@@ -155,17 +158,29 @@ const DetailedInvoiceResource = z
|
||||
buyer_address_country: z.string(),
|
||||
buyer_phone: z.string(),
|
||||
buyer_email: z.string(),
|
||||
paid_at: z.string(),
|
||||
due_at: z.string(),
|
||||
discount_type: z.string(),
|
||||
discount_amount: z.string(),
|
||||
tax_rate: z.string(),
|
||||
status: z.string(),
|
||||
currency: z.string(),
|
||||
date: z.string(),
|
||||
footer: z.string(),
|
||||
notes: z.string(),
|
||||
billing_period_start: z.string(),
|
||||
billing_period_end: z.string(),
|
||||
created_at: z.string(),
|
||||
updated_at: z.string(),
|
||||
created_at: z.union([z.string(), z.null()]),
|
||||
updated_at: z.union([z.string(), z.null()]),
|
||||
entries: z.array(InvoiceEntryResource),
|
||||
})
|
||||
.passthrough();
|
||||
const InvoiceStatus = z.enum(['draft', 'sent', 'cancelled']);
|
||||
const InvoiceUpdateRequest = z
|
||||
.object({
|
||||
status: InvoiceStatus,
|
||||
due_at: z.union([z.string(), z.null()]),
|
||||
paid_at: z.union([z.string(), z.null()]),
|
||||
seller_name: z.string(),
|
||||
seller_vatin: z.union([z.string(), z.null()]),
|
||||
seller_address_line_1: z.union([z.string(), z.null()]),
|
||||
@@ -177,6 +192,7 @@ const InvoiceUpdateRequest = z
|
||||
seller_phone: z.union([z.string(), z.null()]),
|
||||
seller_email: z.union([z.string(), z.null()]),
|
||||
buyer_name: z.string(),
|
||||
buyer_vatin: z.union([z.string(), z.null()]),
|
||||
buyer_address_line_1: z.union([z.string(), z.null()]),
|
||||
buyer_address_line_2: z.union([z.string(), z.null()]),
|
||||
buyer_address_line_3: z.union([z.string(), z.null()]),
|
||||
@@ -203,13 +219,50 @@ const InvoiceUpdateRequest = z
|
||||
description: z.union([z.string(), z.null()]).optional(),
|
||||
unit_price: z.number().int().gte(0).lte(99999999),
|
||||
quantity: z.number().gte(0),
|
||||
order_index: z.number().int().gte(0).lte(1000000),
|
||||
})
|
||||
.passthrough()
|
||||
),
|
||||
})
|
||||
.partial()
|
||||
.passthrough();
|
||||
const InvoiceSettingResource = z
|
||||
.object({
|
||||
seller_name: z.union([z.string(), z.null()]),
|
||||
seller_vatin: z.union([z.string(), z.null()]),
|
||||
seller_address_line_1: z.union([z.string(), z.null()]),
|
||||
seller_address_line_2: z.union([z.string(), z.null()]),
|
||||
seller_address_line_3: z.union([z.string(), z.null()]),
|
||||
seller_address_post_code: z.union([z.string(), z.null()]),
|
||||
seller_address_city: z.union([z.string(), z.null()]),
|
||||
seller_address_country: z.union([z.string(), z.null()]),
|
||||
seller_phone: z.union([z.string(), z.null()]),
|
||||
seller_email: z.union([z.string(), z.null()]),
|
||||
footer_default: z.union([z.string(), z.null()]),
|
||||
notes_default: z.union([z.string(), z.null()]),
|
||||
tax_rate_default: z.union([z.number(), z.null()]),
|
||||
e_invoicing_enabled: z.boolean(),
|
||||
organization_id: z.string(),
|
||||
})
|
||||
.passthrough();
|
||||
const InvoiceSettingUpdateRequest = z
|
||||
.object({
|
||||
seller_name: z.union([z.string(), z.null()]),
|
||||
seller_vatin: z.union([z.string(), z.null()]),
|
||||
seller_address_line_1: z.union([z.string(), z.null()]),
|
||||
seller_address_line_2: z.union([z.string(), z.null()]),
|
||||
seller_address_line_3: z.union([z.string(), z.null()]),
|
||||
seller_address_post_code: z.union([z.string(), z.null()]),
|
||||
seller_address_city: z.union([z.string(), z.null()]),
|
||||
seller_address_country: z.union([z.string(), z.null()]),
|
||||
seller_phone: z.union([z.string(), z.null()]),
|
||||
seller_email: z.union([z.string(), z.null()]),
|
||||
footer_default: z.union([z.string(), z.null()]),
|
||||
notes_default: z.union([z.string(), z.null()]),
|
||||
tax_rate_default: z.union([z.number(), z.null()]),
|
||||
e_invoicing_enabled: z.boolean(),
|
||||
})
|
||||
.partial()
|
||||
.passthrough();
|
||||
const MemberResource = z
|
||||
.object({
|
||||
id: z.string(),
|
||||
@@ -238,14 +291,55 @@ const OrganizationResource = z
|
||||
billable_rate: z.union([z.number(), z.null()]),
|
||||
employees_can_see_billable_rates: z.boolean(),
|
||||
currency: z.string(),
|
||||
number_format: z.string(),
|
||||
currency_format: z.string(),
|
||||
date_format: z.string(),
|
||||
interval_format: z.string(),
|
||||
time_format: z.string(),
|
||||
})
|
||||
.passthrough();
|
||||
const NumberFormat = z.enum([
|
||||
'point-comma',
|
||||
'comma-point',
|
||||
'space-comma',
|
||||
'space-point',
|
||||
'apostrophe-point',
|
||||
]);
|
||||
const CurrencyFormat = z.enum([
|
||||
'iso-code-before-with-space',
|
||||
'iso-code-after-with-space',
|
||||
'symbol-before',
|
||||
'symbol-after',
|
||||
'symbol-before-with-space',
|
||||
'symbol-after-with-space',
|
||||
]);
|
||||
const DateFormat = z.enum([
|
||||
'point-seperated-d-m-yyyy',
|
||||
'slash-seperated-mm-dd-yyyy',
|
||||
'slash-seperated-dd-mm-yyyy',
|
||||
'hyphen-seperated-dd-mm-yyyy',
|
||||
'hyphen-seperated-mm-dd-yyyy',
|
||||
'hyphen-seperated-yyyy-mm-dd',
|
||||
]);
|
||||
const IntervalFormat = z.enum([
|
||||
'decimal',
|
||||
'hours-minutes',
|
||||
'hours-minutes-colon-seperated',
|
||||
'hours-minutes-seconds-colon-seperated',
|
||||
]);
|
||||
const TimeFormat = z.enum(['12-hours', '24-hours']);
|
||||
const OrganizationUpdateRequest = z
|
||||
.object({
|
||||
name: z.string().max(255),
|
||||
billable_rate: z.union([z.number(), z.null()]).optional(),
|
||||
employees_can_see_billable_rates: z.boolean().optional(),
|
||||
billable_rate: z.union([z.number(), z.null()]),
|
||||
employees_can_see_billable_rates: z.boolean(),
|
||||
number_format: NumberFormat,
|
||||
currency_format: CurrencyFormat,
|
||||
date_format: DateFormat,
|
||||
interval_format: IntervalFormat,
|
||||
time_format: TimeFormat,
|
||||
})
|
||||
.partial()
|
||||
.passthrough();
|
||||
const ProjectResource = z
|
||||
.object({
|
||||
@@ -656,12 +750,20 @@ export const schemas = {
|
||||
InvoiceStoreRequest,
|
||||
InvoiceEntryResource,
|
||||
DetailedInvoiceResource,
|
||||
InvoiceStatus,
|
||||
InvoiceUpdateRequest,
|
||||
InvoiceSettingResource,
|
||||
InvoiceSettingUpdateRequest,
|
||||
MemberResource,
|
||||
Role,
|
||||
MemberUpdateRequest,
|
||||
MemberMergeIntoRequest,
|
||||
OrganizationResource,
|
||||
NumberFormat,
|
||||
CurrencyFormat,
|
||||
DateFormat,
|
||||
IntervalFormat,
|
||||
TimeFormat,
|
||||
OrganizationUpdateRequest,
|
||||
ProjectResource,
|
||||
ProjectStoreRequest,
|
||||
@@ -1661,6 +1763,83 @@ const endpoints = makeApi([
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
method: 'get',
|
||||
path: '/v1/organizations/:organization/invoice-settings',
|
||||
alias: 'getInvoiceSettings',
|
||||
requestFormat: 'json',
|
||||
parameters: [
|
||||
{
|
||||
name: 'organization',
|
||||
type: 'Path',
|
||||
schema: z.string(),
|
||||
},
|
||||
],
|
||||
response: z.object({ data: InvoiceSettingResource }).passthrough(),
|
||||
errors: [
|
||||
{
|
||||
status: 401,
|
||||
description: `Unauthenticated`,
|
||||
schema: z.object({ message: z.string() }).passthrough(),
|
||||
},
|
||||
{
|
||||
status: 403,
|
||||
description: `Authorization error`,
|
||||
schema: z.object({ message: z.string() }).passthrough(),
|
||||
},
|
||||
{
|
||||
status: 404,
|
||||
description: `Not found`,
|
||||
schema: z.object({ message: z.string() }).passthrough(),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
method: 'put',
|
||||
path: '/v1/organizations/:organization/invoice-settings',
|
||||
alias: 'updateInvoiceSettings',
|
||||
requestFormat: 'json',
|
||||
parameters: [
|
||||
{
|
||||
name: 'body',
|
||||
type: 'Body',
|
||||
schema: InvoiceSettingUpdateRequest,
|
||||
},
|
||||
{
|
||||
name: 'organization',
|
||||
type: 'Path',
|
||||
schema: z.string(),
|
||||
},
|
||||
],
|
||||
response: z.object({ data: InvoiceSettingResource }).passthrough(),
|
||||
errors: [
|
||||
{
|
||||
status: 401,
|
||||
description: `Unauthenticated`,
|
||||
schema: z.object({ message: z.string() }).passthrough(),
|
||||
},
|
||||
{
|
||||
status: 403,
|
||||
description: `Authorization error`,
|
||||
schema: z.object({ message: z.string() }).passthrough(),
|
||||
},
|
||||
{
|
||||
status: 404,
|
||||
description: `Not found`,
|
||||
schema: z.object({ message: z.string() }).passthrough(),
|
||||
},
|
||||
{
|
||||
status: 422,
|
||||
description: `Validation error`,
|
||||
schema: z
|
||||
.object({
|
||||
message: z.string(),
|
||||
errors: z.record(z.array(z.string())),
|
||||
})
|
||||
.passthrough(),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
method: 'get',
|
||||
path: '/v1/organizations/:organization/invoices',
|
||||
|
||||
Reference in New Issue
Block a user