diff --git a/backend/controllers/SuperuserController.js b/backend/controllers/SuperuserController.js index bc7caa7a..17f884ab 100644 --- a/backend/controllers/SuperuserController.js +++ b/backend/controllers/SuperuserController.js @@ -1,11 +1,9 @@ -const Register = require('../models/schemas/RegistrationPeriod') +const { Registration } = require('../models/schemas') exports.openRegistrationPeriod = async (req, res) => { - const { name, isOpen, start, end } = req.body; + const { start, end } = req.body; - await Register.create({ - name: name, - isOpen: isOpen, + await Registration.create({ start: start, end: end, }).then(() => { diff --git a/backend/models/schemas/RegistrationPeriod.js b/backend/models/schemas/RegistrationPeriod.js index ffe6f106..eb0c0856 100644 --- a/backend/models/schemas/RegistrationPeriod.js +++ b/backend/models/schemas/RegistrationPeriod.js @@ -1,5 +1,5 @@ module.exports = (sequelize, DataTypes) => { - const RegistrationPeriod = sequelize.define("Registration", { + const Registration = sequelize.define("Registration", { id: { type: DataTypes.INTEGER, field: "co_registration_period", @@ -24,5 +24,5 @@ module.exports = (sequelize, DataTypes) => { } }); - return RegistrationPeriod; + return Registration; }; diff --git a/frontend/src/pages/RegistrationPeriod/index.js b/frontend/src/pages/RegistrationPeriod/index.js index 77fef995..c2727476 100644 --- a/frontend/src/pages/RegistrationPeriod/index.js +++ b/frontend/src/pages/RegistrationPeriod/index.js @@ -1,4 +1,5 @@ -import React from "react"; +import React, { useState, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; import { Container, Flex, FormControl, FormLabel, Input, FormHelperText, Text, Center} from "@chakra-ui/react"; import ButtonCadastrar from "../../components/Button"; import { useFormik } from "formik"; @@ -9,7 +10,6 @@ import * as C from "./styles"; import Header from "../../components/Header/index.js"; import Footer from "../../components/Footer/index.js"; import { ChakraProvider } from "@chakra-ui/react"; - import { Link } from "react-router-dom"; @@ -21,6 +21,87 @@ const RegistrationPeriod = () => { const [showAlert, setShowAlert] = useState(false); const [isLoading, setIsLoading] = useState(true); + const tenYearsFromNow = new Date(); + tenYearsFromNow.setFullYear(tenYearsFromNow.getFullYear() + 10); + + + const formik = useFormik({ + initialValues: { + startDate: "", + startTime: "", + endDate: "", + endTime: "", + }, + validationSchema: yup.object({ + startDate: yup + .date() + .required("A data de ínicio é obrigatória") + .min(new Date(new Date().setDate(new Date().getDate() + 1)), "A data de início deve ser pelo menos um dia após hoje") + .max(tenYearsFromNow, "A data de início não pode ser mais do que 10 anos a partir de hoje"), + startTime: yup + .string() + .required("A hora de ínicio é obrigatória"), + endDate: yup + .date() + .required("A data de término é obrigatória") + .min( + yup.ref("startDate"), + "A data de término deve ser igual ou posterior à data de início" + ) + .max(tenYearsFromNow, "A data de início não pode ser mais do que 10 anos a partir de hoje"), + endTime: yup + .string() + .required("A hora de término é obrigatória") + }), + onSubmit: async (values) => { + console.log(values); + try { + const response = await axios.post( + "http://localhost:3001/registration-period/create", + { + start: values.startDate + " " + values.startTime, + end: values.endDate + " " + values.endTime, + } + ); + + if (response.status === 201) { + toast({ + title: "Período de Matrícula Criado.", + description: "Período de matrícula criado com sucesso!", + status: "success", + duration: 2800, + isClosable: true, + position: "top", + }); + + + setShowAlert(true); + setTimeout(() => { + navigate("/home"); + }, 1000); + } else { + toast({ + title: "Erro ao criar período de matrícula.", + description: response.data.message || "Erro desconhecido.", + status: "error", + duration: 2800, + isClosable: true, + position: "top", + }); + } + } catch (error) { + console.error("Erro ao criar:", error); + toast({ + title: "Erro ao criar período de matrícula.", + description: "Tente novamente mais tarde.", + status: "error", + duration: 2800, + isClosable: true, + position: "top", + }); + } + }, + }); return ( @@ -48,7 +129,14 @@ const RegistrationPeriod = () => { isRequired color='#243A69' placeholder='Data de Início' + {...formik.getFieldProps("startDate")} /> + {formik.touched.startDate && + formik.errors.startDate && ( + + {formik.errors.startDate} + + )} Hora de Ínicio { isRequired color='#243A69' placeholder='Hora de Ínicio' + {...formik.getFieldProps("startTime")} /> + {formik.touched.startTime && + formik.errors.startTime && ( + + {formik.errors.startTime} + + )} - Data de Fim + Data de Término + placeholder='Data de Término' + {...formik.getFieldProps("endDate")} + /> + {formik.touched.endDate && + formik.errors.endDate && ( + + {formik.errors.endDate} + + )} - Hora de Fim + Hora de Término + {formik.touched.endTime && + formik.errors.endTime && ( + + {formik.errors.endTime} + + + )}