import React, { useState} from "react"; import axios, { HttpStatusCode } from "axios"; import { Link } from "react-router-dom"; import { ToastContainer, toast } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; import { handleSendMail1 } from "./HandleSendMail"; import SignaturePad from "./firmaCanvas"; const fechaActual = () => { const now = new Date(); now.setMinutes(now.getMinutes() - now.getTimezoneOffset()); return now.toISOString().split('T')[0]; } const horaActual = () => { return new Date().getHours() + ":" + new Date().getMinutes() + ":" + new Date().getSeconds(); } const ServiceForm = () => { const [clienteId, setClienteId] = useState(null); // Nuevo estado para almacenar clienteId const [formData, setFormData] = useState({ nombreCliente: "", correoCliente: "", nombreContacto: "", numero: "", direccion: "", barrio: "", ciudad: "", fecha: fechaActual(), horaInicio: horaActual(), horaFin: "", tipoServicio: "", tipoContrato: "", serialEquipo: "", contadorNegro: "", contadorColor: "", cantidad: "", descripcion: "", tipoRepuesto: "", observaciones: "", firmaTecnico: "", firmaCliente: "", }); function handleKeyPressNumbers(e) { const regex = /[0-9 ]/; const specialKeys = [ "Backspace", "ArrowLeft", "ArrowRight", "Delete", "Tab", "Home", "End", "Enter", ]; if (!regex.test(e.key) && !specialKeys.includes(e.key)) { e.preventDefault(); } } function handleKeyPressWords(e) { // condicional para evitar caracteres en nombre const regex = /[a-zA-Z \s ]+$/; const specialKeys = ["Backspace", "Enter", "Delete", "Tab"]; if (!regex.test(e.key) && !specialKeys.includes(e.key)) { // Evitar que se ingrese el caracter solo letras e.preventDefault(); } } const combinacionCaracteres = (e) => { const regex = /[a-zA-Z0-9\s]/; const specialKeys = ["Backspace", "Enter", "Delete", "Tab"]; if (!regex.test(e.key) && !specialKeys.includes(e.key)) { e.preventDefault(); } }; const handleChange = (e) => { setFormData({ ...formData, [e.target.name]: e.target.value, }); }; const handleSubmit = async (e) => { e.preventDefault(); try { // Crear cliente const clienteResponse = await axios.post( "http://localhost:8080/clientes", { nombreCliente: formData.nombreCliente, correoCliente: formData.correoCliente, } ); const clienteId = clienteResponse.data.id; setClienteId(clienteId); console.log("Cliente creado con el id:", clienteId) console.log("enviando datos cliente ", clienteResponse.data); // Crear dirección asociada al cliente await axios.post("http://localhost:8080/direcciones", { direccion: formData.direccion, barrio: formData.barrio, ciudad: formData.ciudad, clienteId: clienteId, }); // Crear equipo asociado al cliente const equipoResponse = await axios.post("http://localhost:8080/equipos", { serialEquipo: formData.serialEquipo, clienteId: clienteId, contadorColor: formData.contadorColor, contadorBlancoNegro: formData.contadorNegro, }); const equipoId = equipoResponse.data.id; // Crear servicio asociado al equipo await axios.post("http://localhost:8080/servicios", { fecha: formData.fecha, horaInicio: formData.horaInicio, horaFin: formData.horaFin, tipoServicio: formData.tipoServicio, tipoContrato: formData.tipoContrato, observaciones: formData.observaciones, firmaTecnico: formData.firmaTecnico, firmaCliente: formData.firmaCliente, equipoId: equipoId, }); // Crear repuesto asociado al equipo await axios.post("http://localhost:8080/repuestos", { descripcion: formData.descripcion, cantidad: formData.cantidad, tipo: formData.tipoRepuesto, equipoId: equipoId, }); // Crear contacto asociado al cliente const contactoResponse = await axios.post( "http://localhost:8080/contactos", { nombreContacto: formData.nombreContacto, clienteId: clienteId, } ); const contactoId = contactoResponse.data.id; // Crear teléfono asociado al contacto await axios.post("http://localhost:8080/telefonos", { numero: formData.numero, contactoId: contactoId, }); const jsonData = { id: clienteId, nombreCliente: formData.nombreCliente, correoCliente: formData.correoCliente, direcciones: [ { direccion: formData.direccion, barrio: formData.barrio, ciudad: formData.ciudad, clienteId: clienteId, }, ], equipos: [ { id: equipoId, serialEquipo: formData.serialEquipo, contadorColor: formData.contadorColor, contadorBlancoNegro: formData.contadorNegro, servicios: [ { fecha: formData.fecha, horaInicio: formData.horaInicio, horaFin: formData.horaFin, tipoServicio: formData.tipoServicio, tipoContrato: formData.tipoContrato, observaciones: formData.observaciones, firmaTecnico: formData.firmaTecnico, firmaCliente: formData.firmaCliente, equipoId: equipoId, }, ], repuestos: [ { descripcion: formData.descripcion, cantidad: formData.cantidad, tipo: formData.tipoRepuesto, equipoId: equipoId, }, ], clienteId: clienteId, }, ], contactos: [ { nombreContacto: formData.nombreContacto, telefono: { numero: formData.numero, contactoId: contactoId, }, clienteId: clienteId, }, ], }; // Enviar el JSON al backend para generar el PDF y descargarlo const response = await axios.post( "http://localhost:8080/generate-pdf", jsonData, { headers: { "Content-Type": "application/json", }, } ); if (response === HttpStatusCode.Ok) { console.log("se envio correctamente los datos al backend") } setFormData({ nombreCliente: "", correoCliente:"", contacto: "", numero: "", direccion: "", barrio: "", ciudad: "", fecha: "", horaInicio: "", horaFin: "", tipoServicio: "", tipoContrato: "", serialEquipo: "", contadorNegro: "", contadorColor: "", cantidad: "", descripcion: "", tipoRepuesto: "", observaciones: "", firmaTecnico: "", firmaCliente: "", }); console.log("Todos los datos fueron enviados correctamente"); toast.success("Formulario enviado con exito"); //Aqui se llama la funcion para descargar el pdf handleDownloadPdf(clienteId) // Aqui se llama la funcion de enviar correo, luego de haber generado el pdf // handleSendMail1(clienteId, jsonData); } catch (error) { console.error("Error al crear el servicio:", error); console.error("Error generando el pdf ", error); } }; const handleDownloadPdf = async (clienteId) => { try { console.log("Descargando PDF..."); const response = await axios.get( `http://localhost:8080/download-pdf/${clienteId }`, { responseType: "blob", } ); if (response.data.size === 0) { throw new Error("El arhcivo pdf esta vacio") } const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement("a"); link.href = url; link.setAttribute("download", `cliente_${clienteId}.pdf`); document.body.appendChild(link); link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(url); console.log("PDF descargado correctamente."); } catch (error) { console.error("Error descargando PDF", error); } }; const handleClearForm = () => { setFormData({ nombreCliente: "", nombreContacto: "", numero: "", direccion: "", barrio: "", ciudad: "", fecha: "", horaInicio: "", horaFin: "", tipoServicio: "", tipoContrato: "", serialEquipo: "", contadorNegro: "", contadorColor: "", cantidad: "", descripcion: "", tipoRepuesto: "", observaciones: "", firmaTecnico: "", firmaCliente: "", }); }; return (