feat(core): add system settings, currency, tax, sequence API hooks
This commit is contained in:
@@ -553,3 +553,175 @@ export function useDeleteRole() {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════
|
||||
// System Settings, Currency, Tax, Sequence hooks
|
||||
// ═══════════════════════════════════════════════════════════════
|
||||
|
||||
export interface Currency {
|
||||
id: string;
|
||||
code: string;
|
||||
name: string;
|
||||
symbol: string;
|
||||
is_default: boolean;
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
}
|
||||
|
||||
export interface TaxRate {
|
||||
id: string;
|
||||
name: string;
|
||||
rate: number;
|
||||
is_default: boolean;
|
||||
country?: string | null;
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
}
|
||||
|
||||
export interface Sequence {
|
||||
id: string;
|
||||
name: string;
|
||||
prefix: string;
|
||||
next_number: number;
|
||||
padding: number;
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
}
|
||||
|
||||
export interface SystemSettings {
|
||||
id?: string;
|
||||
company_name: string;
|
||||
company_legal_form?: string | null;
|
||||
company_street: string;
|
||||
company_city: string;
|
||||
company_zip: string;
|
||||
company_country: string;
|
||||
tax_number?: string | null;
|
||||
vat_id?: string | null;
|
||||
iban?: string | null;
|
||||
bic?: string | null;
|
||||
bank_name?: string | null;
|
||||
ceo?: string | null;
|
||||
trade_register?: string | null;
|
||||
default_currency_id?: string | null;
|
||||
default_tax_id?: string | null;
|
||||
invoice_prefix: string;
|
||||
quote_prefix: string;
|
||||
payment_terms_days: number;
|
||||
created_at?: string;
|
||||
updated_at?: string;
|
||||
}
|
||||
|
||||
// System Settings
|
||||
export function useSystemSettings() {
|
||||
return useQuery({
|
||||
queryKey: ['systemSettings'],
|
||||
queryFn: () => apiGet<SystemSettings>('/system-settings'),
|
||||
});
|
||||
}
|
||||
|
||||
export function useUpdateSystemSettings() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (data: Partial<SystemSettings>) => apiClient.put('/system-settings', data).then(r => r.data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['systemSettings'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Currencies
|
||||
export function useCurrencies() {
|
||||
return useQuery({
|
||||
queryKey: ['currencies'],
|
||||
queryFn: () => apiGet<{ items: Currency[]; total: number }>('/currencies'),
|
||||
});
|
||||
}
|
||||
|
||||
export function useCreateCurrency() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (data: Partial<Currency>) => apiPost('/currencies', data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['currencies'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useUpdateCurrency() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: ({ id, data }: { id: string; data: Partial<Currency> }) =>
|
||||
apiPatch(`/currencies/${id}`, data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['currencies'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useDeleteCurrency() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (id: string) => apiDelete(`/currencies/${id}`),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['currencies'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Taxes
|
||||
export function useTaxes() {
|
||||
return useQuery({
|
||||
queryKey: ['taxes'],
|
||||
queryFn: () => apiGet<{ items: TaxRate[]; total: number }>('/taxes'),
|
||||
});
|
||||
}
|
||||
|
||||
export function useCreateTax() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (data: Partial<TaxRate>) => apiPost('/taxes', data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['taxes'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useUpdateTax() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: ({ id, data }: { id: string; data: Partial<TaxRate> }) =>
|
||||
apiPatch(`/taxes/${id}`, data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['taxes'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function useDeleteTax() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (id: string) => apiDelete(`/taxes/${id}`),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['taxes'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Sequences
|
||||
export function useSequences() {
|
||||
return useQuery({
|
||||
queryKey: ['sequences'],
|
||||
queryFn: () => apiGet<{ items: Sequence[]; total: number }>('/sequences'),
|
||||
});
|
||||
}
|
||||
|
||||
export function useCreateSequence() {
|
||||
const queryClient = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: (data: Partial<Sequence>) => apiPost('/sequences', data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['sequences'] });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user