ReactOptica / src /Prescripcion.jsx
3v324v23's picture
despliegue
19f9ce5
import { useEffect, useState } from "react";
import { actualizarPut, cargarApi, obtenerEspecifico, registrarPost } from "./lib/conexionApi";
import Modal from "./components/Modal";
import ModalPrescripcion from "./components/ModalPrescripcion";
import TablaMedidas from "./components/TablaMedidas";
import BarraBusquedaCliente from "./components/BarraBusquedaCliente";
import DatosCliente from "./components/DatosCliente";
import { Navigate } from "react-router-dom";
import ErrorMessage from "./components/ErrorMessage";
const fecha = new Date();
let dia = fecha.getDate();
let mes = fecha.getMonth() + 1; // Los meses en JavaScript empiezan desde 0
let año = fecha.getFullYear();
// Asegurándose de que el día y el mes sean de dos dígitos
if (dia < 10) dia = '0' + dia;
if (mes < 10) mes = '0' + mes;
const fechaFormateada = dia + '/' + mes + '/' + año;
export const Prescripcion = () => {
// States para la búsqueda de clientes
const [clienteBusqueda, setClienteBusqueda] = useState("");
const [btnBuscarClick, setBtnBuscarClick] = useState(false);
const [clientes, setClientes] = useState([]);
const [cliente, setCliente] = useState({});
const [openModal, setOpenModal] = useState(false);
const [openModalPrescripcion, setOpenModalPrescripcion] = useState(false)
// States para medidas
const [medidas, setMedidas] = useState([]);
const [medidasEncontradas, setMedidasEncontradas] = useState(false);
const [asignacionNuevasMedidas, setAsignacionNuevasMedidas] = useState(false)
const [actualizacionMedidas, setActualizacionMedidas] = useState(false)
// lejos
const [esferaODlejos, setEsferaODLejos] = useState(0);
const [cilindroODlejos, setCilindroODlejos] = useState(0);
const [ejeODlejos, setEjeODlejos] = useState(0);
const [agudezavisualODlejos, setAgudezavisualODlejos] = useState(0);
const [esferaOIlejos, setEsferaOIlejos] = useState(0);
const [cilindroOIlejos, setCilindroOIlejos] = useState(0);
const [ejeOIlejos, setEjeOIlejos] = useState(0);
const [agudezavisualOIlejos, setAgudezavisualOIlejos] = useState(0);
// cerca
const [esferaODcerca, setEsferaODcerca] = useState(0);
const [cilindroODcerca, setCilindroODcerca] = useState(0);
const [ejeODcerca, setEjeODcerca] = useState(0);
const [agudezavisualODcerca, setAgudezavisualODcerca] = useState(0);
const [esferaOIcerca, setEsferaOIcerca] = useState(0);
const [cilindroOIcerca, setCilindroOIcerca] = useState(0);
const [ejeOIcerca, setEjeOIcerca] = useState(0);
const [agudezavisualOIcerca, setAgudezavisualOIcerca] = useState(0);
// States para crear nuevo cliente
const [nombresYApellidos, setNombresYApellidos] = useState("");
const [edad, setEdad] = useState("");
const [telefono, setTelefono] = useState("");
const [direccion, setDireccion] = useState("");
// States para crear nueva prescripción
const [notaAdicional, setNotaAdicional] = useState("");
const [prescripcionLista, setPrescripcionLista] = useState(false)
const [prescripcionRegistrada, setPrescripcionRegistrada] = useState(false)
// errores
const [error, setError] = useState(false)
useEffect(() => {
cargarApi()
}, []);
useEffect(() => {
if (btnBuscarClick) {
obtenerEspecifico(
"clientes/busqueda",
{ nombres_y_apellidos: clienteBusqueda },
setClientes, setError
);
} else return;
}, [btnBuscarClick]);
useEffect(() => {
if (Object.keys(cliente).length !== 0 || asignacionNuevasMedidas) {
obtenerEspecifico(
"medidas/busqueda",
{ "id_cliente": parseInt(cliente["id_cliente"]) },
setMedidas, setError
);
console.log('medidas encontradas');
} else return;
}, [cliente, asignacionNuevasMedidas]);
useEffect(() => {
if (Object.keys(cliente).length !== 0 || actualizacionMedidas) {
obtenerEspecifico(
"medidas/busqueda",
{ "id_cliente": parseInt(cliente["id_cliente"]) },
setMedidas, setError
);
console.log('medidas encontradas');
} else return
}, [actualizacionMedidas])
useEffect(() => {
if (medidas.length !== 0) {
setMedidasEncontradas(true);
setEsferaODLejos(medidas[0]["Esfera_OD_lejos"]);
setCilindroODlejos(medidas[0]["Cilindro_OD_lejos"]);
setEjeODlejos(medidas[0]["Eje_OD_lejos"]);
setAgudezavisualODlejos(medidas[0]["Agudeza_visual_OD_lejos"]);
setEsferaOIlejos(medidas[0]["Esfera_OI_lejos"]);
setCilindroOIlejos(medidas[0]["Cilindro_OI_lejos"]);
setEjeOIlejos(medidas[0]["Eje_OI_lejos"]);
setAgudezavisualOIlejos(medidas[0]["Agudeza_visual_OI_lejos"]);
setEsferaODcerca(medidas[0]["Esfera_OD_cerca"]);
setCilindroODcerca(medidas[0]["Cilindro_OD_cerca"]);
setEjeODcerca(medidas[0]["Eje_OD_cerca"]);
setAgudezavisualODcerca(medidas[0]["Agudeza_visual_OD_cerca"]);
setEsferaOIcerca(medidas[0]["Esfera_OI_cerca"]);
setCilindroOIcerca(medidas[0]["Cilindro_OI_cerca"]);
setEjeOIcerca(medidas[0]["Eje_OI_cerca"]);
setAgudezavisualOIcerca(medidas[0]["Agudeza_visual_OI_cerca"]);
} else {
setMedidasEncontradas(false);
setEsferaODLejos(0);
setCilindroODlejos(0);
setEjeODlejos(0);
setAgudezavisualODlejos(0);
setEsferaOIlejos(0);
setCilindroOIlejos(0);
setEjeOIlejos(0);
setAgudezavisualOIlejos(0);
setEsferaODcerca(0);
setCilindroODcerca(0);
setEjeODcerca(0);
setAgudezavisualODcerca(0);
setEsferaOIcerca(0);
setCilindroOIcerca(0);
setEjeOIcerca(0);
setAgudezavisualOIcerca(0);
}
}, [medidas]);
const handleButtonBuscarCliente = (e) => {
e.preventDefault();
if (clienteBusqueda !== "") {
setBtnBuscarClick(true);
} else setBtnBuscarClick(false);
//console.log(clientes);
};
const handleSubmitEmitirPrescripcion = (e) => {
e.preventDefault()
if (Object.keys(cliente).length !== 0) {
const nuevoMonturas = {
"Esfera_OD_lejos": parseFloat(esferaODlejos),
"Cilindro_OD_lejos": parseFloat(cilindroODlejos),
"Eje_OD_lejos": parseFloat(ejeODlejos),
"Agudeza_visual_OD_lejos": parseFloat(agudezavisualODlejos),
"Esfera_OI_lejos": parseFloat(esferaOIlejos),
"Cilindro_OI_lejos": parseFloat(cilindroOIlejos),
"Eje_OI_lejos": parseFloat(ejeOIlejos),
"Agudeza_visual_OI_lejos": parseFloat(agudezavisualOIlejos),
"Esfera_OD_cerca": parseFloat(esferaODcerca),
"Cilindro_OD_cerca": parseFloat(cilindroODcerca),
"Eje_OD_cerca": parseFloat(ejeODcerca),
"Agudeza_visual_OD_cerca": parseFloat(agudezavisualODcerca),
"Esfera_OI_cerca": parseFloat(esferaOIcerca),
"Cilindro_OI_cerca": parseFloat(cilindroOIcerca),
"Eje_OI_cerca": parseFloat(ejeOIcerca),
"Agudeza_visual_OI_cerca": parseFloat(agudezavisualOIcerca),
"id_cliente": cliente["id_cliente"],
};
if (!medidasEncontradas ) {
registrarPost('medidas', nuevoMonturas)
console.log('medidas registradas');
setAsignacionNuevasMedidas(true)
console.log('medidas encontradas');
} else {
if (medidas.length !== 0) {
const actualizarMonturas = {
"id_medidas": medidas[0]["id_medidas"],
"Esfera_OD_lejos": parseFloat(esferaODlejos),
"Cilindro_OD_lejos": parseFloat(cilindroODlejos),
"Eje_OD_lejos": parseFloat(ejeODlejos),
"Agudeza_visual_OD_lejos": parseFloat(agudezavisualODlejos),
"Esfera_OI_lejos": parseFloat(esferaOIlejos),
"Cilindro_OI_lejos": parseFloat(cilindroOIlejos),
"Eje_OI_lejos": parseFloat(ejeOIlejos),
"Agudeza_visual_OI_lejos": parseFloat(agudezavisualOIlejos),
"Esfera_OD_cerca": parseFloat(esferaODcerca),
"Cilindro_OD_cerca": parseFloat(cilindroODcerca),
"Eje_OD_cerca": parseFloat(ejeODcerca),
"Agudeza_visual_OD_cerca": parseFloat(agudezavisualODcerca),
"Esfera_OI_cerca": parseFloat(esferaOIcerca),
"Cilindro_OI_cerca": parseFloat(cilindroOIcerca),
"Eje_OI_cerca": parseFloat(ejeOIcerca),
"Agudeza_visual_OI_cerca": parseFloat(agudezavisualOIcerca),
"id_cliente": cliente["id_cliente"],
};
actualizarPut("medidas",actualizarMonturas)
setActualizacionMedidas(true)
}
}
}
setOpenModalPrescripcion(true)
console.log('submit');
}
return (
<div className=" w-3/5 flex flex-row my-5 p-5 h-auto">
<div className="w-2/5">
{(btnBuscarClick && error) && <ErrorMessage mensaje={'No se encontraron resultados'}/>}
<div className=" flex flex-row">
<div className="w-full pr-5">
{/* BARRA DE BÚSQUEDA DE CLIENTE */}
<BarraBusquedaCliente
clienteBusqueda = {clienteBusqueda}
setClienteBusqueda = {setClienteBusqueda}
setBtnBuscarClick = {setBtnBuscarClick}
setAsignacionNuevasMedidas = {setAsignacionNuevasMedidas}
handleButtonBuscarCliente = {handleButtonBuscarCliente}
setError = {setError}
/>
{/* DROPDOWN DE CLIENTES ENCONTRADOS */}
{clientes && clienteBusqueda !== "" && btnBuscarClick !== false
? <ul>
{clientes.map((cli) => {
return (
<li
key={cli["id_cliente"]}
onClick={() => {
setBtnBuscarClick(false);
setClienteBusqueda("");
setCliente(cli);
setNotaAdicional("");
}}
className="cursor-pointer hover:font-semibold hover:bg-slate-50 p-2 "
>
<p>{cli["nombres_y_apellidos"]}</p>
<p className="text-sm text-slate-400">{cli["edad"]}</p>
<p className="text-sm text-slate-400">{cli["telefono"]}</p>
<p className="text-sm text-slate-400">{cli["direccion"]}</p>
</li>
);
})}
</ul>
: ""}
</div>
<svg
xmlns="http://www.w3.org/2000/svg"
className="icon icon-tabler icon-tabler-user-plus cursor-pointer hover:stroke-slate-800 mr-5"
width="40"
height="40"
viewBox="0 0 24 24"
strokeWidth="2.5"
stroke="#334155"
fill="none"
strokeLinecap="round"
strokeLinejoin="round"
/* ABRIR MODAL PARA AGREGAR CLIENTE */
onClick={() => {
console.log("agregar");
setOpenModal(true);
}}
>
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0" />
<path d="M16 19h6" />
<path d="M19 16v6" />
<path d="M6 21v-2a4 4 0 0 1 4 -4h4" />
</svg>
</div>
</div>
{/* MOSTRAR CLIENTE SELECCIONADO */}
{Object.keys(cliente).length !== 0 ? (
<form onSubmit={handleSubmitEmitirPrescripcion} className="px-5 flex flex-col w-3/5 h-full pb-5 border-l-2">
<DatosCliente
cliente={cliente}
notaAdicional={notaAdicional}
setNotaAdicional={setNotaAdicional}
/>
{!medidasEncontradas && (
<p className="mt-5 text-center text-xl text-gray-500">
Llena las medidas del nuevo cliente
</p>
)}
<TablaMedidas
esferaODlejos={esferaODlejos}
setEsferaODLejos={setEsferaODLejos}
cilindroODlejos={cilindroODlejos}
setCilindroODlejos={setCilindroODlejos}
ejeODlejos={ejeODlejos}
setEjeODlejos={setEjeODlejos}
agudezavisualODlejos={agudezavisualODlejos}
setAgudezavisualODlejos={setAgudezavisualODlejos}
esferaOIlejos={esferaOIlejos}
setEsferaOIlejos={setEsferaOIlejos}
cilindroOIlejos={cilindroOIlejos}
setCilindroOIlejos={setCilindroOIlejos}
ejeOIlejos={ejeOIlejos}
setEjeOIlejos={setEjeOIlejos}
agudezavisualOIlejos={agudezavisualOIlejos}
setAgudezavisualOIlejos={setAgudezavisualOIlejos}
esferaODcerca={esferaODcerca}
setEsferaODcerca={setEsferaODcerca}
cilindroODcerca={cilindroODcerca}
setCilindroODcerca={setCilindroODcerca}
ejeODcerca={ejeODcerca}
setEjeODcerca={setEjeODcerca}
agudezavisualODcerca={agudezavisualODcerca}
setAgudezavisualODcerca={setAgudezavisualODcerca}
esferaOIcerca={esferaOIcerca}
setEsferaOIcerca={setEsferaOIcerca}
cilindroOIcerca={cilindroOIcerca}
setCilindroOIcerca={setCilindroOIcerca}
ejeOIcerca={ejeOIcerca}
setEjeOIcerca={setEjeOIcerca}
agudezavisualOIcerca={agudezavisualOIcerca}
setAgudezavisualOIcerca={setAgudezavisualOIcerca}
/>
<button type="submit" className="rounded-md w-full py-3 mt-10 bg-slate-700 hover:bg-slate-800 text-white font-semibold uppercase ">
Emitir Prescripción
</button>
</form>
) : (
<div className="px-5 flex flex-col w-3/5 h-full pb-20 border-l-2">
<p className="text-gray-400 text-2xl font-semibold">
No se ha seleccionado ningún cliente
</p>
</div>
)}
{openModal && (
<Modal
openModal={openModal}
setOpenModal={setOpenModal}
nombresYApellidos={nombresYApellidos}
setNombresYApellidos={setNombresYApellidos}
edad={edad}
setEdad={setEdad}
telefono={telefono}
setTelefono={setTelefono}
direccion={direccion}
setDireccion={setDireccion}
setError={setError}
setClienteBusqueda={setClienteBusqueda}
/>
)}
{openModalPrescripcion && (
<ModalPrescripcion
setOpenModalPrescripcion={setOpenModalPrescripcion}
setPrescripcionLista={setPrescripcionLista}
cliente={cliente}
medidas={medidas}
fechaFormateada={fechaFormateada}
notaAdicional={notaAdicional}
setActualizacionMedidas={setActualizacionMedidas}
setAsignacionNuevasMedidas={setAsignacionNuevasMedidas}
setPrescripcionRegistrada={setPrescripcionRegistrada}
/>
)}
{prescripcionRegistrada && (
<Navigate to="/catalogo" replace={true} />
)}
</div>
);
}