import apiClient from '../apiClient'; import type { GenerarFacturacionResponseDto } from '../../models/dtos/Suscripciones/GenerarFacturacionResponseDto'; import type { PagoDto } from '../../models/dtos/Suscripciones/PagoDto'; import type { CreatePagoDto } from '../../models/dtos/Suscripciones/CreatePagoDto'; import type { ProcesamientoLoteResponseDto } from '../../models/dtos/Suscripciones/ProcesamientoLoteResponseDto'; import type { ResumenCuentaSuscriptorDto } from '../../models/dtos/Suscripciones/ResumenCuentaSuscriptorDto'; const API_URL = '/facturacion'; const DEBITOS_URL = '/debitos'; const PAGOS_URL = '/pagos'; const procesarArchivoRespuesta = async (archivo: File): Promise => { const formData = new FormData(); formData.append('archivo', archivo); const response = await apiClient.post(`${DEBITOS_URL}/procesar-respuesta`, formData, { headers: { 'Content-Type': 'multipart/form-data' }, }); return response.data; }; const getResumenesDeCuentaPorPeriodo = async (anio: number, mes: number, nombreSuscriptor?: string, estadoPago?: string, estadoFacturacion?: string): Promise => { const params = new URLSearchParams(); if (nombreSuscriptor) params.append('nombreSuscriptor', nombreSuscriptor); if (estadoPago) params.append('estadoPago', estadoPago); if (estadoFacturacion) params.append('estadoFacturacion', estadoFacturacion); const queryString = params.toString(); const url = `${API_URL}/${anio}/${mes}${queryString ? `?${queryString}` : ''}`; const response = await apiClient.get(url); return response.data; }; const generarFacturacionMensual = async (anio: number, mes: number): Promise => { const response = await apiClient.post(`${API_URL}/${anio}/${mes}`); return response.data; }; const generarArchivoDebito = async (anio: number, mes: number): Promise<{ fileContent: Blob, fileName: string }> => { const response = await apiClient.post(`${DEBITOS_URL}/${anio}/${mes}/generar-archivo`, {}, { responseType: 'blob', }); const contentDisposition = response.headers['content-disposition']; let fileName = `debito_${anio}_${mes}.txt`; if (contentDisposition) { const fileNameMatch = contentDisposition.match(/filename="(.+)"/); if (fileNameMatch && fileNameMatch.length > 1) { fileName = fileNameMatch[1]; } } return { fileContent: response.data, fileName: fileName }; }; const registrarPagoManual = async (data: CreatePagoDto): Promise => { const response = await apiClient.post(PAGOS_URL, data); return response.data; }; const actualizarNumeroFactura = async (idFactura: number, numeroFactura: string): Promise => { await apiClient.put(`${API_URL}/${idFactura}/numero-factura`, `"${numeroFactura}"`, { headers: { 'Content-Type': 'application/json' } }); }; const enviarAvisoCuentaPorEmail = async (anio: number, mes: number, idSuscriptor: number): Promise => { await apiClient.post(`${API_URL}/${anio}/${mes}/suscriptor/${idSuscriptor}/enviar-aviso`); }; const enviarFacturaPdfPorEmail = async (idFactura: number): Promise => { await apiClient.post(`${API_URL}/${idFactura}/enviar-factura-pdf`); }; export default { procesarArchivoRespuesta, getResumenesDeCuentaPorPeriodo, generarFacturacionMensual, generarArchivoDebito, registrarPagoManual, actualizarNumeroFactura, enviarAvisoCuentaPorEmail, enviarFacturaPdfPorEmail, };