import React, { useEffect, useState } from 'react'; import DateRangeFilter from '../../components/Filters/DateRangeFilter'; import SummaryCard from '../../components/SummaryCard'; import '../../components/Filters/Filters.css'; import './Rejected.css'; import Table from '../../components/Table/HotelTable'; import axios from 'axios'; import { Link } from 'react-router-dom'; import { useContext } from 'react'; import { langContext } from '../../context/LenguageContext'; //**////** */ */ APROBADOS Y RECHAZADOS export default function Rejected() { const { lang } = useContext(langContext); const [rejectedExpenses, setRejectedExpenses] = useState([]); const [filteredExpenses, setFilteredExpenses] = useState([]); const [dateRange, setDateRange] = useState({ from: '', to: '' }); const [totalRejected, setTotalRejected] = useState(0); const [mainSupplier, setMainSupplier] = useState('N/A'); const [descriptionFilter, setDescriptionFilter] = useState(''); const [areaFilter, setAreaFilter] = useState(''); //Obtener lista de gastos rechazados useEffect(() => { axios.get(import.meta.env.VITE_API_BASE_URL + '/expenses/rejectedexpenses') .then((res) => { const formatted = res.data.data.map((item, index) => ({ id: index + 1, description: item.expense_description, requestDate: new Date(item.request_date).toISOString().split('T')[0], rejectedDate: new Date(item.reject_date).toISOString().split('T')[0], area: item.area, requestedBy: item.requested_by, amount: parseFloat(item.amount), supplier: 'N/A' })); setRejectedExpenses(formatted); setFilteredExpenses(formatted); }) .catch((err) => { console.error('❌ Error fetching rejected expenses:', err.message); }); }, []); //Obtener Total Rejected usando método GET correcto useEffect(() => { axios.post(import.meta.env.VITE_API_BASE_URL + '/expenses/totalapproved', { option: 2 }) .then((res) => { const total = parseFloat(res.data.data); setTotalRejected(isNaN(total) ? 0 : total); }) .catch((err) => { if (err.response) { console.error(`❌ Error ${err.response.status}: ${err.response.data.message}`); } else { console.error('❌ Error fetching total rejected amount:', err.message); } }); }, []); //Obtener proveedor principal useEffect(() => { axios.get(import.meta.env.VITE_API_BASE_URL + '/expenses/mainsupplier') .then((res) => { if (res.data.data.length > 0) { setMainSupplier(res.data.data[0].supplier); } }) .catch((err) => { if (err.response) { console.error(`❌ Error ${err.response.status}: ${err.response.data.message}`); } else { console.error('❌ Error fetching main supplier:', err.message); } }); }, []); useEffect(() => { let filtered = [...rejectedExpenses]; if (dateRange.from && dateRange.to) { const from = new Date(dateRange.from); const to = new Date(dateRange.to); filtered = filtered.filter((item) => { const itemDate = new Date(item.rejectedDate); return itemDate >= from && itemDate <= to; }); } if (descriptionFilter) { filtered = filtered.filter((item) => item.description?.toLowerCase().includes(descriptionFilter.toLowerCase()) ); } if (areaFilter) { filtered = filtered.filter((item) => item.area === areaFilter); } setFilteredExpenses(filtered); }, [dateRange, rejectedExpenses, descriptionFilter, areaFilter]); //Columnas de tabla const columns = [ { header: lang === "en" ? "EXPENSE DESCRIPTION" : "DESCRIPCIÓN DEL GASTO", key: 'description', render: (text, row) => ( {text} ), }, { header: lang === "en" ? "REQUEST DATE" : "FECHA DE SOLICITUD", key: 'requestDate' }, { header: lang === "en" ? "REJECTED DATE" : "FECHA DE RECHAZO", key: 'rejectedDate' }, { header: lang === "en" ? "AREA" : "ÁREA", key: 'area' }, { header: lang === "en" ? "REQUESTED BY" : "SOLICITADO POR", key: 'requestedBy' }, { header: lang === "en" ? "AMOUNT" : "IMPORTE", key: 'amount', render: (amount) => `$${amount.toLocaleString()}` }, { header: lang === "en" ? "STATUS" : "ESTADO", key: 'id', headerStyle: { textAlign: 'center' }, render: () => (
), }, ]; const uniqueAreas = [...new Set(rejectedExpenses.map(item => item.area).filter(Boolean))].sort(); const clearFilters = () => { setDateRange({ from: '', to: '' }); setDescriptionFilter(''); setAreaFilter(''); }; return (

{lang === "en" ? "Rejected Expenses" : "Gastos Rechazados"}

setDescriptionFilter(e.target.value)} className="filter-search" />

{lang === "en" ? "Main Supplier" : "Proveedor Principal"}

