import React, { useEffect, useState, useRef } from 'react'; import { InputText } from 'primereact/inputtext'; import { Button } from 'primereact/button'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Dropdown } from 'primereact/dropdown'; import { Toast } from 'primereact/toast'; import classNames from 'classnames'; import { Dialog } from 'primereact/dialog'; import { Toolbar } from 'primereact/toolbar'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faHome, faUserAlt } from '@fortawesome/free-solid-svg-icons'; import { faCircleQuestion } from '@fortawesome/free-solid-svg-icons'; import { faClockFour } from '@fortawesome/free-solid-svg-icons'; import { useCookies } from 'react-cookie'; const Reservations = () => { let emptyReservation = { _id: null, date: '', time: '', user_id: '', user_name: '', common_area_id: '', common_area_name: '', community_id: '', status: '1', status_text: '', date_entry: new Date(), }; const [reservations, setReservations] = useState([]); const [reservation, setReservation] = useState(emptyReservation); const [submitted, setSubmitted] = useState(false); const [selectedReservations, setSelectedReservations] = useState(null); const [globalFilter, setGlobalFilter] = useState(null); const [deleteReservationDialog, setDeleteReservationDialog] = useState(false); const [deleteReservationsDialog, setDeleteReservationsDialog] = useState(false); const toast = useRef(null); const dt = useRef(null); const [cookies, setCookies] = useCookies() const [areas, setAreas] = useState([]); const [area, setArea] = useState(); const [areaId, setAreaId] = useState(); const [tenants, setTenants] = useState([]); const [tenantId, setTenantId] = useState(); const [saveButtonTitle, setSaveButtonTitle] = useState("Registrar") const [reservationDialog, setReservationDialog] = useState(false); const [dateMax, setDateMax] = useState(); async function tenantsList(id) { await fetch(`http://localhost:4000/user/findTenants/${id}`, { method: 'GET' }) .then((response) => response.json()) .then(data => data.message) .then(data => { data = data.filter( (val) => val.status != -1, ) data = data.map(item => { item.password = ''; return item; }) setTenants(data) }); } async function areasList(id) { await fetch(`http://localhost:4000/commonArea/findByCommunity/${id}`, { method: 'GET' }) .then((response) => response.json()) .then(data => data.message) .then(data => { data = data.filter( (val) => val.status != -1 ) data = data.filter( (val) => val.bookable == 1, ) setAreas(data) }); } async function reservationList(id) { await fetch(`http://localhost:4000/reservation/findReservations/${id}`, { method: 'GET' }) .then((response) => response.json()) .then(data => data.message) .then(data => { data = data.filter( (val) => val.status != -1, ) data.map((item) => { item.date = formatDateString(item.date) if (item.status == '1') { item.status_text = 'Activo'; } else if (item.status == '0') { item.status_text = 'Inactivo'; } }) setReservations(data) }); } useEffect(() => { tenantsList(cookies.community_id); }, []) useEffect(() => { areasList(cookies.community_id); }, []) reservations.map((item) => { let tenant = tenants.find(item2 => item2._id == item.user_id); if (tenant) { item.user_name = tenant.name + ' ' + tenant.last_name; } }); useEffect(() => { reservationList(cookies.community_id); }, []) const saveReservation = () => { let _reservations = [...reservations]; let _reservation = { ...reservation }; if (_reservation.date && _reservation.time && tenantId && areaId && !validationTime() && !validationIsSameUser() && !validationIsReservation()) { _reservation.common_area_name = areas.find(item => item._id == areaId).name; let tenant = tenants.find(item => item._id == tenantId); _reservation.user_name = tenant.name + ' ' + tenant.last_name; _reservation.user_id = tenantId; _reservation.common_area_id = areaId; _reservation.community_id = cookies.community_id; _reservation.date = formatDateString(_reservation.date) if (_reservation.status == '1') { _reservation.status_text = 'Activo'; } else if (_reservation.status == '0') { _reservation.status_text = 'Inactivo'; } fetch('http://localhost:4000/reservation/createReservation/', { cache: 'no-cache', method: 'POST', body: JSON.stringify(_reservation), headers: { 'Content-Type': 'application/json' } }) .then((response) => { if (response.status !== 200 && response.status !== 201) console.log(`Hubo un error en el servicio: ${response.status}`) else return response.json() }).then(() => { _reservations.push(_reservation); setReservations(_reservations) toast.current.show({ severity: 'success', summary: 'Éxito', detail: 'Reservación realizada', life: 3000, }); setReservationDialog(false) setAreaId('') setTenantId('') }) } else { setSubmitted(true); } } const exportCSV = () => { // if (selectedReservations) { while (dt.current.props.value.length > 0) dt.current.props.value.pop(); let n=0; for (let n = 0; n < selectedReservations.length; n++){ dt.current.props.value.push(selectedReservations[n]); } } dt.current.exportCSV(); }; const actionsReservation = (rowData) => { return (
); }; const confirmDeleteReservation = (reservation) => { setReservation(reservation); setDeleteReservationDialog(true); }; const confirmDeleteSelected = () => { setDeleteReservationsDialog(true); }; const cancelEdit = () => { setReservation(emptyReservation); setSaveButtonTitle('Registrar'); setAreaId(''); setTenantId(''); } const hideNewReservationDialog = () => { setSubmitted(false); setReservationDialog(false); setReservation(emptyReservation); setAreaId(''); setTenantId(''); }; const openNewReservation = () => { setReservation(emptyReservation); setReservationDialog(true); setSubmitted(false); }; const leftToolbarTemplate = () => { return (
); }; const rightToolbarTemplate = () => { return (