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 { faMapLocationDot } from '@fortawesome/free-solid-svg-icons'; import { faPhoneAlt } from '@fortawesome/free-solid-svg-icons'; import { faHashtag } from '@fortawesome/free-solid-svg-icons'; import { faCircleQuestion } from '@fortawesome/free-solid-svg-icons'; const Communities = () => { const emptyCommunity = { _id: null, name: '', province: provinciaId, canton: cantonId, district: districtId, phone: '', num_houses: 0, status: '1', status_text: '', date_entry: new Date(), houses: [], }; const [communitiesList, setCommunitiesList] = useState([]); const [community, setCommunity] = useState(emptyCommunity); const [housesList, setHousesList] = useState([]); const [provincesList, setProvincesList] = useState([]); const [provinciaId, setProvinciaId] = useState(null); const [cantonsList, setCantonsList] = useState([]); const [cantonId, setCantonId] = useState(null); const [districtsList, setDistrictsList] = useState([]); const [districtId, setDistrictId] = useState(null); const [codeHouses, setCodeHouses] = useState(''); const [submitted, setSubmitted] = useState(false); const [saveButtonLabel, setSaveButtonLabel] = useState('Registrar'); const [selectedCommunities, setSelectedCommunities] = useState(null); const [globalFilter, setGlobalFilter] = useState(null); const [deleteCommunityDialog, setDeleteCommunityDialog] = useState(false); const [deleteCommunitiesDialog, setDeleteCommunitiesDialog] = useState(false); const [editCommunityDialog, setEditCommunityDialog] = useState(false); const toast = useRef(null); const dt = useRef(null); //para el perfil de la comunidad const [tenants, setTenants] = useState([]); const [communityDialog, setCommunityDialog] = useState(false); const p = provincesList.map((item) => ({ label: item.name, value: item.code, })); const c = cantonsList.map((item) => ({ label: item.name, value: item.code, parent: item.parentCode, })); const d = districtsList.map((item) => ({ label: item.name, value: item.code, parent: item.parentCode, })); async function getProvinces() { const response = await fetch('assets/demo/data/provincias.json', { method: 'GET', }); return await response.json(); } async function fillProvinces() { const getP = await getProvinces(); setProvincesList(await getP); } async function getCantons() { const response = await fetch('assets/demo/data/cantones.json', { method: 'GET', }); return await response.json(); } async function fillCantons() { const resJson = await getCantons(); const cantones = await resJson.filter((i, _n) => { return i.parentCode === provinciaId; }); setCantonsList(await cantones); } async function getDistricts() { const response = await fetch('assets/demo/data/distritos.json', { method: 'GET', }); return await response.json(); } async function fillDistricts() { const resJson = await getDistricts(); const districts = await resJson.filter((i, _n) => { return i.parentCode === cantonId; }); setDistrictsList(await districts); } useEffect(() => { fillProvinces(); }, []); useEffect(() => { fillCantons(); }, [provinciaId]); useEffect(() => { fillDistricts(); }, [cantonId]); const handleProvinces = (event) => { const getprovinciaId = event.target.value; setProvinciaId(getprovinciaId); }; const handleCanton = (event) => { const getCantonId = event.target.value; setCantonId(getCantonId); }; const handleDistrict = (event) => { const getDistrictId = event.target.value; setDistrictId(getDistrictId); }; const handleCodeHouses = (event) => { const getcodehouse = event.target.value; setCodeHouses(getcodehouse); }; async function getCommunites() { let response = await fetch( 'http://localhost:4000/community/allCommunities', { method: 'GET' }, ); let resJson = await response.json(); let pList = await getProvinces(); let cList = await getCantons(); let dList = await getDistricts(); let data = await resJson.message.filter((val) => val.status != -1); await data.map((item) => { if (item.status == '1') { item.status_text = 'Activo'; } else if (item.status == '0') { item.status_text = 'Inactivo'; } else { item.status_text = 'Eliminado'; } item.province = pList.find((p) => p.code === item.province).name; item.canton = cList.find((p) => p.code === item.canton).name; item.district = dList.find((p) => p.code === item.district).name; if (!item.id_admin) { item.name_admin = 'Sin Administrador'; } }); setCommunitiesList(await data); } useEffect(() => { getCommunites(); }, []); 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); setTenants(data); }); } useEffect(() => { tenantsList(community._id); }, []); const saveCommunity = () => { if ( community.name && community.num_houses > 0 && provinciaId && cantonId && districtId && community.phone ) { if (saveButtonLabel === 'Registrar') { let _communities = [...communitiesList]; let _community = { ...community }; _community.province = provinciaId; _community.canton = cantonId; _community.district = districtId; for (let i = 0; i < _community.num_houses; i++) { _community.houses.push({ number_house: codeHouses + (i + 1), }); } fetch('http://localhost:4000/community/createCommunity', { cache: 'no-cache', method: 'POST', body: JSON.stringify(_community), headers: { 'Content-Type': 'application/json', }, }) .then((response) => { if (response.status != 201) console.log('Ocurrió un error con el servicio: ' + response.status); else return response.json(); }) .then(() => { _community.province = provincesList.find( (p) => p.code === _community.province, ).name; _community.canton = cantonsList.find( (p) => p.code === _community.canton, ).name; _community.district = districtsList.find( (p) => p.code === _community.district, ).name; _communities.push(_community); toast.current.show({ severity: 'success', summary: 'Registro exitoso', detail: 'Comunidad de vivienda Creada', life: 3000, }); setCommunitiesList(_communities); setProvinciaId(''); setCantonId(''); setDistrictId(''); setCodeHouses(''); getCommunites(); setCommunity(emptyCommunity); }) .catch((err) => console.log('Ocurrió un error con el fetch', err)); } else { let _community = { ...community }; _community.province = provinciaId; _community.canton = cantonId; _community.district = districtId; console.log(`Actualizando comunidad: ${_community}`); fetch(`http://localhost:4000/community/updateCommunity/${community._id}`, { method: 'PUT', cache: 'no-cache', body: JSON.stringify(_community), headers: { 'Content-Type': 'application/json', } }).then((response) => { getCommunites(); if (response.status != 200) console.log('Ocurrió un error con el servicio: ' + response.status); else return response.json(); }).catch((err) => console.log('Ocurrió un error con el fetch', err)); setSaveButtonLabel('Registrar'); setCommunity(emptyCommunity); } } else { setSubmitted(true); } }; function findNameTenant(tenant_id) { let name = ''; if (tenant_id == '') { name = 'Sin inquilino'; } else { let tenant = tenants.find((t) => t._id == tenant_id); name = tenant['name'] + ' ' + tenant['last_name']; } return name; } const onInputChange = (e, name) => { const val = (e.target && e.target.value) || ''; let _community = { ...community }; _community[`${name}`] = val; setCommunity(_community); }; const hideCommunityDialog = () => { setSubmitted(false); setCommunityDialog(false); }; const hideDeleteCommunityDialog = () => { setDeleteCommunityDialog(false); }; const hideDeleteCommunitiesDialog = () => { setDeleteCommunitiesDialog(false); }; const confirmDeleteCommunity = (community) => { setCommunity(community); setDeleteCommunityDialog(true); }; const confirmDeleteSelected = () => { setDeleteCommunitiesDialog(true); }; const infoCommunity = async (community) => { await tenantsList(community._id); setCommunity({ ...community }); setCommunityDialog(true); }; const editCommunity = (community) => { setCommunity({ ...community }); setEditCommunityDialog(true); }; const hideEditCommunityDialog = () => { setEditCommunityDialog(false); }; const confirmEditCommunity = (community) => { setCommunity(community); setEditCommunityDialog(true); }; //desactivar o activar una comunidad const cambiarEstadoCommunity = () => { if (community.status == '1') { community.status = '0'; community.status_text = 'Inactivo'; } else if (community.status == '0') { community.status = '1'; community.status_text = 'Activo'; } var data = { id: community._id, status: community.status, }; fetch('http://localhost:4000/community/changeStatus', { cache: 'no-cache', method: 'POST', body: JSON.stringify(data), headers: { 'Content-Type': 'application/json', }, }) .then((response) => { if (response.status != 201) console.log('Ocurrió un error con el servicio: ' + response.status); else return response.json(); }) .then((_response) => { setEditCommunityDialog(false); toast.current.show({ severity: 'success', summary: 'Éxito', detail: 'Comunidad de Viviendas Actualizada', life: 3000, }); getCommunites(); }) .catch((err) => console.log('Ocurrió un error con el fetch', err)); }; const deleteCommunity = () => { fetch('http://localhost:4000/community/deleteCommunity/' + community._id, { cache: 'no-cache', method: 'DELETE', headers: { 'Content-Type': 'application/json', }, }) .then((response) => { if (response.status != 201) console.log('Ocurrió un error con el servicio: ' + response.status); else return response.json(); }) .then((_response) => { let _community = communitiesList.filter( (val) => val._id !== community._id, ); setCommunitiesList(_community); setDeleteCommunityDialog(false); setCommunity(emptyCommunity); toast.current.show({ severity: 'success', summary: 'Exito', detail: 'Comunidad de Viviendas Eliminada', life: 3000, }); }) .catch((err) => { console.log('Ocurrió un error con el fetch', err); toast.current.show({ severity: 'danger', summary: 'Error', detail: 'Comunidad de Viviendas no se pudo eliminar', life: 3000, }); }); let _communities = communitiesList.filter( (val) => val._id !== community._id, ); _communities = _communities.filter((val) => val.status != -1); setCommunitiesList(_communities); setDeleteCommunityDialog(false); setCommunity(emptyCommunity); toast.current.show({ severity: 'success', summary: 'Éxito', detail: 'Comunidad de Viviendas Eliminada', life: 3000, }); }; const deleteSelectedCommunities = () => { let _communities = communitiesList.filter( (val) => !selectedCommunities.includes(val), ); /* selectedCommunities.map((item) => { fetch('http://localhost:4000/user/deleteCommunity/' + item._id, { cache: 'no-cache', method: 'DELETE', headers: { 'Content-Type': 'application/json' } }) })*/ _communities = _communities.filter((val) => val.status != -1); setCommunitiesList(_communities); setDeleteCommunitiesDialog(false); setSelectedCommunities(null); toast.current.show({ severity: 'success', summary: 'Éxito', detail: 'Comunidades de Viviendas Eliminadas', life: 3000, }); }; const updateCommunity = (community) => { setCommunity(community); setSaveButtonLabel('Actualizar'); setHousesList(community.houses); }; const cancelEdit = () => { setCommunity(emptyCommunity); setCantonId(''); setHousesList([]); setProvinciaId(''); setDistrictId(''); setSaveButtonLabel('Registrar'); } const actionsCommunity = (rowData) => { let icono = ''; if (rowData.status == '0') { icono = 'pi pi-eye'; } else if (rowData.status == '1') { icono = 'pi pi-eye-slash'; } return (
); }; const leftToolbarTemplate = () => { return (
); }; const rightToolbarTemplate = () => { return (