{mainSupplier}
); } // import React, { useEffect, useState } from 'react'; // import '../../components/Filters/Filters.css'; // import Table from '../../components/Table/HotelTable'; // import axios from 'axios'; // export default function Rejected() { // const [rejectedExpenses, setRejectedExpenses] = useState([]); // const [filteredExpenses, setFilteredExpenses] = useState([]); // const [dateRange, setDateRange] = useState({ from: '', to: '' }); // const [totalRejected, setTotalRejected] = useState(0); // const [mainSupplier, setMainSupplier] = useState('N/A'); // // ✅ Cargar lista de gastos rechazados // useEffect(() => { // axios.get(import.meta.env.VITE_API_BASE_URL + '/expenses/rejectedexpenses') // .then((res) => { // const formatted = res.data.data.map((item, index) => ({ // id: index + 1, // description: item.expense_description, // requestDate: new Date(item.request_date).toISOString().split('T')[0], // rejectedDate: new Date(item.reject_date).toISOString().split('T')[0], // area: item.area, // requestedBy: item.requested_by, // amount: parseFloat(item.amount), // supplier: 'N/A' // })); // setRejectedExpenses(formatted); // setFilteredExpenses(formatted); // }) // .catch((err) => { // console.error('Error fetching rejected expenses:', err); // }); // }, []); // // ✅ CORREGIDO: Método GET con parámetro en URL // useEffect(() => { // axios.get(import.meta.env.VITE_API_BASE_URL + '/expenses/totalapproved/2') // .then((res) => { // setTotalRejected(parseFloat(res.data.data)); // }) // .catch((err) => { // console.error('Error fetching total rejected amount:', err); // }); // }, []); // // ✅ Obtener Main Supplier // useEffect(() => { // axios.get(import.meta.env.VITE_API_BASE_URL + '/expenses/mainsupplier') // .then((res) => { // if (res.data.data.length > 0) { // setMainSupplier(res.data.data[0].supplier); // "Costco" // } // }) // .catch((err) => { // console.error('Error fetching main supplier:', err); // }); // }, []); // // ✅ Filtrar por fechas // useEffect(() => { // if (dateRange.from && dateRange.to) { // const from = new Date(dateRange.from); // const to = new Date(dateRange.to); // const filtered = rejectedExpenses.filter((item) => { // const itemDate = new Date(item.rejectedDate); // return itemDate >= from && itemDate <= to; // }); // setFilteredExpenses(filtered); // } else { // setFilteredExpenses(rejectedExpenses); // } // }, [dateRange, rejectedExpenses]); // const columns = [ // { // header: 'EXPENSE DESCRIPTION', // key: 'description', // render: (text) => {text}, // }, // { header: 'REQUEST DATE', key: 'requestDate' }, // { header: 'REJECTED DATE', key: 'rejectedDate' }, // { header: 'AREA', key: 'area' }, // { header: 'REQUESTED BY', key: 'requestedBy' }, // { // header: 'AMOUNT', // key: 'amount', // render: (amount) => `$${amount.toLocaleString()}` // }, // { // header: 'STATUS', // key: 'id', // render: () => ( // // ), // }, // ]; // return ( //
//

REJECTED

// {/* Filtros de fecha */} //
// setDateRange({ ...dateRange, from: e.target.value })} // /> // setDateRange({ ...dateRange, to: e.target.value })} // /> //
// {/* Summary Cards */} //
//
// Total Rejected //
${totalRejected.toLocaleString()}
//
//
// Main Supplier //
{mainSupplier}
//
//
// {/* Tabla */} //
// // ); // } // import React, { useEffect, useState } from 'react'; // import '../../components/Filters/Filters.css'; // import Table from '../../components/Table/HotelTable'; // import axios from 'axios'; // export default function Rejected() { // const [rejectedExpenses, setRejectedExpenses] = useState([]); // const [filteredExpenses, setFilteredExpenses] = useState([]); // const [dateRange, setDateRange] = useState({ from: '', to: '' }); // //Obtener datos reales desde el backend // useEffect(() => { // axios.get(import.meta.env.VITE_API_BASE_URL + '/expenses/rejectedexpenses') // .then((res) => { // const formatted = res.data.data.map((item, index) => ({ // id: index + 1, // temporal, ya que no viene `id_expense` // description: item.expense_description, // requestDate: new Date(item.request_date).toISOString().split('T')[0], // rejectedDate: new Date(item.reject_date).toISOString().split('T')[0], // area: item.area, // requestedBy: item.requested_by, // amount: parseFloat(item.amount), // supplier: 'N/A' // ❗ backend no envía proveedor // })); // setRejectedExpenses(formatted); // setFilteredExpenses(formatted); // }) // .catch((err) => { // console.error('Error fetching rejected expenses:', err); // }); // }, []); // //Filtrar por fechas // useEffect(() => { // if (dateRange.from && dateRange.to) { // const from = new Date(dateRange.from); // const to = new Date(dateRange.to); // const filtered = rejectedExpenses.filter((item) => { // const itemDate = new Date(item.rejectedDate); // return itemDate >= from && itemDate <= to; // }); // setFilteredExpenses(filtered); // } else { // setFilteredExpenses(rejectedExpenses); // } // }, [dateRange, rejectedExpenses]); // //Columnas de la tabla // const columns = [ // { // header: 'EXPENSE DESCRIPTION', // key: 'description', // render: (text) => {text}, // ❌ sin enlace por falta de ID // }, // { header: 'REQUEST DATE', key: 'requestDate' }, // { header: 'REJECTED DATE', key: 'rejectedDate' }, // { header: 'AREA', key: 'area' }, // { header: 'REQUESTED BY', key: 'requestedBy' }, // { // header: 'AMOUNT', // key: 'amount', // render: (amount) => `$${amount.toLocaleString()}` // }, // { // header: 'STATUS', // key: 'id', // render: () => ( // // ), // }, // ]; // //Cálculo de total rechazado // const totalAmount = filteredExpenses.reduce((sum, item) => sum + item.amount, 0); // //Proveedor principal (no aplica) // const mainSupplier = 'N/A'; // return ( //
//

REJECTED

// {/* Filtros de fecha */} //
// setDateRange({ ...dateRange, from: e.target.value })} // /> // setDateRange({ ...dateRange, to: e.target.value })} // /> //
// {/* Summary Cards */} //
//
// Total Rejected //
${totalAmount.toLocaleString()}
//
//
// Main Supplier //
{mainSupplier}
//
//
// {/* Tabla */} //
// // ); // }