import React, { useState, useEffect } from 'react'; import { Box, Typography, TextField, Button, CircularProgress, Alert, FormControl, InputLabel, Select, MenuItem } from '@mui/material'; import type { DistribuidorDto } from '../../models/dtos/Distribucion/DistribuidorDto'; import distribuidorService from '../../services/Distribucion/distribuidorService'; import type { EmpresaDto } from '../../models/dtos/Distribucion/EmpresaDto'; import empresaService from '../../services/Distribucion/empresaService'; interface SeleccionaReporteCuentasDistribuidoresProps { onGenerarReporte: (params: { idDistribuidor: number; idEmpresa: number; fechaDesde: string; fechaHasta: string; }) => Promise; onCancel: () => void; isLoading?: boolean; apiErrorMessage?: string | null; } const SeleccionaReporteCuentasDistribuidores: React.FC = ({ onGenerarReporte, isLoading, apiErrorMessage }) => { const [idDistribuidor, setIdDistribuidor] = useState(''); const [idEmpresa, setIdEmpresa] = useState(''); const [fechaDesde, setFechaDesde] = useState(new Date().toISOString().split('T')[0]); const [fechaHasta, setFechaHasta] = useState(new Date().toISOString().split('T')[0]); const [distribuidores, setDistribuidores] = useState([]); const [empresas, setEmpresas] = useState([]); const [loadingDropdowns, setLoadingDropdowns] = useState(false); const [localErrors, setLocalErrors] = useState<{ [key: string]: string | null }>({}); useEffect(() => { const fetchData = async () => { setLoadingDropdowns(true); try { const [distData, empData] = await Promise.all([ distribuidorService.getAllDistribuidores(), // Asume que este servicio existe empresaService.getAllEmpresas() // Asume que este servicio existe ]); setDistribuidores(distData.map(d => d)); // El servicio devuelve tupla setEmpresas(empData); } catch (error) { console.error("Error al cargar datos:", error); setLocalErrors(prev => ({ ...prev, dropdowns: 'Error al cargar distribuidores o empresas.' })); } finally { setLoadingDropdowns(false); } }; fetchData(); }, []); const validate = (): boolean => { const errors: { [key: string]: string | null } = {}; if (!idDistribuidor) errors.idDistribuidor = 'Debe seleccionar un distribuidor.'; if (!idEmpresa) errors.idEmpresa = 'Debe seleccionar una empresa.'; if (!fechaDesde) errors.fechaDesde = 'Fecha Desde es obligatoria.'; if (!fechaHasta) errors.fechaHasta = 'Fecha Hasta es obligatoria.'; if (fechaDesde && fechaHasta && new Date(fechaDesde) > new Date(fechaHasta)) { errors.fechaHasta = 'Fecha Hasta no puede ser anterior a Fecha Desde.'; } setLocalErrors(errors); return Object.keys(errors).length === 0; }; const handleGenerar = () => { if (!validate()) return; onGenerarReporte({ idDistribuidor: Number(idDistribuidor), idEmpresa: Number(idEmpresa), fechaDesde, fechaHasta }); }; return ( ParĂ¡metros: Cuenta Corriente Distribuidor Distribuidor {localErrors.idDistribuidor && {localErrors.idDistribuidor}} Empresa {localErrors.idEmpresa && {localErrors.idEmpresa}} { setFechaDesde(e.target.value); setLocalErrors(p => ({ ...p, fechaDesde: null, fechaHasta: null })); }} margin="normal" fullWidth required error={!!localErrors.fechaDesde} helperText={localErrors.fechaDesde} disabled={isLoading} InputLabelProps={{ shrink: true }} /> { setFechaHasta(e.target.value); setLocalErrors(p => ({ ...p, fechaHasta: null })); }} margin="normal" fullWidth required error={!!localErrors.fechaHasta} helperText={localErrors.fechaHasta} disabled={isLoading} InputLabelProps={{ shrink: true }} /> {apiErrorMessage && {apiErrorMessage}} {localErrors.dropdowns && {localErrors.dropdowns}} ); }; export default SeleccionaReporteCuentasDistribuidores;