From 1ae49656b95afdf43c336e2bdd15256dde874001 Mon Sep 17 00:00:00 2001 From: Julian Sandoval <76192811+Julian-Sandoval-x@users.noreply.github.com> Date: Sat, 1 Jun 2024 16:04:42 -0700 Subject: [PATCH 1/9] Estructura de funcion para obtener dias inhabiles de un empleado --- server/db/query/queryEmpleado.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/db/query/queryEmpleado.js b/server/db/query/queryEmpleado.js index de1058e9..543ba4e7 100644 --- a/server/db/query/queryEmpleado.js +++ b/server/db/query/queryEmpleado.js @@ -140,3 +140,16 @@ export async function getEmpFav(connection, data) { console.error(messageError, err); // Mostramos errores de query por consola } } + +export async function diasInhabiles(connection, data) { + try { + let diasInhabil = "CALL (?)"; + let query = mysql.format(diasInhabil, [data.idEmpleado]); + const [rows, fields] = await connection.query(query); + endConnection(); + return rows[0]; + } catch (err) { + // Capturamos errores de ejecucion de query + console.error(messageError, err); // Mostramos errores de query por consola + } +} From 02b4caa3a892074a84763c20401cf00df747c239 Mon Sep 17 00:00:00 2001 From: KrisG012 Date: Sun, 2 Jun 2024 03:10:52 -0700 Subject: [PATCH 2/9] =?UTF-8?q?Bot=C3=B3n=20comprar=20en=20carrito=20arreg?= =?UTF-8?q?lado=20para=20modo=20invitado=20y=20usuario.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/ui/Carrito.jsx | 28 ++++++++++++++++++++++++---- client/src/components/ui/Navbar.jsx | 2 +- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/client/src/components/ui/Carrito.jsx b/client/src/components/ui/Carrito.jsx index 0714b45e..391ed43f 100644 --- a/client/src/components/ui/Carrito.jsx +++ b/client/src/components/ui/Carrito.jsx @@ -84,9 +84,31 @@ export const useCarrito = () => useContext(CarritoContext); const Carrito = ({ cerrar, totalProductos, logCart, loginCart }) => { const { cartItems, eliminarDelCarrito, increaseQuantity, decreaseQuantity } = useCarrito(); + const [log, setLog] = useState(false); const navigate = useNavigate(); + async function recibido() { + const respuesta = await fetch("/api/logueado", { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + + if (!respuesta.ok) { + setLog(false); + } + + let respuestaJson = await respuesta.json(); + + if (respuestaJson.logueado == true) { + setLog(true); + } else { + setLog(false); + } + } + const enviarTotal = () => { const total = cartItems.reduce((total, item) => total + item.cantidad, 0); totalProductos(total); @@ -94,6 +116,7 @@ const Carrito = ({ cerrar, totalProductos, logCart, loginCart }) => { useEffect(() => { enviarTotal(); + recibido(); }, []) const handleComprar = () => { @@ -173,12 +196,9 @@ const Carrito = ({ cerrar, totalProductos, logCart, loginCart }) => {

Total:

${total} - - - )} diff --git a/client/src/components/ui/Navbar.jsx b/client/src/components/ui/Navbar.jsx index 0b0d6d72..3cc2d0ae 100644 --- a/client/src/components/ui/Navbar.jsx +++ b/client/src/components/ui/Navbar.jsx @@ -337,7 +337,7 @@ function Navbar() { {cart && (
- +
)} From b38dba4c19b8bb9dd033b679d372ef8d790b60f4 Mon Sep 17 00:00:00 2001 From: KrisG012 Date: Sun, 2 Jun 2024 04:14:10 -0700 Subject: [PATCH 3/9] =?UTF-8?q?Falta=20arreglar=20el=20bot=C3=B3n=20Compra?= =?UTF-8?q?r=20de=20todos=20los=20productos=20de=20Lista=20de=20Deseo.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/components/ui/Carrito.jsx | 7 +++---- .../src/components/ui/RevisionProductos.jsx | 2 +- client/src/pages/perfil/ListaDeseo.jsx | 20 +++++++++++++++++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/client/src/components/ui/Carrito.jsx b/client/src/components/ui/Carrito.jsx index 391ed43f..f7a21a0b 100644 --- a/client/src/components/ui/Carrito.jsx +++ b/client/src/components/ui/Carrito.jsx @@ -1,10 +1,9 @@ -import React, { useEffect, useState, createContext, useContext } from 'react'; +import { useEffect, useState, createContext, useContext } from 'react'; import { Rating } from '@mui/material'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faTrash, faCircleXmark, faCircleMinus, faCirclePlus } from '@fortawesome/free-solid-svg-icons'; -import PagoProducto from '../../pages/PagoProducto'; const CarritoContext = createContext(); -import { Navigate, useNavigate } from "react-router-dom"; +import { useNavigate } from "react-router-dom"; export const CarritoProvider = ({ children }) => { @@ -82,7 +81,7 @@ export const CarritoProvider = ({ children }) => { export const useCarrito = () => useContext(CarritoContext); -const Carrito = ({ cerrar, totalProductos, logCart, loginCart }) => { +const Carrito = ({ cerrar, totalProductos, logCart }) => { const { cartItems, eliminarDelCarrito, increaseQuantity, decreaseQuantity } = useCarrito(); const [log, setLog] = useState(false); diff --git a/client/src/components/ui/RevisionProductos.jsx b/client/src/components/ui/RevisionProductos.jsx index 368495f5..caba1e10 100644 --- a/client/src/components/ui/RevisionProductos.jsx +++ b/client/src/components/ui/RevisionProductos.jsx @@ -104,7 +104,7 @@ function RevisionProductos({ restart, producto, next }) { - ${item.precio.toFixed(2)} + ${Number(item.precio).toFixed(2)} diff --git a/client/src/pages/perfil/ListaDeseo.jsx b/client/src/pages/perfil/ListaDeseo.jsx index 3d645081..3593faee 100644 --- a/client/src/pages/perfil/ListaDeseo.jsx +++ b/client/src/pages/perfil/ListaDeseo.jsx @@ -362,7 +362,11 @@ function ListaDeseo() {

{producto.nombre}

- {producto.descripcion} + {producto.descripcion.length > 147 ? ( + producto.descripcion.substring(0, 147) + '...' + ):( + producto.descripcion + )}

@@ -384,6 +388,18 @@ function ListaDeseo() { )) + const handleComprarTodo = () => { + const contProducts = contResumen + .filter(producto => producto.tipoProducto === 'venta') + .map(producto => ({ + ...producto, + precio: typeof producto.precio === 'number' && !isNaN(producto.precio) + ? producto.precio + : 0 + })); + navigate('/spa/comprar', { state: { producto: [contProducts] } }); + }; + const precioTotal = contResumen .filter(producto => producto.tipoProducto === 'venta') .reduce((total, producto) => total + parseFloat(producto.precio), 0) @@ -501,7 +517,7 @@ function ListaDeseo() {
{log ? ( - Comprar + ) : ( )} From 0d001eb683e29c1876ae17461785c31799b56e51 Mon Sep 17 00:00:00 2001 From: Yahir Saavedra <51274659+yahirsaavedra@users.noreply.github.com> Date: Sun, 2 Jun 2024 10:47:57 -0700 Subject: [PATCH 4/9] =?UTF-8?q?Mensaje=20sobre=20continuaci=C3=B3n=20del?= =?UTF-8?q?=20proyecto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index edbc59be..7b351ac6 100644 --- a/README.md +++ b/README.md @@ -15,5 +15,12 @@

+# ⚠️ AVISO: Continuación del proyecto ⚠️ +Por cuestiones de tiempo y circunstancias en las que se desarrolló este proyecto, este código se archivó el día miércoles 5 de julio a las 20:00 hrs. y no será modificado en el futuro. + +Si deseas continuar con el proyecto o tomar plantillas del mismo, es necesario enviarme un correo a a21490577@itmexicali.edu.mx para darte las instrucciones correspondientes y los recursos que puedas necesitar. + +Muchas gracias. + # Licencia -El código íntegro de este proyecto se distribuye bajo la licencia de The Unlicense dado a que es un proyecto escolar. Algunas imagenes son propiedad de いらすとや (Irasutoya) o están distribuidas bajo licencias Creative Commons. +El código íntegro de este proyecto se distribuye bajo la licencia de The Unlicense dado a que es un proyecto escolar. Algunas imagenes son propiedad de Irasutoya o están distribuidas bajo licencias Creative Commons. From 75ccf9dc0cc97667f85385fdecd7542eea747a4a Mon Sep 17 00:00:00 2001 From: Yahir Saavedra <51274659+yahirsaavedra@users.noreply.github.com> Date: Sun, 2 Jun 2024 10:48:59 -0700 Subject: [PATCH 5/9] =?UTF-8?q?Correcci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b351ac6..c0880eed 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@
# ⚠️ AVISO: Continuación del proyecto ⚠️ -Por cuestiones de tiempo y circunstancias en las que se desarrolló este proyecto, este código se archivó el día miércoles 5 de julio a las 20:00 hrs. y no será modificado en el futuro. +Por cuestiones de tiempo y circunstancias en las que se desarrolló este proyecto, este código se archivó el día miércoles 5 de junio a las 20:00 hrs. y no será modificado en el futuro. Si deseas continuar con el proyecto o tomar plantillas del mismo, es necesario enviarme un correo a a21490577@itmexicali.edu.mx para darte las instrucciones correspondientes y los recursos que puedas necesitar. From cd0099ecb3f3ec2d3d5c6b6acd6b03c9ba967dfe Mon Sep 17 00:00:00 2001 From: Julian Sandoval <76192811+Julian-Sandoval-x@users.noreply.github.com> Date: Sun, 2 Jun 2024 13:19:52 -0700 Subject: [PATCH 6/9] Sustitucion de throw por un setTimeout en connection para evitar cierre de conexiones --- server/db/connection.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/db/connection.js b/server/db/connection.js index bfe60792..6c60e8e0 100644 --- a/server/db/connection.js +++ b/server/db/connection.js @@ -22,7 +22,8 @@ export async function enableConnect() { } catch (err) { // Capturamos error de conexion console.error("No pudo conectarse a la DB: ", err); // Mostramos error de conexion - throw err; // Tiramos el error para detener ejecucion + setTimeout(enableConnect, 1000); // Reintenta la conexion con la base de datos con un tiempo de espera de un segundo + // throw err; // Tiramos el error para detener ejecucion } } From 964efdc1c317c5bffa11aaf61d4acf1266dbb954 Mon Sep 17 00:00:00 2001 From: Julian Sandoval <76192811+Julian-Sandoval-x@users.noreply.github.com> Date: Sun, 2 Jun 2024 13:24:12 -0700 Subject: [PATCH 7/9] Mensaje de error en base a conexion con la base de datos --- server/db/connection.js | 1 + 1 file changed, 1 insertion(+) diff --git a/server/db/connection.js b/server/db/connection.js index 6c60e8e0..6b581c06 100644 --- a/server/db/connection.js +++ b/server/db/connection.js @@ -23,6 +23,7 @@ export async function enableConnect() { // Capturamos error de conexion console.error("No pudo conectarse a la DB: ", err); // Mostramos error de conexion setTimeout(enableConnect, 1000); // Reintenta la conexion con la base de datos con un tiempo de espera de un segundo + console.error(err); // throw err; // Tiramos el error para detener ejecucion } } From 58dc8fac070a5f182b4f8b5e1356c3882d1a24d9 Mon Sep 17 00:00:00 2001 From: Jorge Lopez <157444533+JorgeInge@users.noreply.github.com> Date: Sun, 2 Jun 2024 18:34:23 -0700 Subject: [PATCH 8/9] arreglos de pago cita y productos --- client/src/components/ui/Carrito.jsx | 3 + client/src/components/ui/Pago.jsx | 5 +- client/src/components/ui/PagoDeProducto.jsx | 10 +- .../src/components/ui/PagoDeSuscripcion.jsx | 13 +- client/src/components/ui/PagoRealizado.jsx | 21 ++- .../components/ui/PagoRealizadoProducto.jsx | 21 ++- client/src/components/ui/PagoRealizadoSus.jsx | 138 ++++++++---------- .../src/components/ui/RevisionSuscripcion.jsx | 3 + client/src/components/ui/TicketServicio.jsx | 3 +- client/src/pages/Cita.jsx | 18 +++ client/src/pages/perfil/Suscripciones.jsx | 5 +- server/routers/citas.js | 2 +- server/routers/productos.js | 17 +-- 13 files changed, 150 insertions(+), 109 deletions(-) diff --git a/client/src/components/ui/Carrito.jsx b/client/src/components/ui/Carrito.jsx index 0714b45e..cf3ffe76 100644 --- a/client/src/components/ui/Carrito.jsx +++ b/client/src/components/ui/Carrito.jsx @@ -8,6 +8,9 @@ import { Navigate, useNavigate } from "react-router-dom"; export const CarritoProvider = ({ children }) => { + localStorage.setItem('tarjeta',null) + localStorage.setItem('monedero',-1) + const [cartItems, setCartItems] = useState(() => { const savedCart = localStorage.getItem('cartItems'); return savedCart ? JSON.parse(savedCart) : []; diff --git a/client/src/components/ui/Pago.jsx b/client/src/components/ui/Pago.jsx index b5d4fc24..abd8a9a5 100644 --- a/client/src/components/ui/Pago.jsx +++ b/client/src/components/ui/Pago.jsx @@ -100,9 +100,10 @@ function Pago({ producto, next }) { } - const togglePago = (tarjeta) => { + const togglePago = (tarjeta,mone) => { setPagoRealizado(!pagoRealizado); localStorage.setItem('tarjeta', tarjeta); + localStorage.setItem('monedero', mone); } // const datosRecibidos = (nuevaTarjeta) => { // setTarjetas([...tarjetas, {id: 3, noTarjeta: {nuevaTarjeta}, tipo: "Débito", banco: "BBVA", code: "****"}]); @@ -125,7 +126,7 @@ function Pago({ producto, next }) {

{item.tipo}

{/*

{item.code}

*/}

****{item.numero_tarjeta.slice(0, 4)}

- + ))) : (
) return ( diff --git a/client/src/components/ui/PagoDeProducto.jsx b/client/src/components/ui/PagoDeProducto.jsx index 074e775c..3896f478 100644 --- a/client/src/components/ui/PagoDeProducto.jsx +++ b/client/src/components/ui/PagoDeProducto.jsx @@ -11,6 +11,7 @@ function Pago({ producto, next }) { const [Uid, setUid] = useState(null); const [descuento, setDescuento] = useState(''); const [monedero, setMonedero] = useState(null); + const [cartItems, setCartItems] = useState(() => { if (producto) { @@ -34,9 +35,9 @@ function Pago({ producto, next }) { const cantidadProductos = cartItems.reduce((sum, producto) => sum + producto.cantidad, 0); const subTotal = cartItems.reduce((acc, item) => acc + item.precio * item.cantidad, 0).toFixed(2); const ivaTotal = (parseFloat(subTotal) * 0.08).toFixed(2); - localStorage.setItem('totalIva',ivaTotal) const total = (parseFloat(subTotal) + parseFloat(ivaTotal)).toFixed(2); localStorage.setItem('total',total) + localStorage.setItem('subTotal',subTotal) useEffect(() => { @@ -111,9 +112,10 @@ function Pago({ producto, next }) { const toggleTarjeta = (tarj) => { setTarjeta(!tarjeta); } - const togglePago = (tarjeta) => { + const togglePago = (tarjeta,mone) => { setPagoRealizado(!pagoRealizado); localStorage.setItem('tarjeta', tarjeta); + localStorage.setItem('monedero', mone); } // const datosRecibidos = (nuevaTarjeta) => { // setTarjetas([...tarjetas, {id: 3, noTarjeta: {nuevaTarjeta}, tipo: "Débito", banco: "BBVA", code: "****"}]); @@ -131,7 +133,7 @@ function Pago({ producto, next }) {

{item.tipo}

{/*

{item.code}

*/}

{item.numero_tarjeta.slice(0, 4)}

- + ); } @@ -141,7 +143,7 @@ function Pago({ producto, next }) {

{item.monedero}

{item.tipo}

- + ); } diff --git a/client/src/components/ui/PagoDeSuscripcion.jsx b/client/src/components/ui/PagoDeSuscripcion.jsx index 1a079813..1c9d306b 100644 --- a/client/src/components/ui/PagoDeSuscripcion.jsx +++ b/client/src/components/ui/PagoDeSuscripcion.jsx @@ -22,7 +22,8 @@ function Pago({ producto, next }) { const puntos = localStorage.getItem('puntosSuscripcion'); const ivaTotal = (parseFloat(subTotal) * 0.08).toFixed(2); const total = (parseFloat(subTotal) + parseFloat(ivaTotal)).toFixed(2); - + localStorage.setItem('total',total) + localStorage.setItem('subTotal',subTotal) console.log(subTotal, puntos, ivaTotal, total); useEffect(() => { @@ -96,10 +97,12 @@ function Pago({ producto, next }) { const toggleTarjeta = () => { setTarjeta(!tarjeta); - localStorage.setItem('tarjeta', tarjeta); + } - const togglePago = () => { + const togglePago = (tarjeta,mone) => { setPagoRealizado(!pagoRealizado); + localStorage.setItem('tarjeta', tarjeta); + localStorage.setItem('monedero', mone); } // const datosRecibidos = (nuevaTarjeta) => { // setTarjetas([...tarjetas, {id: 3, noTarjeta: {nuevaTarjeta}, tipo: "Débito", banco: "BBVA", code: "****"}]); @@ -117,7 +120,7 @@ function Pago({ producto, next }) {

{item.tipo}

{/*

{item.code}

*/}

{item.numero_tarjeta.slice(0, 4)}

- + ); } @@ -127,7 +130,7 @@ function Pago({ producto, next }) {

{item.monedero}

{item.tipo}

- + ); } diff --git a/client/src/components/ui/PagoRealizado.jsx b/client/src/components/ui/PagoRealizado.jsx index fbabcaa0..ba989f3e 100644 --- a/client/src/components/ui/PagoRealizado.jsx +++ b/client/src/components/ui/PagoRealizado.jsx @@ -33,7 +33,21 @@ function PagoRealizado({ cerrarPago, total, next }) { useEffect(() => {//cuando se muestre el popup se realizara la venta y en consecuente la cita //se hara de esta forma para poderlo adaptar al uso de una api para cobrar const realizarVentaYCita = async () => { + if (cliente) { + let card; + let money; + + console.log(localStorage.getItem('monedero'),localStorage.getItem('tarjeta')) + + if(Number(localStorage.getItem('monedero'))>0){ + money=1 + card=null; + } + else if(localStorage.getItem('tarjeta')!==null){ + card=localStorage.getItem('tarjeta') + money=0; + } try { const responseVenta = await fetch("/api/admin/citas/venta", { method: "POST", @@ -41,8 +55,8 @@ function PagoRealizado({ cerrarPago, total, next }) { idCliente: cliente.ID, nombre: null, phone: null, - tarjeta: localStorage.getItem('tarjeta'), - monedero: 0, + tarjeta:card, + monedero:money, estadoPago: "pagada", subTotal: Number(localStorage.getItem('totalIva')), total: Number(localStorage.getItem('total')), @@ -61,9 +75,10 @@ function PagoRealizado({ cerrarPago, total, next }) { console.log('Respuesta de la venta:', dataVenta); - await fetch(`/api/admin/citas/idVentaCita/${cliente.ID}`) + await fetch(`/api/admin/citas/idVentaCita/${cliente.ID}/cita/${cliente.telefono}`) .then(response => response.json()) .then(data => { + console.log(data[0].pkIdVenta) localStorage.setItem('idventaCita',data[0].pkIdVenta); }) .catch(error => { diff --git a/client/src/components/ui/PagoRealizadoProducto.jsx b/client/src/components/ui/PagoRealizadoProducto.jsx index d5a7cfa4..ccabc55d 100644 --- a/client/src/components/ui/PagoRealizadoProducto.jsx +++ b/client/src/components/ui/PagoRealizadoProducto.jsx @@ -36,16 +36,30 @@ function PagoRealizado({ cerrarPago, total, next }) { useEffect(() => {//cuando se muestre el popup se realizara la venta y en consecuente la cita //se hara de esta forma para poderlo adaptar al uso de una api para cobrar + const realizarVentaYCita = async () => { if (cliente) { + let card; + let money; + + console.log(localStorage.getItem('monedero'),localStorage.getItem('tarjeta')) + + if(Number(localStorage.getItem('monedero'))>0){ + money=1 + card=null; + } + else if(localStorage.getItem('tarjeta')!==null){ + card=localStorage.getItem('tarjeta') + money=0; + } try { const responseVenta = await fetch("/api/admin/productos/createVentaProduct", { method: "POST", body: JSON.stringify({ idCliente: cliente.ID, - tarjeta: localStorage.getItem('tarjeta'), - monedero: 0, - subTotal: Number(localStorage.getItem('totalIva')), + tarjeta: card, + monedero: money, + subTotal: Number(localStorage.getItem('subTotal')), total: Number(localStorage.getItem('total')), impuesto: 18.00, }), @@ -104,6 +118,7 @@ function PagoRealizado({ cerrarPago, total, next }) { }; realizarVentaYCita(); + }, [cliente]); diff --git a/client/src/components/ui/PagoRealizadoSus.jsx b/client/src/components/ui/PagoRealizadoSus.jsx index 569be73d..7e7f15fe 100644 --- a/client/src/components/ui/PagoRealizadoSus.jsx +++ b/client/src/components/ui/PagoRealizadoSus.jsx @@ -1,5 +1,5 @@ import { useState, useEffect } from "react"; -import { jwtDecode } from "jwt-decode"; + function PagoRealizado({ cerrarPago, total, next }) { @@ -16,87 +16,73 @@ function PagoRealizado({ cerrarPago, total, next }) { - // useEffect(() => { - // const fetchCliente = async () => { - // const storedCliente = localStorage.getItem('cliente'); - // console.log(storedCliente) - // if (storedCliente) { - // try { - // const parsedCliente = JSON.parse(storedCliente); - // const { ID, Nombre, telefono, monedero } = parsedCliente; - // setCliente({ ID, Nombre, telefono, monedero }); - // } catch (error) { - // console.error("Error al parsear el cliente:", error); - // } - // } else { - // console.error("No se encontró el cliente en localStorage"); - // } - // }; - - // fetchCliente(); - // }, []); - - // useEffect(() => {//cuando se muestre el popup se realizara la venta y en consecuente la cita - // //se hara de esta forma para poderlo adaptar al uso de una api para cobrar - // const realizarVentaYCita = async () => { - // if (cliente) { - // try { - // const responseVenta = await fetch("/api/admin/productos/createVentaProduct", { - // method: "POST", - // body: JSON.stringify({ - // idCliente: cliente.ID, - // tarjeta: localStorage.getItem('tarjeta'), - // monedero: 0, - // subTotal: Number(localStorage.getItem('totalIva')), - // total: Number(localStorage.getItem('total')), - // impuesto: 18.00, - // }), - // headers: { - // "Content-Type": "application/json", - // }, - // }); - - // if (!responseVenta.ok) { - // throw new Error('Error en la respuesta de la red'); - // } - - // const dataVenta = await responseVenta.json(); - // console.log('Respuesta de la venta:', dataVenta); + useEffect(() => { + const fetchCliente = async () => { + const storedCliente = localStorage.getItem('cliente'); + console.log(storedCliente) + if (storedCliente) { + try { + const parsedCliente = JSON.parse(storedCliente); + const { ID, Nombre, telefono, monedero } = parsedCliente; + setCliente({ ID, Nombre, telefono, monedero }); + } catch (error) { + console.error("Error al parsear el cliente:", error); + } + } else { + console.error("No se encontró el cliente en localStorage"); + } + }; - // let carrito = JSON.parse(localStorage.getItem("cartItems")) || []; + fetchCliente(); + }, []); - // for (let index = 0; index < carrito.length; index++) { - // const responseCita = await fetch(`/api/admin/productos/detallesventa`, { - // method: "POST", - // body: JSON.stringify({ - // idCliente: cliente.ID, - // idPromo: 0, - // idProducto: carrito[index].id, - // cantidad: carrito[index].cantidad - // }), - // headers: { - // "Content-Type": "application/json", - // }, - // }); + useEffect(() => {//cuando se muestre el popup se realizara la venta y en consecuente la cita + //se hara de esta forma para poderlo adaptar al uso de una api para cobrar + const realizarVentaSus = async () => { + if (cliente) { + let card; + let money; + + console.log(localStorage.getItem('monedero'),localStorage.getItem('tarjeta')) + + if(Number(localStorage.getItem('monedero'))>0){ + money=1 + card=null; + } + else if(localStorage.getItem('tarjeta')!==null){ + card=localStorage.getItem('tarjeta') + money=0; + } + try { + const responseVenta = await fetch("/api/admin/venta/createVentaSus", { + method: "POST", + body: JSON.stringify({ + idCliente: cliente.ID, + tarjeta: card, + monedero: money + }), + headers: { + "Content-Type": "application/json", + }, + }); - // if (!responseCita.ok) { - // throw new Error('Error en la respuesta de la red'); - // } + if (!responseVenta.ok) { + throw new Error('Error en la respuesta de la red'); + } - // const dataVenta = await responseCita.json(); - // console.log('Respuesta de detallesVenta:', dataVenta); - // } + const dataVenta = await responseVenta.json(); + console.log('Respuesta de la venta:', dataVenta); - // setCargando(false); - // } catch (error) { - // console.error('Error en la venta o en la cita:', error); - // setCargando(false); - // } - // } - // }; + setCargando(false); + } catch (error) { + console.error('Error en la venta suscripcion:', error); + setCargando(false); + } + } + }; - // realizarVentaYCita(); - // }, [cliente]); + realizarVentaSus(); + }, [cliente]); diff --git a/client/src/components/ui/RevisionSuscripcion.jsx b/client/src/components/ui/RevisionSuscripcion.jsx index d31b1170..0f4eaaf8 100644 --- a/client/src/components/ui/RevisionSuscripcion.jsx +++ b/client/src/components/ui/RevisionSuscripcion.jsx @@ -13,6 +13,9 @@ function RevisionProductos({ restart }) { console.log(localStorage.getItem('puntosSuscripcion')) console.log(localStorage.getItem('totalSuscripcion')) + localStorage.setItem('tarjeta',null); + localStorage.setItem('monedero',-1); + // console.log(localStorage.getItem('puntosSuscripcion')) // console.log(localStorage.getItem('totalSuscripcion')) diff --git a/client/src/components/ui/TicketServicio.jsx b/client/src/components/ui/TicketServicio.jsx index 5cc27931..265923fc 100644 --- a/client/src/components/ui/TicketServicio.jsx +++ b/client/src/components/ui/TicketServicio.jsx @@ -12,7 +12,8 @@ const TicketServicio = () => { }; var numTicket = 123456; - var value =localStorage.getItem('idventaCita') + var value = localStorage.getItem('idventaCita') + var onImageDownload = () => { const svg = document.getElementById("QRCode"); diff --git a/client/src/pages/Cita.jsx b/client/src/pages/Cita.jsx index a55572ab..f89d0cd6 100644 --- a/client/src/pages/Cita.jsx +++ b/client/src/pages/Cita.jsx @@ -73,11 +73,21 @@ export default function Cita() { } }, [activeStep]); + useEffect(() => { + //cuando el usuario llegue al paso 4 se ajecutara + if (activeStep === 5) { + paso6(); + } + }, [activeStep]); + const paso4 = () => { agregadoCitas(); // se guardara su servicio en un array removeLSCitas(); //despues se eliminaran del localstorage para posteriormente volverlos a declarar // LocalBase() }; + const paso6 = () => { + removeLSPago(); + }; const restart = () => { setActiveStep(0); @@ -172,6 +182,14 @@ export default function Cita() { localStorage.removeItem("hora"); localStorage.removeItem("Fecha seleccionada"); localStorage.removeItem("NombreEspecialista"); + + + }; + + const removeLSPago = () => { + localStorage.removeItem("tarjeta"); + localStorage.removeItem("cliente"); + localStorage.removeItem("total"); }; const agregadoCitas = () => { const newProduct = { diff --git a/client/src/pages/perfil/Suscripciones.jsx b/client/src/pages/perfil/Suscripciones.jsx index 00804648..b40ea609 100644 --- a/client/src/pages/perfil/Suscripciones.jsx +++ b/client/src/pages/perfil/Suscripciones.jsx @@ -8,6 +8,7 @@ function Suscripciones() { const [correo, setCorreo] = useState(false); //<<< PARA EL INICIO DE SESION const [sus, setSus] = useState(false); //<<< PARA VERIFICAR SI ES MIEMBRO EL USUARIO + const [diaInicio,setDiaInicio] = useState(''); const [mesInicio,setMesInicio] = useState(''); const [semanaInicio,setSemanaInicio] = useState(''); @@ -33,7 +34,7 @@ function Suscripciones() { let respuestaJson = await respuesta.json(); if (respuestaJson.logueado == true) { - + if(respuestaJson.objeto_respuesta != false){ let ob = respuestaJson.objeto_respuesta; @@ -57,7 +58,7 @@ function Suscripciones() { } } - + useEffect(() => { recibido() diff --git a/server/routers/citas.js b/server/routers/citas.js index 48225c24..f0bbbbd5 100644 --- a/server/routers/citas.js +++ b/server/routers/citas.js @@ -246,7 +246,7 @@ routerCitas.get("/idVentaCita/:id/:tipo/:phone", async (req, res) => { const idventa = await searchVentaCita(conexion, { idCliente: req.params.id, tVenta:req.params.tipo, - phone: data.phone, + phone: req.params.phone, }); res.status(200).json(idventa); } catch (err) { diff --git a/server/routers/productos.js b/server/routers/productos.js index 395ad8bb..20a34383 100644 --- a/server/routers/productos.js +++ b/server/routers/productos.js @@ -325,13 +325,6 @@ routerProductos.get("/servicios/descuento/:id", async (req, res) => { routerProductos.post("/createVentaProduct", async (req, res) => { try { - // console.log(req.body.idCliente, - // req.body.tarjeta, - // req.body.monedero, - // req.body.subtotal, - // req.body.total, - // req.body.impuesto - // ) const resultado = await ventaProdOnline(conexion, { idCliente: req.body.idCliente, tarjeta: req.body.tarjeta, @@ -354,11 +347,11 @@ routerProductos.post("/createVentaProduct", async (req, res) => { routerProductos.post("/detallesventa", async (req, res) => { // Datos de prueba de cita - console.log(req.body.idCliente, - req.body.idProducto, - req.body.idPromo, - req.body.cantidad, -) +// console.log(req.body.idCliente, +// req.body.idProducto, +// req.body.idPromo, +// req.body.cantidad, +// ) const datosCita = { idCliente: req.body.idCliente, From 2b6803ffe8dda61c6caa3b4d2ba192eba39b51e3 Mon Sep 17 00:00:00 2001 From: Jorge Lopez <157444533+JorgeInge@users.noreply.github.com> Date: Sun, 2 Jun 2024 19:03:02 -0700 Subject: [PATCH 9/9] funcion dias F --- client/src/pages/perfil/Suscripciones.jsx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/client/src/pages/perfil/Suscripciones.jsx b/client/src/pages/perfil/Suscripciones.jsx index 1a1090ed..73d570a0 100644 --- a/client/src/pages/perfil/Suscripciones.jsx +++ b/client/src/pages/perfil/Suscripciones.jsx @@ -19,6 +19,7 @@ function Suscripciones() { const [diaFinal,setDiaFinal] = useState(''); const [mesFinal,setMesFinal] = useState(''); const [semanaFinal,setSemanaFinal] = useState(''); + const [disFaltantes,setdisFaltantes] = useState(''); async function recibido() { @@ -62,6 +63,20 @@ function Suscripciones() { } + //metodo para calcular los dias faltantes para que la suscripcion acabe +const calcularDiasFaltantes = async (fechaI, fechaF) => { + const fechaActual = new Date(); + + if (fechaF > fechaActual) { + const fechaInicio = new Date(fechaI); + const fechaFin = new Date(fechaF); + let diferencia = fechaFin.getTime() - fechaInicio.getTime(); + return diferencia / 1000 / 60 / 60 / 24; + } + + return 0; //si retorna 0 es que la fecha actual sobrepaso la fecha final o ya no esta vigente la sus + } + async function cancelarSuscripcion(){ const respuesta2 = await fetch('/api/delete/suscripcion',{ method:'DELETE',