From 8507a9b3ed28b9cb0f90b357b2d96d95149cc7af Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 7 Jun 2023 17:53:37 -0500 Subject: [PATCH] Version inicial --- .env.development | 2 +- .env.production | 2 +- .env.qa | 2 +- package.json | 1 + src/App.tsx | 3 +- .../Contenedores/SelectContainer.tsx | 8 +- .../Corresponsales/Guias/SelectGuias.tsx | 7 +- .../Corresponsales/TraficoCorresponsales.tsx | 12 +- src/Components/Dashboard/Dashboard.tsx | 8 - src/Components/Dashboard/DashboardTrafico.tsx | 113 ------- src/Components/Login/ForgotPassword.tsx | 176 +++++++++++ src/Components/Login/PIN.tsx | 126 ++++++++ src/Components/Login/ResetCredentials.tsx | 190 ++++++++++++ src/Components/Login/login.tsx | 277 ++++++++++-------- .../Reportes/RptCorresponsalesTraficos.tsx | 228 +++++++------- src/Components/UserControl/UserControl.tsx | 258 ++++++++++++++++ .../resetCredentials/resetCredentials.tsx | 99 ------- src/DTO/DTOPINUsuario.ts | 4 + src/DTO/DTOResetPassword.ts | 4 + src/DTO/DTOUsuariosShort.ts | 5 +- src/Interfaces/IUsuario.ts | 6 + src/Services/Auth/Auth.Service.ts | 57 ++-- src/Services/Catalogos/Usuarios.Services.ts | 29 +- src/Services/common/http-common.ts | 19 +- src/css/autoComplete.css | 54 ---- src/css/customerColors.css | 130 ++++++++ src/css/generic01.css | 6 +- src/css/heineken.css | 101 ------- src/css/heineken1.css | 91 ------ src/css/printableArea.css | 24 -- src/css/reactCaptcha.css | 12 + src/images/Clean.png | Bin 0 -> 508 bytes src/images/GEMCO_login.png | Bin 0 -> 9637 bytes src/images/caret.png | Bin 0 -> 378 bytes src/index.tsx | 18 +- yarn.lock | 23 +- 36 files changed, 1289 insertions(+), 806 deletions(-) delete mode 100644 src/Components/Dashboard/DashboardTrafico.tsx create mode 100644 src/Components/Login/ForgotPassword.tsx create mode 100644 src/Components/Login/PIN.tsx create mode 100644 src/Components/Login/ResetCredentials.tsx create mode 100644 src/Components/UserControl/UserControl.tsx delete mode 100644 src/Components/resetCredentials/resetCredentials.tsx create mode 100644 src/DTO/DTOPINUsuario.ts create mode 100644 src/DTO/DTOResetPassword.ts create mode 100644 src/Interfaces/IUsuario.ts delete mode 100644 src/css/autoComplete.css create mode 100644 src/css/customerColors.css delete mode 100644 src/css/heineken.css delete mode 100644 src/css/heineken1.css delete mode 100644 src/css/printableArea.css create mode 100644 src/css/reactCaptcha.css create mode 100644 src/images/Clean.png create mode 100644 src/images/GEMCO_login.png create mode 100644 src/images/caret.png diff --git a/.env.development b/.env.development index 8dc4075..94fe642 100644 --- a/.env.development +++ b/.env.development @@ -1,2 +1,2 @@ REACT_APP_ENVIRONMENT=development -REACT_APP_API=https://localhost:5041/api \ No newline at end of file +REACT_APP_API=https://localhost:5051/api \ No newline at end of file diff --git a/.env.production b/.env.production index 624dd3e..c9f3bcd 100644 --- a/.env.production +++ b/.env.production @@ -1,2 +1,2 @@ REACT_APP_ENVIRONMENT=production -REACT_APP_API=https://www.gemcousa.mx/CORRESPONSALBackend/api +REACT_APP_API=https://corresponsal.gemcousa.mx/CORRESPONSALBackend/api diff --git a/.env.qa b/.env.qa index 3f60a2c..0af14c8 100644 --- a/.env.qa +++ b/.env.qa @@ -1,2 +1,2 @@ REACT_APP_ENVIRONMENT=qa -REACT_APP_API=https://www.gemcousa.solutions/CORRESPONSALBackend/api \ No newline at end of file +REACT_APP_API=https://corresponsal.gemcousa.solutions/CORRESPONSALBackend/api \ No newline at end of file diff --git a/package.json b/package.json index 1d039d4..5b149aa 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "react": "^18.2.0", "react-apexcharts": "^1.4.0", "react-bootstrap": "^2.7.4", + "react-captchaa": "^1.0.13", "react-currency-format": "^1.1.0", "react-data-table-component": "^7.5.3", "react-data-table-component-extensions": "^1.6.0", diff --git a/src/App.tsx b/src/App.tsx index 8c7ad4f..e66f6e2 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -96,12 +96,11 @@ function App() { {!userLogued ? ( <> login  - reset ) : ( <> Logout -
+
diff --git a/src/Components/Corresponsales/Contenedores/SelectContainer.tsx b/src/Components/Corresponsales/Contenedores/SelectContainer.tsx index 9a07f54..9d1c9d1 100644 --- a/src/Components/Corresponsales/Contenedores/SelectContainer.tsx +++ b/src/Components/Corresponsales/Contenedores/SelectContainer.tsx @@ -12,7 +12,9 @@ import { import { Alert, Button, Col, Form, Modal, Row } from 'react-bootstrap' import DatePicker from 'react-datepicker' import 'react-datepicker/dist/react-datepicker.css' -import { isTypeNode } from 'typescript' +//Images +import caret from '../../../images/caret.png'; +import clean from '../../../images/Clean.png'; interface IProps { IDTrafico: number @@ -110,7 +112,7 @@ export const SelectContainer: FC = (props) => { = (props) => { /> = (props) => { = (props) => { /> { setIDCliente(parseInt(e.target.value)) }} @@ -1198,7 +1198,7 @@ export default function TraficoCorresponsales (props:IProps) { { - return Depto === 'Corresponsalias' + return (Depto === 'Corresponsalias' || Depto === 'Sistemas') ? showModalBox(10) : '' }} @@ -1263,7 +1263,7 @@ export default function TraficoCorresponsales (props:IProps) { setTipoOperacion(parseInt(e.target.value)) } value={TipoOperacion} - disabled={Depto !== 'Corresponsalias'} + disabled={(Depto !== 'Corresponsalias' && Depto !== 'Sistemas')} className="form-select form-select-sm" > @@ -1276,7 +1276,7 @@ export default function TraficoCorresponsales (props:IProps) { id="CmbOpEntrada" onChange={(e) => setOpEntrada(parseInt(e.target.value))} value={OpEntrada} - disabled={Depto !== 'Corresponsalias'} + disabled={(Depto !== 'Corresponsalias' && Depto !== 'Sistemas')} className="form-select form-select-sm" > @@ -1292,7 +1292,7 @@ export default function TraficoCorresponsales (props:IProps) { id="CmbOpSalida" onChange={(e) => setOpSalida(parseInt(e.target.value))} value={OpSalida} - disabled={Depto !== 'Corresponsalias'} + disabled={(Depto !== 'Corresponsalias' && Depto !== 'Sistemas')} className="form-select form-select-sm" > @@ -1328,7 +1328,7 @@ export default function TraficoCorresponsales (props:IProps) { }} className="form-select form-select-sm" value={IDCorresponsal} - disabled={Depto !== 'Corresponsalias' ? true : false} + disabled={(Depto !== 'Corresponsalias' && Depto !== 'Sistemas')} > {mCorresponsales diff --git a/src/Components/Dashboard/Dashboard.tsx b/src/Components/Dashboard/Dashboard.tsx index 46d18e4..e15d2ea 100644 --- a/src/Components/Dashboard/Dashboard.tsx +++ b/src/Components/Dashboard/Dashboard.tsx @@ -3,8 +3,6 @@ import DashboardCorresponsales from './DashboardCorresponsales' import { DashboardContabilidad } from './DashboardContabilidad' import { Col, Container, Row } from 'react-bootstrap' import { DashboardFacturacion } from './DashboardFacturacion' -import { DashboardClasificacion } from './DashboardClasificacion' -import DashboardTrafico from './DashboardTrafico' interface IProps {} @@ -34,12 +32,6 @@ export default function Dashboard(props: IProps) { {[['Direcccion', 'Sistemas', 'Facturacion'].includes(Depto) ? : ''].map((item) => { return {item} })} - {[['Direcccion', 'Sistemas', 'Operaciones', 'Clasificacion'].includes(Depto) ? : ''].map((item) => { - return {item} - })} - {[['Direcccion', 'Sistemas', 'Operaciones', 'Trafico'].includes(Depto) ? : ''].map((item) => { - return {item} - })} diff --git a/src/Components/Dashboard/DashboardTrafico.tsx b/src/Components/Dashboard/DashboardTrafico.tsx deleted file mode 100644 index cb66b8a..0000000 --- a/src/Components/Dashboard/DashboardTrafico.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import * as React from 'react' -import { useEffect, useState } from 'react' -import { Card, Col, ProgressBar, Row } from 'react-bootstrap' -import { IconContext } from 'react-icons' -import { FaAmazon } from 'react-icons/fa' -import { Link } from 'react-router-dom' -import '../../css/generic01.css' -import DashboardDataService from '../../Services/Dashboard/Dashboard.Clasificacion.Services' - -export interface IDashboardTraficoProps { -} - -export default function DashboardTrafico (props: IDashboardTraficoProps) { - const [Terminadas, setTerminadas] = useState(0) - const [Pendientes, setPendientes] = useState(0) - const [Total, setTotal] = useState(0) - - useEffect(() => { - DashboardDataService.DashboardInvoices(3) - .then((response) => { - setPendientes(response.data.total) - }) - .catch((e: Error) => { - return - }) - DashboardDataService.DashboardInvoices(4) - .then((response) => { - setTerminadas(response.data.total) - }) - .catch((e: Error) => { - return - }) - }, []) - - useEffect(() => { - setTotal(Pendientes + Terminadas) - }, [Pendientes, Terminadas]) - - return ( - <> - - - Trafico - - - Facturas {' '} - - - - - - - - Terminadas - - - - - Pendientes - - - - - - - - - - - - - - {Terminadas} - - - {Pendientes} - - - - - - - - ) - } - \ No newline at end of file diff --git a/src/Components/Login/ForgotPassword.tsx b/src/Components/Login/ForgotPassword.tsx new file mode 100644 index 0000000..7308b91 --- /dev/null +++ b/src/Components/Login/ForgotPassword.tsx @@ -0,0 +1,176 @@ +import * as React from 'react' +import { Button, Card, Col, Form, Row } from 'react-bootstrap' +import logo from '../../images/GEMCO_login.png' +import { MsgInformativo } from '../Utils/Toast/msgInformativo' +import ReactCaptchaa from 'react-captchaa' +import AuthDS from '../../Services/Auth/Auth.Service' +import 'react-captchaa/dist/index.css' +import '../../css/reactCaptcha.css' +import '../../css/customerColors.css' +import ILogin from '../../Interfaces/Ilogin' +import { AxiosError } from 'axios' +import { useNavigate } from 'react-router-dom' +import { useState } from 'react' + +export interface IForgotPasswordProps {} + +export default function ForgotPassword(props: IForgotPasswordProps) { + const navigate = useNavigate() + const [Usuario, setUsuario] = useState('') + const [Contrasenia, setContrasenia] = useState('') + const [Captcha, setCaptcha] = useState('') + const [CaptchaText, setCaptchaText] = useState('') + const [show, setShow] = useState(false) + const [msg, setMsg] = useState('') + const [header, setHeader] = useState('') + const [msgColor, setMsgColor] = useState('primary') + + const validateCaptcha = () => { + if (!Usuario.length) { + setShow(true) + setMsg('El campo usuario no puede estar vacio') + setHeader('Error') + return + } + if (Captcha !== CaptchaText) { + setShow(true) + setMsg('Captcha o usuario incorrecto') + setHeader('Error') + return + } + const data: ILogin = { + Usuario: Usuario, + Contrasena: Contrasenia, + } + AuthDS.forgotPassword(data) + .then((response: any) => { + localStorage.setItem('User', JSON.stringify(Usuario)) + navigate('/PIN') + }) + .catch((e: AxiosError) => { + setShow(true) + setMsg('Usuario no existe') + setHeader('Error') + }) + } + + return ( +
+ + + + +   + +
+ + + + + Corresponal + + + + + + +   + +
+ + + { + setUsuario(e.target.value) + }} + /> + + + +   + + + + { + setCaptchaText(captchaText) + }} + captchaLength={6} + captchaButtonClick={(e: any) => {}} + onCanvasClick={(e: any) => {}} + height={150} + width={200} + iconName={'FiRefreshCw'} + iconColor={'#fff'} + fontSize={'3em'} + iconSize={'1em'} + containerClassName={'react-captcha'} + iconWrapperClassName={'react-captcha-icon-wrapper'} + canvasClassName={'react-captcha-canvas'} + iconClassName={'react-captcha-icon'} + charactersInclude={ + '0123456789abcdefghijklmnopqrstuvwxzABCDEFGHIJKLMNOPQRSTUVWXYZ' + } + /> + + + + + { + setCaptcha(e.target.value) + }} + /> + + + +   + +
+
+
+
+ +
+
+
+
+ +   +
+ +
+ ) +} diff --git a/src/Components/Login/PIN.tsx b/src/Components/Login/PIN.tsx new file mode 100644 index 0000000..cd9d0e2 --- /dev/null +++ b/src/Components/Login/PIN.tsx @@ -0,0 +1,126 @@ +import * as React from 'react' +import { Button, Card, Col, Form, Row } from 'react-bootstrap' +import logo from '../../images/GEMCO_login.png' +import { MsgInformativo } from '../Utils/Toast/msgInformativo' +import AuthDS from '../../Services/Auth/Auth.Service' +import { useState } from 'react' +import { DTOPINUsuario } from '../../DTO/DTOPINUsuario' +import { useNavigate } from 'react-router-dom' + +export interface IPINProps {} + +export default function PIN(props: IPINProps) { + const navigate = useNavigate() + const [User, setUser] = useState(() => { + const stickyValue = window.localStorage.getItem('User') + return stickyValue !== null ? JSON.parse(stickyValue) : '' + }) + const [Usuario, setUsuario] = useState(User) + const [PIN, setPIN] = useState('') + const [show, setShow] = useState(false) + const [msg, setMsg] = useState('') + const [header, setHeader] = useState('') + const [msgColor, setMsgColor] = useState('primary') + + const validatePIN = () => { + if (!PIN.length) { + setShow(true) + setMsg('El campo PIN no puede estar vacio') + setHeader('Error') + return false + } + const data: DTOPINUsuario = { + pin: parseInt(PIN), + usuario: Usuario, + } + console.log(JSON.stringify(data)) + AuthDS.validatePIN(data) + .then((response: any) => { + localStorage.removeItem('User') + localStorage.setItem('PIN', PIN) + navigate('/Reset') + }) + .catch((e: any) => { + setShow(true) + setMsg('PIN invalido!') + setHeader('Error') + return false + }) + } + + return ( +
+ + + + +   + +
+ + + + + ZINC Internacional + + + + + + +   + +
+ + + { + setPIN(e.target.value) + }} + /> + + + +   + +
+
+
+
+ +
+
+
+
+ +   +
+ +
+ ) +} diff --git a/src/Components/Login/ResetCredentials.tsx b/src/Components/Login/ResetCredentials.tsx new file mode 100644 index 0000000..f610bf1 --- /dev/null +++ b/src/Components/Login/ResetCredentials.tsx @@ -0,0 +1,190 @@ +import React, { FC, useState } from 'react' +import { + Button, + Card, + Col, + Form, + Row, + Toast, + ToastContainer, +} from 'react-bootstrap' +import { MsgInformativo } from '../Utils/Toast/msgInformativo' +import logo from '../../images/GEMCO_login.png' +import AuthDS from '../../Services/Auth/Auth.Service' +import { DTOResetPassword } from '../../DTO/DTOResetPassword' + +interface IProps {} + +export default function ResetCredentials(props: IProps) { + const [User, setUser] = useState(() => { + const stickyValue = window.localStorage.getItem('User') + return stickyValue !== null ? JSON.parse(stickyValue) : '' + }) + const [PIN, setPIN] = useState(() => { + const stickyValue = window.localStorage.getItem('PIN') + return stickyValue !== null ? JSON.parse(stickyValue) : '' + }) + const [header, setHeader] = useState('Error!') + const [msgColor, setMsgColor] = useState('primary') + const [showMsg, setShowMsg] = useState(false) + const [msg, setMsg] = useState('') + const [Usuario, setUsuario] = useState(User) + const [Contrasena, setContrasena] = useState('') + const [ConfirmaContrasena, setConfirmaContrasena] = useState('') + const [show, setShow] = useState(false) + + const validaFormulario = () => { + if (Contrasena.length === 0 || ConfirmaContrasena.length === 0) { + setShow(true) + setMsg('La contraseña no puede estar vacia!') + setHeader('Error') + return + } + if (Contrasena !== ConfirmaContrasena) { + setShow(true) + setMsg('Contraseña no coincide con la confirmacion!') + setHeader('Error') + return + } + const data: DTOResetPassword = { + pin: PIN, + contrasena: Contrasena, + } + AuthDS.resetPassword(data) + .then((response) => { + if (response.status == 200) { + setShow(true) + setMsg('La contraseña se cambio exitosamente!') + setHeader('Confirmacion') + return false + } + }) + .catch((e: Error) => { + setShow(true) + setMsg('Ocurrio un error') + setHeader('Error') + return false + }) + } + + const closeToast = (show: boolean): void => { + setShowMsg(false) + } + + return ( +
+
+ + + + +   + +
+ + + + + ZINC Internacional + + + + + + + Proporcione su nueva contraseña? + + +   + +
+ + + + + + + + { + setContrasena(e.target.value) + }} + /> + + + +   + + + + { + setConfirmaContrasena(e.target.value) + }} + /> + + + +   + +
+
+
+ +
+
+
+
+ +   +
+ +
+ {/* */} +
+ ) +} diff --git a/src/Components/Login/login.tsx b/src/Components/Login/login.tsx index 1c126f9..11a6190 100644 --- a/src/Components/Login/login.tsx +++ b/src/Components/Login/login.tsx @@ -1,149 +1,187 @@ import * as React from 'react' import { useNavigate } from 'react-router-dom' -import { Formik, Form, Field } from 'formik' import { useSelector, useDispatch } from 'react-redux' -//import { RootState } from '../../store/store' import { logued } from '../../store/features/userStatusSlice/userStatusSlice' import ILogin from '../../Interfaces/Ilogin' -import authDataService from '../../Services/Auth/Auth.Service' +import ItemMenu from '../../Interfaces/Catalogos/IItemMenu' import '../../css/login.css' import jwt_decode from 'jwt-decode' import IjwtStructure from '../../Interfaces/IjwtStructure' import { RootState } from '../../store/store' import { AxiosError } from 'axios' import { MsgInformativo } from '../Utils/Toast/msgInformativo' -import logo from '../../images/GEMCO_mini.png' +import logo from '../../images/GEMCO.png' import Dashboard from '../Dashboard/Dashboard' -import { Alert, Card } from 'react-bootstrap' +import { Button, Card, Col, Form, Nav, Row } from 'react-bootstrap' +import AuthDS from '../../Services/Auth/Auth.Service' +import UserDS from '../../Services/Catalogos/Usuarios.Services' +import { useEffect } from 'react' export const Login: React.FC<{}> = () => { const dispatch = useDispatch() const navigate = useNavigate() + let _menu: ItemMenu[] = [] + const [mainMenu, setMainMenu] = React.useState(_menu) const userLogued = useSelector((state: RootState) => state.userStatus.value) const [show, setShow] = React.useState(false) + const [Usuario, setUsuario] = React.useState('') + const [Contrasenia, setContrasenia] = React.useState('') const [msg, setMsg] = React.useState('') const [header, setHeader] = React.useState('') const [msgColor, setMsgColor] = React.useState('primary') - const initialValues: ILogin = { Usuario: '', Contrasena: '' } + const menu = localStorage.getItem('menu') ? localStorage.getItem('menu') : '' + + const login = () => { + const credentials: ILogin = { + Usuario: Usuario, + Contrasena: Contrasenia, + } + AuthDS.login(credentials) + .then((response: any) => { + localStorage.setItem('menu', JSON.stringify(response.data.menu)) + localStorage.setItem('token', response.data.token) + localStorage.setItem( + 'tokenInfo', + JSON.stringify(jwt_decode(response.data.token)) + ) + var values: IjwtStructure = jwt_decode(response.data.token) + localStorage.setItem('UserId', JSON.stringify(values.UserId)) + localStorage.setItem('User', JSON.stringify(values.Usuario)) + localStorage.setItem( + 'Departamento', + JSON.stringify(values.Departamento) + ) + localStorage.setItem('UserType', JSON.stringify(values.UserType)) + localStorage.setItem('Perfil', JSON.stringify(values.Perfil)) + dispatch(logued(true)) + navigate('/') + }) + .catch((e: AxiosError) => { + localStorage.setItem('menu', '') + localStorage.setItem('token', '') + setShow(true) + setMsg('Credenciales invalidas!') + setHeader('Error') + if (e.message.includes('400')) { + setMsg('Credenciales invalidas!') + } else if (e.message.includes('401')) { + setMsg('Debere cambiar la contraseña, para poder entrar a este sitio') + } + }) + } + + useEffect(() => { + if (menu && userLogued) { + setMainMenu(JSON.parse(menu)) + } else { + setMainMenu([]) + } + }, [menu, userLogued]) + + useEffect(() => { + UserDS.validate() + .then((response) => { + if (response.status === 200) { + dispatch(logued(true)) + } + }) + .catch((e: Error) => { + if (!window.location.href.indexOf('login')) { + localStorage.setItem('menu', '') + localStorage.setItem('token', '') + setHeader('Informativo') + setMsg('Su session ha expirado, necesita volver a loguerse') + setShow(true) + navigate('/') + } + }) + }, [dispatch, navigate]) return (
{!userLogued ? (
-{/*
- Aviso importante! -

- Proximanate esteremos reunicando el contenido de este servidor de aplicaciones, al nuevo dominio de aplicaciones: https://www.gemcousa.mx -

-
*/} -
-
-
-
-
- { - authDataService - .create(values) - .then((response: any) => { - localStorage.setItem( - 'menu', - JSON.stringify(response.data.menu) - ) - localStorage.setItem('token', response.data.token) - localStorage.setItem( - 'tokenInfo', - JSON.stringify(jwt_decode(response.data.token)) - ) - var values: IjwtStructure = jwt_decode( - response.data.token - ) - localStorage.setItem( - 'UserId', - JSON.stringify(values.UserId) - ) - localStorage.setItem( - 'User', - JSON.stringify(values.Usuario) - ) - localStorage.setItem( - 'Departamento', - JSON.stringify(values.Departamento) - ) - localStorage.setItem( - 'UserType', - JSON.stringify(values.UserType) - ) - localStorage.setItem( - 'Perfil', - JSON.stringify(values.Perfil) - ) - dispatch(logued(true)) - }) - .catch((e: AxiosError) => { - localStorage.setItem('menu', '') - localStorage.setItem('token', '') - setHeader('Error') - if (e.message.includes('400')) { - setMsg('Credenciales invalidas!') - } else if (e.message.includes('401')) { - setMsg( - 'Debere cambiar la contraseña, para poder entrar a este sitio' - ) - } - setShow(true) - }) - }} - > -
-
+ + + + +   + +
+ + + + GEMCO -
-
-

Bienvenido

-
- - -
-
- - -
-
-
- -
- - -
+ + + + + + +   + +
+ + + { + setUsuario(e.target.value) + }} + /> + + + +   + + + + { + setContrasenia(e.target.value) + }} + /> + + + +   + +
+ ¿Olvido contraseña? +
+
+ +
+
+ +
+
+
-
-
+ +   + = () => { }} />
-
) : ( -
+
+ +
)}
) -} +} \ No newline at end of file diff --git a/src/Components/Reportes/RptCorresponsalesTraficos.tsx b/src/Components/Reportes/RptCorresponsalesTraficos.tsx index eb6a3cc..f86995c 100644 --- a/src/Components/Reportes/RptCorresponsalesTraficos.tsx +++ b/src/Components/Reportes/RptCorresponsalesTraficos.tsx @@ -1,31 +1,44 @@ +import React, { FC, useEffect, useState } from 'react' +import { useParams } from 'react-router-dom' +import { useDispatch } from 'react-redux' +import { IconContext } from 'react-icons' + +import { Button, Card, Col, Form, Modal, Row } from 'react-bootstrap' +import { + BsPlusLg, + BsFileEarmarkExcel, + BsSearch, + BsFillXCircleFill, + BsCheckCircleFill, +} from 'react-icons/bs' import { RowClickedEvent } from 'ag-grid-community' import { AgGridReact } from 'ag-grid-react' -import React, { FC, useEffect, useState } from 'react' -import { Button, Card, Form, Modal } from 'react-bootstrap' -import ICorresponsalTrafico from '../../Interfaces/Corresponsales/ICorresponsalTrafico' -import ClientesDataService from '../../Services/Catalogos/Clientes.Services' import { MsgInformativo } from '../Utils/Toast/msgInformativo' -import IClientes from '../../Interfaces/Catalogos/IClientes' -import { BsPlusLg, BsFileEarmarkExcel, BsSearch, BsFillXCircleFill, BsCheckCircleFill } from 'react-icons/bs' + import * as XLSX from 'xlsx' +import moment from 'moment' + +import { ProgressBar } from './customCells/progressBar' import TraficoCorresponsales from '../Corresponsales/TraficoCorresponsales' + +import DTORptCorresponsalesTraficos from '../../DTO/Corresponsales/DTORptCorresponsalesTraficos' + +import ICorresponsalTrafico from '../../Interfaces/Corresponsales/ICorresponsalTrafico' +import IClientes from '../../Interfaces/Catalogos/IClientes' import ICatCorresponsales from '../../Interfaces/Catalogos/ICatCorresponsales' + +import ClientesDataService from '../../Services/Catalogos/Clientes.Services' import CorresponsalesDataService from '../../Services/Catalogos/Corresponsales.Services' import reportesServices from '../../Services/Reportes/reportes.services' -import moment from 'moment' -import DTORptCorresponsalesTraficos from '../../DTO/Corresponsales/DTORptCorresponsalesTraficos' + import { InitCorresponsalesFacturas } from '../../store/features/Corresponsales/CorresponsalesFacturasSlice' import { InitCorresponsalesFacturasTerceros } from '../../store/features/Corresponsales/CorresponsalesFacturasTercerosSlice' import { InitCorresponsalesContenedores } from '../../store/features/Corresponsales/CorresponsalesContenedoresSlice' -import { useDispatch } from 'react-redux' -import { IconContext } from 'react-icons' -import { ProgressBar } from './customCells/progressBar' -import { useParams } from 'react-router-dom' -import { FaHandSparkles } from 'react-icons/fa' +/* import '../../css/generic01.css' */ interface IProps {} -export default function RptCorresponsalesTraficos (props: IProps) { +export default function RptCorresponsalesTraficos(props: IProps) { const { proc, modo } = useParams() const [UserId, setUserId] = useState(() => { const stickyValue = window.localStorage.getItem('UserId') @@ -37,7 +50,9 @@ export default function RptCorresponsalesTraficos (props: IProps) { }) const queryParams = new URLSearchParams(window.location.search) const status = queryParams.get('status') - const [StatusAnticipos, setStatusAnticipos] = useState(status ? parseInt(status) : 0) + const [StatusAnticipos, setStatusAnticipos] = useState( + status ? parseInt(status) : 0 + ) const dispatch = useDispatch() const [IDTrafico, setIDTrafico] = useState(0) const [Data, setData] = useState([]) @@ -54,7 +69,9 @@ export default function RptCorresponsalesTraficos (props: IProps) { const [Clientes, setClientes] = useState>() const [filtro, setFiltro] = useState('') const gridRef = React.useRef(null) - const [DataCorresponsales, setDataCorresponsales] = useState([]) + const [DataCorresponsales, setDataCorresponsales] = useState< + ICatCorresponsales[] + >([]) const [columnDefs] = useState([ { field: 'id', headerName: 'id', width: 70, sortable: true, filter: true }, { @@ -91,10 +108,30 @@ export default function RptCorresponsalesTraficos (props: IProps) { sortable: true, filter: true, }, - { field: 'sTipoOperacion', headerName: 'Tipo operacion', sortable: true, filter: true }, - { field: 'sOpEntrada', headerName: 'Op Entrada', sortable: true, filter: true }, - { field: 'sOpSalida', headerName: 'Op Salida', sortable: true, filter: true }, - { field: 'sCorresponsal', headerName: 'Corresponsal', sortable: true, filter: true }, + { + field: 'sTipoOperacion', + headerName: 'Tipo operacion', + sortable: true, + filter: true, + }, + { + field: 'sOpEntrada', + headerName: 'Op Entrada', + sortable: true, + filter: true, + }, + { + field: 'sOpSalida', + headerName: 'Op Salida', + sortable: true, + filter: true, + }, + { + field: 'sCorresponsal', + headerName: 'Corresponsal', + sortable: true, + filter: true, + }, { field: 'patente', sortable: true, filter: true }, { field: 'aduana', sortable: true, filter: true }, { field: 'pedimento', sortable: true, filter: true }, @@ -181,35 +218,6 @@ export default function RptCorresponsalesTraficos (props: IProps) { return yyyy + '-' + mm + '-' + dd } -/* useEffect(() => { - if (proc && modo) { - if (status) { - setStatusAnticipos(parseInt(status)) - } else setStatusAnticipos(0) - const data: DTORptCorresponsalesTraficos = { - Inicio: '', - Fin: '', - TipoOperacion: 0, - NoCliente: 0, - IdCorresponsal: Corresponsal, - Proceso: proc ? parseInt(proc.replace('proc=','')) : 0, - Modo: modo ? parseInt(modo.replace('modo=','')) : 0, - } - reportesServices - .getRptCorresponsalesTraficos(data) - .then((response) => { - setData(response.data) - setFilteredData(response.data) - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error: ' + e) - setShowMsg(true) - return - }) - } - }, [proc, modo]) */ - useEffect(() => { ClientesDataService.getAllClientes(UserId) .then((response) => { @@ -232,7 +240,7 @@ export default function RptCorresponsalesTraficos (props: IProps) { setShowMsg(true) return }) - generaReporte() + generaReporte() }, []) function getParams(e: RowClickedEvent) { @@ -249,28 +257,28 @@ export default function RptCorresponsalesTraficos (props: IProps) { const generaReporte = () => { if (proc && modo) { - const data: DTORptCorresponsalesTraficos = { - Inicio: moment(Inicio).format('YYYY-MM-DD'), - Fin: moment(Fin).format('YYYY-MM-DD'), - TipoOperacion: TipoOperacion, - NoCliente: Cliente, - IdCorresponsal: Corresponsal, - Proceso: proc ? parseInt(proc.replace('proc=','')) : 0, - Modo: modo ? parseInt(modo.replace('modo=','')) : 0, - } - reportesServices - .getRptCorresponsalesTraficos(data) - .then((response) => { - setData(response.data) - setFilteredData(response.data) - console.log(response.data) - }) - .catch((e: Error) => { - setHeader('Error') - setMsg('Ocurrio un error: ' + e) - setShowMsg(true) - return - }) + const data: DTORptCorresponsalesTraficos = { + Inicio: moment(Inicio).format('YYYY-MM-DD'), + Fin: moment(Fin).format('YYYY-MM-DD'), + TipoOperacion: TipoOperacion, + NoCliente: Cliente, + IdCorresponsal: Corresponsal, + Proceso: proc ? parseInt(proc.replace('proc=', '')) : 0, + Modo: modo ? parseInt(modo.replace('modo=', '')) : 0, + } + reportesServices + .getRptCorresponsalesTraficos(data) + .then((response) => { + setData(response.data) + setFilteredData(response.data) + console.log(response.data) + }) + .catch((e: Error) => { + setHeader('Error') + setMsg('Ocurrio un error: ' + e) + setShowMsg(true) + return + }) } } @@ -286,7 +294,10 @@ export default function RptCorresponsalesTraficos (props: IProps) { function exportExcel(jsonData: any[], fileName: string): void { let Heading = [ [ - { title: 'Aduana Seccion Despacho', style: { font: { sz: '18', bold: true } } }, + { + title: 'Aduana Seccion Despacho', + style: { font: { sz: '18', bold: true } }, + }, 'Patente', 'Referencia', 'Pedimento', @@ -337,8 +348,8 @@ export default function RptCorresponsalesTraficos (props: IProps) {
-
-
+ + setInicio(e.target.value)} size='sm' /> -
-
+ + setFin(e.target.value)} size='sm' /> -
-
+ + Tipo oper -
-
+ + setTipoOperacion(parseInt(e.target.value))} @@ -376,11 +387,11 @@ export default function RptCorresponsalesTraficos (props: IProps) { -
-
+ + Cliente -
-
+ + { @@ -399,8 +410,8 @@ export default function RptCorresponsalesTraficos (props: IProps) { }) : null} -
-
+ + -
-
-
-
- {Depto === 'Corresponsalias' ? ( + + + + + {(Depto === 'Corresponsalias' || Depto === 'Sistemas') ? ( -
-
Corresponsal
-
+ + Corresponsal + { @@ -472,9 +483,9 @@ export default function RptCorresponsalesTraficos (props: IProps) { }) : null} -
-
-
+ + +

@@ -501,15 +512,16 @@ export default function RptCorresponsalesTraficos (props: IProps) { /> setShowModal(false)} */ size='sm' - dialogClassName='modal-90w modal-innerDiv' + dialogClassName='modal-90w' disableEscapeKeyDown={true} > - +
([]) + const [msg, setMsg] = useState('') + + const colData = [ + { + name: 'id', + width: '100px', + selector: (row: DTOUsuariosShort) => row.id, + sortable: true, + }, + { + name: 'Usuario', + selector: (row: DTOUsuariosShort) => row.usuario, + }, + { + name: '', + width: '80px', + cell: (row: DTOUsuariosShort) => ( +
{ + setIDUser(row.id) + setIDEstatus(row.activo) + setUsuario(row.usuario) + }} + > + + + +
+ ), + }, + { + name: 'Activo', + width: '80px', + cell: (row: DTOUsuariosShort) => ( +
{ + setIDUser(row.id) + setIDEstatus(row.activo) + setUsuario(row.usuario) + setModalDisableUser(true) + }} + > + {row.activo ? ( + + + + ) : ( + + + + )} +
+ ), + }, + + ] + + const loadUsers = () => { + UsuariosDS.getAllUsuariosShort() + .then((response) => { + //console.log(response.data) + setUsersData(response.data) + }) + .catch((e: Error) => { + setMsg('Ocurrio un error: ' + e.toString()) + setShowMsg(true) + }) + } + + useEffect(() => { + loadUsers() + }, []) + + const disableUser = () => { + UsuariosDS.disableUser(IDUser) + .then((response) => { + setModalDisableUser(false) + loadUsers() + }) + .catch((e: Error) => { + setMsg('Ocurrio un error: ' + e.toString()) + setShowMsg(true) + }) + } + + const createUser = () => { + const data: IUsuario = { + id: IDUser, + usuario: Usuario, + nombre: Usuario, + correo: Usuario + } + UsuariosDS.create(data) + .then((response) => { + setModalDisableUser(false) + loadUsers() + }) + .catch((e: Error) => { + setMsg('Ocurrio un error: ' + e.toString()) + setShowMsg(true) + }) + } + + function closeToast(arg: boolean): void { + throw new Error('Function not implemented.') + } + + return ( +
+ +   + + + + + + + Control de usuarios + + + + + Usuario + + { + setUsuario(e.target.value) + }} + /> + + + + + + + + + + + + + + + + + Lista de usuarios + + + + + + + + + + + + + + + setModalDisableUser(false)} + size='lg' + > + + + + + + + +
+ Esta seguro de { IDEstatus ? 'deshabilitar' : 'habilitar'} este este usuario ({Usuario})? +
+
+
+ +
+ + + + + + + + + + +
+
+
+
+
+ {}} /> +
+ ) +} diff --git a/src/Components/resetCredentials/resetCredentials.tsx b/src/Components/resetCredentials/resetCredentials.tsx deleted file mode 100644 index d98b5d4..0000000 --- a/src/Components/resetCredentials/resetCredentials.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import React, { FC } from 'react' -import { Button, Form, Toast, ToastContainer } from 'react-bootstrap' -import { MsgInformativo } from '../Utils/Toast/msgInformativo' -import DTOUsuario from '../../DTO/DTOUsuario' -import usuariosServices from '../../Services/Catalogos/Usuarios.Services' - -interface IProps {} - -export default function ResetCredentials(props: IProps) { - const [header, setHerader] = React.useState('Error!') - const [msgColor, setMsgColor] = React.useState('Primary') - const [showMsg, setShowMsg] = React.useState(false) - const [msg, setMsg] = React.useState('') - const [usuario, setUsuario] = React.useState('') - const [contrasena, setContrasena] = React.useState('') - const [confirmaContrasena, setConfirmaContrasena] = React.useState('') - - const validaFormulario = () => { - if (contrasena != confirmaContrasena) { - setMsg('Contrasena no coincide con su confirmacion!') - setShowMsg(true) - return - } - - const data: DTOUsuario = { - Usuario: usuario, - Contrasena: contrasena, - } - - usuariosServices - .resetPassword(data) - .then((response) => { - if (response.status == 200) alert('La contrasena se reseteo exisosamente') - if (response.status == 204) alert('Usuario no existe') - - console.log(response.data) - }) - .catch((e: Error) => { - console.log(e) - //alert(e); - let message = e.message - setMsg(message) - if (message.includes('400')) setMsg('Usuario no encontrado') - setShowMsg(true) - }) - } - - const closeToast = (show: boolean): void => { - setShowMsg(false) - } - - return ( -
- {' '} -
-
-
-
-
-
-

Olvido su contraseña

- - Usuario - setUsuario(e.currentTarget.value)} /> - - - Nueva contraseña - setContrasena(e.currentTarget.value)} - /> - - - Confirme su nueva contraseña - setConfirmaContrasena(e.currentTarget.value)} - /> - - -
-
-
-
-
- -
-
- ) -} diff --git a/src/DTO/DTOPINUsuario.ts b/src/DTO/DTOPINUsuario.ts new file mode 100644 index 0000000..5e50d94 --- /dev/null +++ b/src/DTO/DTOPINUsuario.ts @@ -0,0 +1,4 @@ +export interface DTOPINUsuario { + pin: number, + usuario: string +} \ No newline at end of file diff --git a/src/DTO/DTOResetPassword.ts b/src/DTO/DTOResetPassword.ts new file mode 100644 index 0000000..8d27345 --- /dev/null +++ b/src/DTO/DTOResetPassword.ts @@ -0,0 +1,4 @@ +export interface DTOResetPassword { + pin: number, + contrasena: string +} \ No newline at end of file diff --git a/src/DTO/DTOUsuariosShort.ts b/src/DTO/DTOUsuariosShort.ts index 1d3bf61..9273d23 100644 --- a/src/DTO/DTOUsuariosShort.ts +++ b/src/DTO/DTOUsuariosShort.ts @@ -1,4 +1,5 @@ export default interface DTOUsuariosShort { - id: number; - usuario: string; + id: number, + usuario: string, + activo: boolean } \ No newline at end of file diff --git a/src/Interfaces/IUsuario.ts b/src/Interfaces/IUsuario.ts new file mode 100644 index 0000000..2bf2e03 --- /dev/null +++ b/src/Interfaces/IUsuario.ts @@ -0,0 +1,6 @@ +export interface IUsuario { + id: number, + usuario: string, + nombre: string, + correo: string + } \ No newline at end of file diff --git a/src/Services/Auth/Auth.Service.ts b/src/Services/Auth/Auth.Service.ts index 19b62cb..20310c8 100644 --- a/src/Services/Auth/Auth.Service.ts +++ b/src/Services/Auth/Auth.Service.ts @@ -2,38 +2,31 @@ import http from "../common/http-common"; import ILogin from "../../Interfaces/Ilogin" import ItemMenuData from "../../Interfaces/Catalogos/IItemMenu"; import Token from '../../Interfaces/token' +import IRespuesta from "../../Interfaces/IRespuesta"; +import { DTOPINUsuario } from "../../DTO/DTOPINUsuario"; +import { DTOResetPassword } from "../../DTO/DTOResetPassword"; +import DTOUsuario from "../../DTO/DTOUsuario"; class authDataService { - /** - * - */ constructor() { - // super(); - type token = string; - type returnData = [ItemMenuData[], Token] - } - - /*getAll() { - return http.get>("/tutorials"); - } - get(id: string) { - return http.get(`/tutorials/${id}`); - }*/ - create(data: ILogin) { - return http.post<[ItemMenuData[], Token]>("/Auth", data); - } - /* - update(data: ITutorialData, id: any) { - return http.put(`/tutorials/${id}`, data); - } - delete(id: any) { - return http.delete(`/tutorials/${id}`); - } - deleteAll() { - return http.delete(`/tutorials`); - } - findByTitle(title: string) { - return http.get>(`/tutorials?title=${title}`); - }*/ -} -export default new authDataService(); \ No newline at end of file + // super(); + type token = string; + type returnData = [ItemMenuData[], Token] + } + login(data: ILogin) { + return http.post<[ItemMenuData[], Token]>("/Auth", data); + } + loginTransaport(data: ILogin) { + return http.post<[ItemMenuData[], Token]>("/Auth/AreYouTransport", data); + } + forgotPassword(data: ILogin) { + return http.post("/Auth/forgotPassword", data); + } + validatePIN(data: DTOPINUsuario) { + return http.post("/Auth/validatePIN", data); + } + resetPassword(data: DTOResetPassword) { + return http.post("/Auth/resetPassword", data); + } + } + export default new authDataService(); \ No newline at end of file diff --git a/src/Services/Catalogos/Usuarios.Services.ts b/src/Services/Catalogos/Usuarios.Services.ts index ed0559c..dae1d32 100644 --- a/src/Services/Catalogos/Usuarios.Services.ts +++ b/src/Services/Catalogos/Usuarios.Services.ts @@ -2,7 +2,7 @@ import http from "../common/http-common"; import { IRegister } from "../../Interfaces/IRegister"; import DTOUsuariosShort from "../../DTO/DTOUsuariosShort"; import DTOClonarUsuario from "../../DTO/DTOClonarUsuario"; -import DTOUsuario from "../../DTO/DTOUsuario"; +import { IUsuario } from "../../Interfaces/IUsuario"; class usuariosService { @@ -17,33 +17,14 @@ class usuariosService { getAllUsuariosShort() { return http.get("/Usuarios/getAllUsuariosShort"); } - create(data: IRegister) { - return http.post<[IRegister[]]>("/Usuarios/createUser", data); + create(data: IUsuario) { + return http.post<[IRegister[]]>("/Usuarios/createUsuario", data); } clonarUsuario(data: DTOClonarUsuario) { return http.post<[DTOClonarUsuario[]]>("/Usuarios/clonarUsuario", data); } - resetPassword(data: DTOUsuario) { - return http.post("/Usuarios/resetPassword", data); + disableUser(id: number) { + return http.put(`/Usuarios/disableUser?id=${id}`); } - - /* get(id: string) { - return http.get(`/tutorials/${id}`); - } - create(data: ILogin) { - return http.post<[ItemMenuData[]]>("/Auth", data); - } - update(data: ITutorialData, id: any) { - return http.put(`/tutorials/${id}`, data); - } - delete(id: any) { - return http.delete(`/tutorials/${id}`); - } - deleteAll() { - return http.delete(`/tutorials`); - } - findByTitle(title: string) { - return http.get>(`/tutorials?title=${title}`); - }*/ } export default new usuariosService(); \ No newline at end of file diff --git a/src/Services/common/http-common.ts b/src/Services/common/http-common.ts index 4679c04..e310ebd 100644 --- a/src/Services/common/http-common.ts +++ b/src/Services/common/http-common.ts @@ -13,8 +13,19 @@ const instance = axios.create({ instance.interceptors.response.use( function (response) { - /* if (process.env.NODE_ENV === 'development') - console.log('log: ' + JSON.stringify(response)) */ + return response + }, + function (error) { + const Excluded = ['login', 'Reset', 'forgotPassword', 'PIN'] + const currentUrl = window.location.href + var urlExceptuado = new RegExp(Excluded.join('|')).test(currentUrl) + if (401 === error.response.status && !urlExceptuado) { + window.location.href = '/#/login' + } else { + return Promise.reject(error) + } + return Promise.reject(error) + /* function (response) { return response }, function (error) { @@ -24,13 +35,11 @@ instance.interceptors.response.use( ) { return Promise.reject(error) } else if (401 === error.response.status) { - /* localStorage.clear();*/ window.location.href = '/#/login' } else if ( 409 === error.response.status && error.response.data.respuesta.indexOf('factura') ) { - //console.log(JSON.stringify(error.response)) if (error.response.data.registro.factura) { error.response.data.registro.id === -1 ? alert( @@ -44,7 +53,7 @@ instance.interceptors.response.use( } } else { return Promise.reject(error) - } + } */ } ) diff --git a/src/css/autoComplete.css b/src/css/autoComplete.css deleted file mode 100644 index 3849e27..0000000 --- a/src/css/autoComplete.css +++ /dev/null @@ -1,54 +0,0 @@ -.mainDiv { - /* padding-top: 50px; */ - font-family: sans-serif; - text-align: left; - /*width: 300px;*/ - /*margin: 0 auto;*/ -} - -.typeahead-form-group { - position: relative; - z-index: 1000; -} - -.typeahead-form-group1 { - position: relative; - z-index: 999; -} - -.typeahead-form-group2 { - position: relative; - z-index: 998; -} - -.typeahead-form-group3 { - position: relative; - z-index: 998; -} - -.typeahead-list-group4 { - position: absolute; - width: 100%; - top: 38px; - left: 0; -} - -.typeahead-list-group-item { - /* padding: 0.3rem 1.3rem; */ - background-color: rgb(228, 243, 240); -} - -.typeahead-list-group-item:hover { - cursor: pointer; - background: #2d4ddc; - color: #fff; -} - -.textBoxViaje { - z-index: 100; -} - -.textField { - margin-right: 0px !important; - padding-right: 0px; -} \ No newline at end of file diff --git a/src/css/customerColors.css b/src/css/customerColors.css new file mode 100644 index 0000000..39a626f --- /dev/null +++ b/src/css/customerColors.css @@ -0,0 +1,130 @@ +.MDTable { + width: 3500px; + font-size: 0.8em; + font-family: Verdana, Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, + sans-serif; + background-color: #ffffff; +} + +.MDHeaderSticky { + position: 'sticky'; + top: '0'; +} + +.MDTable th, +.MDTable td { + padding: 0px 0px 0px 0px; + border: none; + /* padding-top: 5px; */ + background-color: #ebecfa; +} +.MDTable tr { + background-color: #dddcdc; +} + +.MDTable thead tr th { + /* text-shadow: 1px 1px 1px #ccc; */ + font-weight: normal; + font-size: 1.1em; + background-color: #0f5129; + color: #ffffff; + height: 30px; +} + +.MDTable tbody tr td { + border-top: solid 1px #c8cacd; + /* border-bottom: solid 1px #092a84; */ + font-size: 1.2em; + background-color: #ffffff; + /* height: 25px; */ +} + +.MDTable tbody tr:nth-of-type(even) { + background-color: #c2bfbf; +} + +.MDTable tbody tr:nth-of-type(odd) { + background-color: #c0bdbd; +} + +.MDcontainer { + width: 100%; + height: 600px; + overflow: auto; +} + +.zui-table { + border: solid 1px #ddeeee; + border-collapse: collapse; + border-spacing: 0; + font: normal 11px Arial, sans-serif; +} + +.zui-table thead tr th { + background-color: #ddefef; + border: solid 1px #ddeeee; + color: #336b6b; + padding: 5px; + text-align: left; + text-shadow: 1px 1px 1px #fff; +} + +.zui-table tbody td { + border: dotted 1px #ddeeee; + color: #333; + padding: 0px; + text-shadow: 1px 1px 1px #fff; + border-bottom: none; + border-top: none; +} + +.zui-table-rounded { + border: none; +} + +.zui-table-rounded thead th { + background-color: #cfad70; + border: none; + text-shadow: 1px 1px 1px #ccc; + color: #333; +} + +.zui-table-rounded thead th:first-child { + border-radius: 10px 0 0 0; +} + +.zui-table-rounded thead th:last-child { + border-radius: 0 10px 0 0; +} + +.zui-table-rounded tbody tr td { + border: none; + border-top: dotted 1px #09840f; + background-color: #eed592; + border-bottom: none; +} + +.zui-table-rounded tbody tr:last-child td:first-child { + border-radius: 0 0 0 10px; +} + +.zui-table-rounded tbody tr:last-child td:last-child { + border-radius: 0 0 10px 0; +} + +.zui-table-min { + height: 0px; +} + +.Color1 { + border-color: #E8E9F0; +} + +.Color2 { + background-color: #E8E9F0; +} + +.btn-customColor { + background-color: blue; + color: white; +} diff --git a/src/css/generic01.css b/src/css/generic01.css index dd7f1e7..0c596be 100644 --- a/src/css/generic01.css +++ b/src/css/generic01.css @@ -20,9 +20,9 @@ } .modal-90w { - width: 90%; - /* max-height: 90% !important; */ - max-height: 'calc(100vh - 50px)' !important; + width: 90%; + max-width: none !important; + max-height: none !important; } .modal-innerDiv { diff --git a/src/css/heineken.css b/src/css/heineken.css deleted file mode 100644 index 286be33..0000000 --- a/src/css/heineken.css +++ /dev/null @@ -1,101 +0,0 @@ -body { - width: 100% !important; - font-family: Verdana, 'Flamenco', serif; -} - -h1 { - color: #fff; - font-weight: normal; - font-size: 1rem; - text-align: center; -} - -/*_________________ Accordion -________________________________________*/ -.accordion { - position: relative; - margin: 60px auto; - width: 250px; -} - -[id*="open-accordion"], -[id*="close-accordion"] { - background: #153f8e; - border-bottom: 1px solid #fff; - line-height: 40px; - height: 40px; - display: block; - margin: 0 auto; - position: relative; - width: 99%; -} - -[id*="close-accordion"] { - display: none; -} - -.accordion a { - color: #d8f0ef; - font-size: 1em; - font-weight: normal; - padding-left: 2%; - text-decoration: none; - text-shadow: none; - background-color: #153f8e; -} - -[id*="open-accordion"]:after, -[id*="close-accordion"]:after { -/* content: ""; - border-left: 10px solid transparent; - border-right: 10px solid transparent; - border-top: 10px solid rgba(255, 255, 255, 0.6);*/ - position: absolute; - right: 5px; - top: 15px; - z-index: 999; - transform: rotate(-90deg); - -webkit-transform: rotate(-90deg); -} - -.target-fix { - display: block; - top: 0; - left: 0; - position: fixed; -} - -.accordion-content { - color: #000000; - background: #153f8e; - height: 0; - margin: -1px auto 0; - /* padding: 0 2.5%; */ - position: relative; - overflow: hidden; - width: 90%; - transition: all 0.1s ease; - -webkit-transition: all 0.1s ease; - -moz-transition: all 0.1s ease; -} - -.accordion span:target~.accordion-content { - display: block; - height: auto; - padding-bottom: 25px; - padding-top: 10px; -} - -.accordion span:target~[id*="close-accordion"] { - display: block; -} - -.accordion span:target~[id*="open-accordion"] { - display: none; -} - -.accordion span:target~[id*="close-accordion"]:after { - border-top: 10px solid #333; - transform: rotate(0deg); - -webkit-transform: rotate(0deg); -} \ No newline at end of file diff --git a/src/css/heineken1.css b/src/css/heineken1.css deleted file mode 100644 index 496738f..0000000 --- a/src/css/heineken1.css +++ /dev/null @@ -1,91 +0,0 @@ -* { - margin: 0; - padding: 0; - font-family: sans-serif; - font-size: 13px; - list-style: none; - text-decoration: none; -} - -body {} - -.middle { - position: absolute; - top: 50%; -/* left: 50%; */ - transform: translate(-50%, -50%); -} - -.menu { - width: 200px; - border-radius: 8px; - overflow: hidden; -} - -.item { - border-top: 1px solid #2980b9; - overflow: hidden; -} - -/* .btn { - display: block; - padding: 16px 20px; - background: #3498db; - color: white; - position: relative; -} */ - -/* .btn:before { - content: ""; - position: absolute; - width: 14px; - height: 14px; - background-color: #3498db; - left: 20px; - bottom: -7px; - transform: rotate(45deg); -} */ - -.btn i { - margin-right: 10px; -} - -.smenu { - background: #333; - overflow: hidden; - transition: max-height 0.3s; - max-height: 0; -} - -.smenu a { - display: block; - padding: 16px 26px; - color: #fff; - font-size: 13px; - /* margin: 4px 0; */ - position: relative; -} - -.smenu a:before { - content: ""; - position: absolute; - width: 4px; - height: 100%; - background: #3498db; - left: 0; - top: 0; - transition: 0.3s; - opacity: 0; -} - -.smenu a:hover:before { - opacity: 1; -} - -.item:target .smenu { - max-height: 15em; -} - -.card { - height: 100%; -} \ No newline at end of file diff --git a/src/css/printableArea.css b/src/css/printableArea.css deleted file mode 100644 index 8613e2a..0000000 --- a/src/css/printableArea.css +++ /dev/null @@ -1,24 +0,0 @@ -.printableDiv { - background-color: #ffffff; - width: 100%; - height: calc(100vh); - border: none !important; - border-radius: 5px; - margin: auto; - text-align: center; -} - -table { - background-color: #ffffff; - border: none !important; - display: inline-table; -} - -.noneBorder { - border-top: 2 px solid #ffffff !important; - border-bottom: 2 px solid #ffffff !important; -} - - td:nth-child(odd) { - background-color: #ffffff; - } \ No newline at end of file diff --git a/src/css/reactCaptcha.css b/src/css/reactCaptcha.css new file mode 100644 index 0000000..1598ea9 --- /dev/null +++ b/src/css/reactCaptcha.css @@ -0,0 +1,12 @@ +/* .react-captcha { + background-color: #000000; +} + */ +/* .react-captcha-icon-wrapper { +} + */ + +.react-captcha-canvas{ + background-color: rgb(242, 242, 248); + color: #fff; +} \ No newline at end of file diff --git a/src/images/Clean.png b/src/images/Clean.png new file mode 100644 index 0000000000000000000000000000000000000000..ca15cd4357e7fe43c9333104370ad4a00936ace2 GIT binary patch literal 508 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 bH-P^K1^S-%t$;mJ00000NkvXXu0mjfSP$Ml literal 0 HcmV?d00001 diff --git a/src/images/caret.png b/src/images/caret.png new file mode 100644 index 0000000000000000000000000000000000000000..0875dbf13d227a121bf5bb5323dd5b6b9dfd4741 GIT binary patch literal 378 zcmV-=0fqjFP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&0S`$;K~z{r?bkgD z!Y~|%;j}1D-oRZKFW@zF@&cYh7f;Z!lNZp%L+GHBis&8O1Ff|FB&CFqrul&AkasZ_ z`hQ9kF%hMd{Gzye^dn>@+`VmaX Y2XaD^UQc(sg#Z8m07*qoM6N<$g15|`b^rhX literal 0 HcmV?d00001 diff --git a/src/index.tsx b/src/index.tsx index 5b34207..59a5756 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react' -import ReactDOM from 'react-dom' +import ReactDOM from 'react-dom/client' import 'bootstrap/dist/css/bootstrap.min.css' import App from './App' import reportWebVitals from './reportWebVitals' @@ -11,12 +11,15 @@ import CatTabuladores from './Components/Catalogos/CatTabulador/CatTabulador' import DashboardCorresponsales from './Components/Dashboard/DashboardCorresponsales' import Dashboard from './Components/Dashboard/Dashboard' import Logout from './Components/Logout/logout' -import ResetCredentials from './Components/resetCredentials/resetCredentials' import Register from './Components/Register/register' import RegisterPermisoClientes from './Components/registerPermisoClientes/registerPermisoClientes' import TraficoCorresponsales from './Components/Corresponsales/TraficoCorresponsales' import RptCorresponsalesTraficos from './Components/Reportes/RptCorresponsalesTraficos' import RptCorresponsalesTraficosHst from './Components/Reportes/RptCorresponsalesTraficosHst' +import ForgotPassword from './Components/Login/ForgotPassword' +import PIN from './Components/Login/PIN' +import UserControl from './Components/UserControl/UserControl' +import ResetCredentials from './Components/Login/ResetCredentials' require (`./css/${process.env.REACT_APP_ENVIRONMENT}-home.css`) function PageNotFound() { @@ -27,7 +30,8 @@ function PageNotFound() { ) } -ReactDOM.render( +const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); +root.render( @@ -36,8 +40,11 @@ ReactDOM.render( }> } /> } /> + } /> + } /> + } /> } /> - } /> + } /> } /> - , - document.getElementById('root') + ) reportWebVitals() diff --git a/yarn.lock b/yarn.lock index 868a4a0..a39712e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3176,7 +3176,7 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -camelcase@^5.3.1: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -7875,6 +7875,13 @@ react-bootstrap@^2.7.4: uncontrollable "^7.2.1" warning "^4.0.3" +react-captchaa@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/react-captchaa/-/react-captchaa-1.0.13.tgz#ee1d95e4d2ed11481c11c462881a897820b6fe0f" + integrity sha512-3z/734oX4PzCs9DlNbkroaFlPGTI0skPSFW2HrM+5I5wS0Mjo3nbDMxuFy/YjUXIuqV0C/Lgdfb0saGkkMnUgg== + dependencies: + react-icons-wrapper "^1.0.8" + react-currency-format@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/react-currency-format/-/react-currency-format-1.1.0.tgz#efef7f18045fc09a987de270b144f5eec8801dab" @@ -7975,6 +7982,20 @@ react-flexy-table@^1.8.11: resolved "https://registry.yarnpkg.com/react-flexy-table/-/react-flexy-table-1.8.11.tgz#c9a1c00ff06a2afdcacdddb990fe7a16ef1b667c" integrity sha512-/3rBki6JDaa8gvRUqlJPoL9nC/sGnxX8YApT+QIStOXYTZ4jE0o5WOVd45hT+UU5D//xB+OSCVl6KyZAsT+1cQ== +react-icons-wrapper@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/react-icons-wrapper/-/react-icons-wrapper-1.0.8.tgz#5d2a9447bc13fcdef405a84ef622b04daf697a37" + integrity sha512-6nO/Z5+l/5MxXS6LeMKNoaYBo8MFKg+mC4/ZAJ6q2EGfTg6LoOarcOWHyYF7oNbGPG3jv0/UyA2CkwfpT7eqpw== + dependencies: + react-icons "^3.10.0" + +react-icons@^3.10.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.11.0.tgz#2ca2903dfab8268ca18ebd8cc2e879921ec3b254" + integrity sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q== + dependencies: + camelcase "^5.0.0" + react-icons@^4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.8.0.tgz#621e900caa23b912f737e41be57f27f6b2bff445"