Files
HoruxDespachosNuevo/apps/web/lib/api/declaraciones.ts

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);
}