88 lines
2.9 KiB
TypeScript
88 lines
2.9 KiB
TypeScript
import { apiClient } from './client';
|
|
|
|
export type Impuesto = 'IVA' | 'ISR' | 'IEPS' | 'SUELDOS' | 'DIOT' | 'OTRO';
|
|
export type Periodicidad = 'mensual' | 'bimestral' | 'trimestral' | 'semestral' | 'anual';
|
|
|
|
export interface Declaracion {
|
|
id: number;
|
|
año: number;
|
|
mes: number;
|
|
tipo: 'normal' | 'complementaria';
|
|
periodicidad: Periodicidad;
|
|
impuestos: Impuesto[];
|
|
montoPago: number | null;
|
|
pdfFilename: string | null;
|
|
ligaPagoFilename: string | null;
|
|
pdfPagoFilename: string | null;
|
|
pagadoAt: string | null;
|
|
creadoPor: string | null;
|
|
notas: string | null;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
tieneLigaPago: boolean;
|
|
tienePagoPdf: boolean;
|
|
}
|
|
|
|
export interface CreateDeclaracionData {
|
|
año: number;
|
|
mes: number;
|
|
tipo: 'normal' | 'complementaria';
|
|
periodicidad?: Periodicidad;
|
|
impuestos: Impuesto[];
|
|
montoPago?: number;
|
|
pdfBase64: string;
|
|
pdfFilename: string;
|
|
ligaPagoBase64?: string;
|
|
ligaPagoFilename?: string;
|
|
notas?: string;
|
|
contribuyenteId?: string;
|
|
}
|
|
|
|
export const listDeclaraciones = (fechaDesde?: string, fechaHasta?: string, contribuyenteId?: string | null) => {
|
|
const params = new URLSearchParams();
|
|
if (fechaDesde) params.set('fechaDesde', fechaDesde);
|
|
if (fechaHasta) params.set('fechaHasta', fechaHasta);
|
|
if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
|
|
return apiClient.get<Declaracion[]>(`/documentos/declaraciones?${params}`).then(r => r.data);
|
|
};
|
|
|
|
export const createDeclaracion = (data: CreateDeclaracionData) =>
|
|
apiClient.post<{ declaracion: Declaracion; alertasResueltas: number }>('/documentos/declaraciones', data).then(r => r.data);
|
|
|
|
export const uploadComprobantePago = (id: number, pdfBase64: string, pdfFilename: string) =>
|
|
apiClient.post<{ declaracion: Declaracion; alertasResueltas: number }>(
|
|
`/documentos/declaraciones/${id}/comprobante-pago`,
|
|
{ pdfBase64, pdfFilename },
|
|
).then(r => r.data);
|
|
|
|
export const deleteDeclaracion = (id: number) =>
|
|
apiClient.delete(`/documentos/declaraciones/${id}`).then(r => r.data);
|
|
|
|
export const downloadDeclaracionPdf = (id: number, variant: 'declaracion' | 'liga' | 'pago') =>
|
|
apiClient.get(`/documentos/declaraciones/${id}/pdf/${variant}`, { responseType: 'blob' }).then(r => r.data as Blob);
|
|
|
|
export function fileToBase64(file: File): Promise<string> {
|
|
return new Promise((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.onload = () => {
|
|
const result = reader.result as string;
|
|
// result format: "data:application/pdf;base64,..."
|
|
const base64 = result.split(',')[1] || '';
|
|
resolve(base64);
|
|
};
|
|
reader.onerror = reject;
|
|
reader.readAsDataURL(file);
|
|
});
|
|
}
|
|
|
|
export function downloadBlob(blob: Blob, filename: string) {
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = filename;
|
|
document.body.appendChild(a);
|
|
a.click();
|
|
a.remove();
|
|
URL.revokeObjectURL(url);
|
|
}
|