Se agegro la funcionalidad de la edicion en el rpt de exelworkingHour en fronted junto con algunos archivos mas.

master
Luis Rendon 1 day ago
parent 1ed4b2e05d
commit e529819ff7
  1. 1
      package.json
  2. 625
      src/Componest/Catalogos/CatWorkingHours/FileUploadExelWorkingHours.tsx
  3. 140
      src/Componest/Loging/ForgotPassword.tsx
  4. 148
      src/Componest/Loging/ResetCredentials.tsx
  5. 16
      src/DTO/Reportes/DTOClocks.ts
  6. 7
      src/Services/Reportes/reportes.services.ts
  7. 23
      yarn.lock

@ -18,6 +18,7 @@
"jwt-decode": "3.1.2",
"react": "^18.3.1",
"react-bootstrap": "^2.10.4",
"react-captchaa": "^1.0.13",
"react-data-table-component": "^7.6.2",
"react-dom": "^18.3.1",
"react-icons": "^5.2.1",

@ -1,8 +1,8 @@
import * as React from 'react';
import { useState } from 'react';
import { Button, Card, Form, Col, Row, ToastHeader, } from 'react-bootstrap';
import { BsSearch, BsFileEarmarkExcel } from 'react-icons/bs'
import { Button, Card, Form, Col, Row, ToastHeader, Modal, Alert, FormGroup, FormLabel, } from 'react-bootstrap';
import { BsSearch, BsFileEarmarkExcel, BsFillPencilFill } from 'react-icons/bs'
import ExelServices from '../../../Utils/ExelFiles/Exel.services';
import { FiSend } from "react-icons/fi";
import { MsgInformativo } from '../../../Utils/Toast/msgInformativo';
@ -10,6 +10,9 @@ import * as XLSX from 'xlsx';
import DataTable from 'react-data-table-component';
import { DTOWorkingHours } from '../../../DTO/DTOWorkingHours';
import reportesServices from '../../../Services/Reportes/reportes.services';
import { IconContext } from 'react-icons';
import { date } from 'yup';
import { DTOClocks } from '../../../DTO/Reportes/DTOClocks';
export default function FileUploadExel() {
@ -26,6 +29,19 @@ export default function FileUploadExel() {
const [filteredData, setFilteredData] = useState<Array<DTOWorkingHours>>(
[]
)
const [ModalEdit, setModalEdit ] = useState(false)
const [EmpNo, setEmpNo] = useState('')
const [Datee, setDate] = useState('')
const [ClockIn1 , setClockIn1] = useState ('')
const [ClockOut1, setClockOut1] = useState('')
const [ClockIn2 , setClockIn2] = useState ('')
const [ClockOut2, setClockOut2] = useState('')
const [ClockIn3 , setClockIn3] = useState ('')
const [ClockOut3, setClockOut3] = useState('')
const [ClockIn4 , setClockIn4] = useState ('')
const [ClockOut4, setClockOut4] = useState('')
const [ClockIn5 , setClockIn5] = useState ('')
const [ClockOut5, setClockOut5] = useState('')
@ -165,20 +181,110 @@ export default function FileUploadExel() {
{
name: 'TotalHoursWorked',
width: '130px',
width: '150px',
selector : (row : DTOWorkingHours) => row.totalHoursWorked,
sortable : true,
filter : true
}
},
{
name: 'Edita',
width: '60px',
cell: (row: DTOWorkingHours) => (
<Button
size="sm"
variant="light"
style={{ textAlign: 'right' }}
onClick={() => handleEdit(row)}
>
<IconContext.Provider value={{ color: 'blue', size: '15px' }}>
<BsFillPencilFill />
</IconContext.Provider>{' '}
</Button>
),
},
]
const handleEdit = (row: DTOWorkingHours) => {
setEmpNo(row.empNo);
setDate(row.date);
setClockIn1(row.clockIn1);
setClockOut1(row.clockOut1);
setClockIn2(row.clockIn2);
setClockOut2(row.clockOut2);
setClockIn3(row.clockIn3);
setClockOut3(row.clockOut3);
setClockIn4(row.clockIn4);
setClockOut4(row.clockOut4);
setClockIn5(row.clockIn5);
setClockOut5(row.clockOut5);
setModalEdit(true);
};
const haveSaveChanges = () => {
const data: DTOWorkingHours = {
empNo: EmpNo,
date: Datee,
clockIn1: ClockIn1,
clockOut1: ClockOut1,
clockIn2: ClockIn2,
clockOut2: ClockOut2,
clockIn3: ClockIn3,
clockOut3: ClockOut3,
clockIn4: ClockIn4,
clockOut4: ClockOut4,
clockIn5: ClockIn5,
clockOut5: ClockOut5,
acNo: '',
no: '',
name: '',
totalInTime: '',
totalHoursWorked: ''
};
reportesServices.PostTotalHours(data)
.then((response ) => {
setToastMsg('Se actualizó el campo');
setToastHeader('Informativo');
setToastColor('Success');
setShowMsg(true);
generarReporte()
})
.catch((e: Error) => {
setToastMsg('No se ha podido actualizar los datos');
setToastHeader('Error');
setToastColor('danger');
setShowToast(true);
});
};
function currentDate (): string {
var today = new Date()
var dd = String(today.getDate()).padEnd(2,'0')
@ -208,9 +314,10 @@ export default function FileUploadExel() {
} )
}
}
const donwloadExel = () => {
exportExcel(filteredData, 'Reportes de Horas Trabajadas')
}
@ -220,7 +327,6 @@ export default function FileUploadExel() {
const filtraReporte = (e: any ) => {
const searchText = e.target.value.toLowerCase();
setFiltro(searchText)
@ -285,11 +391,6 @@ export default function FileUploadExel() {
const handleSendFiles = async () => {
if (!WorkingHoursFile) {
setToastMsg('No hay archivos para enviar');
@ -326,6 +427,26 @@ export default function FileUploadExel() {
const horas = Array.from({ length: 24 }, (_, i) => i);
const minutos = Array.from({ length: 60 }, (_, i) => i);
const formatHora = (hora: any, minuto: any) => {
const suffix = hora < 12 ? 'AM' : 'PM';
hora = hora % 12 || 12;
return `${hora}:${minuto.toString().padStart(2, '0')}:00 ${suffix}`;
};
return (
<div className="mt-2">
<Card>
@ -450,6 +571,405 @@ return (
</Card.Body>
</Card>
{/* <Modal show={ModalEdit} onHide={() => setModalEdit(false)}>
<Modal.Header closeButton>
<Modal.Title>Editar Registro</Modal.Title>
</Modal.Header>
<Modal.Body>
<Form>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>EmpNo</Form.Label>
<Form.Control
type="text"
value={EmpNo}
onChange={(e) => setEmpNo(e.target.value)}
/>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>Date</Form.Label>
<Form.Control
type="text"
value={Datee}
onChange={(e) => setDate(e.target.value)}
/>
</Form.Group>
</Col>
</Row>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>ClockIn1</Form.Label>
<Form.Control
type="text"
value={ClockIn1}
onChange={(e) => setClockIn1(e.target.value)}
/>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>ClockOut1</Form.Label>
<Form.Control
type="text"
value={ClockOut1}
onChange={(e) => setClockOut1(e.target.value)}
/>
</Form.Group>
</Col>
</Row>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>ClockIn2</Form.Label>
<Form.Control
type="text"
value={ClockIn2}
onChange={(e) => setClockIn2(e.target.value)}
/>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>ClockOut2</Form.Label>
<Form.Control
type="text"
value={ClockOut2}
onChange={(e) => setClockOut2(e.target.value)}
/>
</Form.Group>
</Col>
</Row>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>ClockIn3</Form.Label>
<Form.Control
type="text"
value={ClockIn3}
onChange={(e) => setClockIn3(e.target.value)}
/>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>ClockOut3</Form.Label>
<Form.Control
type="text"
value={ClockOut3}
onChange={(e) => setClockOut3(e.target.value)}
/>
</Form.Group>
</Col>
</Row>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>ClockIn4</Form.Label>
<Form.Control
type="text"
value={ClockIn4}
onChange={(e) => setClockIn4(e.target.value)}
/>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>ClockOut4</Form.Label>
<Form.Control
type="text"
value={ClockOut4}
onChange={(e) => setClockOut4(e.target.value)}
/>
</Form.Group>
</Col>
</Row>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>ClockIn5</Form.Label>
<Form.Control
type="text"
value={ClockIn5}
onChange={(e) => setClockIn5(e.target.value)}
/>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>ClockOut5</Form.Label>
<Form.Control
type="text"
value={ClockOut5}
onChange={(e) => setClockOut5(e.target.value)}
/>
</Form.Group>
</Col>
</Row>
</Form>
</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={() => setModalEdit(false)}>
Cerrar
</Button>
<Button variant="primary" onClick={ haveSaveChanges }>
Guardar Cambios
</Button>
</Modal.Footer>
</Modal> */}
<Modal show={ModalEdit} onHide={() => setModalEdit(false)}>
<Modal.Header closeButton>
<Modal.Title>Editar Registro</Modal.Title>
</Modal.Header>
<Modal.Body>
<Form>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>EmpNo</Form.Label>
<Form.Control
type="text"
value={EmpNo}
onChange={(e) => setEmpNo(e.target.value)}
disabled={EmpNo !== ""} // Deshabilita el campo si ya tiene valor
/>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>Date</Form.Label>
<Form.Control
type="text"
value={Datee}
onChange={(e) => setDate(e.target.value)}
disabled={Datee !== ""} // Deshabilita el campo si ya tiene valor
/>
</Form.Group>
</Col>
</Row>
<Row>
<Col md={6}>
<Form.Group>
<Form.Label>ClockIn1</Form.Label>
<Form.Select value={ClockIn1} onChange={(e) => setClockIn1(e.target.value)}
disabled={ClockIn1 !== ""}>
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
<Col md={6}>
<Form.Group>
<Form.Label>ClockOut1</Form.Label>
<Form.Select value={ClockOut1} onChange={(e) => setClockOut1(e.target.value)} disabled={ClockOut1 !== ""} >
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
</Row>
<Row>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockIn2</FormLabel>
<Form.Select value={ClockIn2} onChange={ (e) => setClockIn2(e.target.value) } >
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockOut2</FormLabel>
<Form.Select value={ClockOut2} onChange={ (e) => setClockOut2(e.target.value) } >
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
</Row>
<Row>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockIn3</FormLabel>
<Form.Select value={ClockIn3} onChange={ (e) => setClockIn3(e.target.value) } >
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockOut3</FormLabel>
<Form.Select value={ClockOut3} onChange={ (e) => setClockOut3(e.target.value) }>
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
</Row>
<Row>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockIn4</FormLabel>
<Form.Select value={ClockIn4} onChange={ (e) => setClockIn4(e.target.value) }>
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockOut4</FormLabel>
<Form.Select value={ClockOut4} onChange={ (e) => setClockOut4(e.target.value) } >
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
</Row>
<Row>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockIn5</FormLabel>
<Form.Select value={ClockIn5} onChange={ (e) => setClockIn5(e.target.value) } >
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
<Col md = {6}>
<Form.Group>
<FormLabel>ClockOut5</FormLabel>
<Form.Select value={ClockOut5} onChange={ (e) => setClockOut5(e.target.value) } >
<option value="">Seleccione hora</option>
{horas.map((hora) =>
minutos.map((minuto) => (
<option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
{formatHora(hora, minuto)}
</option>
))
)}
</Form.Select>
</Form.Group>
</Col>
</Row>
</Form>
</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={() => setModalEdit(false)}>
Cerrar
</Button>
<Button variant="primary" onClick={haveSaveChanges}>
Guardar Cambios
</Button>
</Modal.Footer>
</Modal>
<Card className="mt-3">
<Card.Body>
<div className="ag-theme-alpine" style={{ height: 500, width: '100%' }}>
@ -472,3 +992,86 @@ return (
</div>
);
}
// return (
// <Modal show={ModalEdit} onHide={() => setModalEdit(false)}>
// <Modal.Header closeButton>
// <Modal.Title>Editar Registro</Modal.Title>
// </Modal.Header>
// <Modal.Body>
// <Form>
// <Row>
// <Col md={6}>
// <Form.Group>
// <Form.Label>EmpNo</Form.Label>
// <Form.Control
// type="text"
// value={EmpNo}
// onChange={(e) => setEmpNo(e.target.value)}
// />
// </Form.Group>
// </Col>
// <Col md={6}>
// <Form.Group>
// <Form.Label>Date</Form.Label>
// <Form.Control
// type="text"
// value={Datee}
// onChange={(e) => setDate(e.target.value)}
// />
// </Form.Group>
// </Col>
// </Row>
// <Row>
// <Col md={6}>
// <Form.Group>
// <Form.Label>ClockIn1</Form.Label>
// <Form.Select value={ClockIn1} onChange={(e) => setClockIn1(e.target.value)}>
// <option value="">Seleccione hora</option>
// {horas.map((hora) =>
// minutos.map((minuto) => (
// <option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
// {formatHora(hora, minuto)}
// </option>
// ))
// )}
// </Form.Select>
// </Form.Group>
// </Col>
// <Col md={6}>
// <Form.Group>
// <Form.Label>ClockOut1</Form.Label>
// <Form.Select value={ClockOut1} onChange={(e) => setClockOut1(e.target.value)}>
// <option value="">Seleccione hora</option>
// {horas.map((hora) =>
// minutos.map((minuto) => (
// <option key={`${hora}-${minuto}`} value={formatHora(hora, minuto)}>
// {formatHora(hora, minuto)}
// </option>
// ))
// )}
// </Form.Select>
// </Form.Group>
// </Col>
// </Row>
// {/* Repetir para ClockIn2, ClockOut2, etc. */}
// </Form>
// </Modal.Body>
// <Modal.Footer>
// <Button variant="secondary" onClick={() => setModalEdit(false)}>
// Cerrar
// </Button>
// <Button variant="primary" onClick={haveSaveChanges}>
// Guardar Cambios
// </Button>
// </Modal.Footer>
// </Modal>
// );
// };

@ -1,78 +1,78 @@
import * as React from 'react'
import { Button, Card, Col, Form, Row } from 'react-bootstrap'
import logo from '../../images/grupo-promax-b.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 ILogin from '../../interfaces/Ilogin'
import { AxiosError } from 'axios'
import { useNavigate } from 'react-router-dom'
import { useState } from 'react'
import * as React from "react";
import { Button, Card, Col, Form, Row } from "react-bootstrap";
import logo from "../../images/grupo-promax-b.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 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 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
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
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')
localStorage.setItem("User", JSON.stringify(Usuario));
navigate("/PIN");
})
.catch((e: AxiosError) => {
setShow(true)
setMsg('Usuario no existe')
setHeader('Error')
})
}
setShow(true);
setMsg("Usuario no existe");
setHeader("Error");
});
};
return (
<div>
<Row style={{ paddingTop: '6rem' }}>
<Row style={{ paddingTop: "6rem" }}>
<Col xs={12}></Col>
</Row>
<Row>
<Col xs={5}>&nbsp;</Col>
<Col xs={2}>
<div
className='shadow-lg bg-white rounded'
style={{ marginLeft: 'auto', marginRight: 'auto', width:'125%' }}
className="shadow-lg bg-white rounded"
style={{ marginLeft: "auto", marginRight: "auto", width: "125%" }}
>
<Card className='Color1'>
<Card className="Color1">
<Card.Header>
<Row style={{ backgroundColor: '#ffffff' }}>
<Row style={{ backgroundColor: "#ffffff" }}>
<Col xs={12}>
<img
src={logo}
alt='ZINC Internacional'
style={{ width: '70%' }}
alt="Adminusa"
style={{ width: "70%" }}
></img>
</Col>
</Row>
@ -82,16 +82,16 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
<Row>
<Col xs={12}>&nbsp;</Col>
</Row>
<Form id='login-form' className='form'>
<Form id="login-form" className="form">
<Row>
<Col>
<Form.Control
id='Usuario'
className='form-control'
placeholder='Usuario'
id="Usuario"
className="form-control"
placeholder="Usuario"
value={Usuario}
onChange={(e) => {
setUsuario(e.target.value)
setUsuario(e.target.value);
}}
/>
</Col>
@ -103,23 +103,23 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
<Col xs={12}>
<ReactCaptchaa
captchaText={(captchaText: string) => {
setCaptchaText(captchaText)
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'}
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'
"0123456789abcdefghijklmnopqrstuvwxzABCDEFGHIJKLMNOPQRSTUVWXYZ"
}
/>
</Col>
@ -127,12 +127,12 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
<Row>
<Col xs={12}>
<Form.Control
id='Captcha'
className='form-control'
placeholder='Teclee los caracteres de la imagen'
id="Captcha"
className="form-control"
placeholder="Teclee los caracteres de la imagen"
value={Captcha}
onChange={(e) => {
setCaptcha(e.target.value)
setCaptcha(e.target.value);
}}
/>
</Col>
@ -142,13 +142,13 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
</Row>
</Form>
</Card.Text>
<div className='d-grid gap-1'></div>
<div className='d-grid gap-1'>
<div className="d-grid gap-1"></div>
<div className="d-grid gap-1">
<Button
variant='customColor'
size='lg'
variant="customColor"
size="lg"
onClick={() => {
validateCaptcha()
validateCaptcha();
}}
>
Continuar
@ -167,9 +167,9 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
msgColor={msgColor}
time={2000}
closeToast={function (arg: boolean): void {
setShow(false)
setShow(false);
}}
/>
</div>
)
);
}

@ -1,4 +1,4 @@
import React, { FC, useState } from 'react'
import React, { FC, useState } from "react";
import {
Button,
Card,
@ -7,89 +7,89 @@ import {
Row,
Toast,
ToastContainer,
} from 'react-bootstrap'
import { MsgInformativo } from '../../Utils/Toast/msgInformativo'
import DTOUsuario from '../../DTO/DTOUsuario'
import logo from '../../images/grupo-promax-b.png'
import AuthDS from '../../Services/Auth/Auth.Service'
import { DTOResetPassword } from '../../DTO/DTOResetPassword'
} from "react-bootstrap";
import { MsgInformativo } from "../../Utils/Toast/msgInformativo";
import DTOUsuario from "../../DTO/DTOUsuario";
import logo from "../../images/grupo-promax-b.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 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 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.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
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
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
})
}
setShow(true);
setMsg("Ocurrio un error");
setHeader("Error");
return false;
});
};
const closeToast = (show: boolean): void => {
setShowMsg(false)
}
setShowMsg(false);
};
return (
<div>
<div>
<Row style={{ paddingTop: '6rem' }}>
<Row style={{ paddingTop: "6rem" }}>
<Col xs={12}></Col>
</Row>
<Row>
<Col xs={5}>&nbsp;</Col>
<Col xs={2}>
<div className='shadow-lg bg-white rounded'>
<Card style={{ width: '100%' }} className='Color1'>
<div className="shadow-lg bg-white rounded">
<Card style={{ width: "100%" }} className="Color1">
<Card.Header>
<Row style={{ backgroundColor: '#ffffff' }}>
<Row style={{ backgroundColor: "#ffffff" }}>
<Col xs={12}>
<img
src={logo}
alt=' BookPrecta Internacional'
style={{ width: '70%' }}
alt=" Adminusa Internacional"
style={{ width: "70%" }}
></img>
</Col>
</Row>
@ -98,9 +98,9 @@ export default function ResetCredentials(props: IProps) {
<Card.Text>
<Row
style={{
backgroundColor: '#572364',
color: '#ffffff',
fontSize: '19px',
backgroundColor: "#572364",
color: "#ffffff",
fontSize: "19px",
}}
>
<Col xs={12}>Proporcione su nueva contraseña?</Col>
@ -108,14 +108,14 @@ export default function ResetCredentials(props: IProps) {
<Row>
<Col xs={12}>&nbsp;</Col>
</Row>
<Form id='login-form' className='form'>
<Row style={{ height: '0px' }}>
<Form id="login-form" className="form">
<Row style={{ height: "0px" }}>
<Col>
<Form.Control
style={{ visibility: 'hidden' }}
id='PIN'
className='form-control'
placeholder='PIN'
style={{ visibility: "hidden" }}
id="PIN"
className="form-control"
placeholder="PIN"
value={PIN}
/>
</Col>
@ -123,13 +123,13 @@ export default function ResetCredentials(props: IProps) {
<Row>
<Col xs={12}>
<Form.Control
id='Contrasena'
className='form-control'
placeholder='Contraseña'
type='password'
id="Contrasena"
className="form-control"
placeholder="Contraseña"
type="password"
value={Contrasena}
onChange={(e) => {
setContrasena(e.target.value)
setContrasena(e.target.value);
}}
/>
</Col>
@ -140,13 +140,13 @@ export default function ResetCredentials(props: IProps) {
<Row>
<Col xs={12}>
<Form.Control
id='Contrasena'
className='form-control'
placeholder='Confirme contraseña'
type='password'
id="Contrasena"
className="form-control"
placeholder="Confirme contraseña"
type="password"
value={ConfirmaContrasena}
onChange={(e) => {
setConfirmaContrasena(e.target.value)
setConfirmaContrasena(e.target.value);
}}
/>
</Col>
@ -156,12 +156,12 @@ export default function ResetCredentials(props: IProps) {
</Row>
</Form>
</Card.Text>
<div className='d-grid gap-2'>
<div className="d-grid gap-2">
<Button
variant='customColor'
size='lg'
variant="customColor"
size="lg"
onClick={() => {
validaFormulario()
validaFormulario();
}}
>
reset
@ -180,7 +180,7 @@ export default function ResetCredentials(props: IProps) {
header={header}
msgColor={msgColor}
closeToast={function (arg: boolean): void {
setShow(false)
setShow(false);
}}
/>
</div>
@ -193,5 +193,5 @@ export default function ResetCredentials(props: IProps) {
closeToast={closeToast}
/> */}
</div>
)
);
}

@ -0,0 +1,16 @@
export interface DTOClocks {
empNo : string,
date : string,
clockIn1 : string,
clockOut1 : string,
clockIn2 : string,
clockOut2 : string,
clockIn3 : string,
clockOut3 : string,
clockIn4 : string,
clockOut4 : string,
clockIn5 : string,
clockOut5 : string
}

@ -2,6 +2,7 @@ import DtoPrecuentaCheques from '../../Componest/Catalogos/CatRelacionBookPrecta
import { DTORelPreChe } from '../../DTO/DTORelPreChe'
import { DTOWorkingHours } from '../../DTO/DTOWorkingHours'
import { DTOTotalHours } from '../../DTO/Reportes/DTOTotalHours'
import { DTOClocks } from '../../DTO/Reportes/DTOClocks'
import http from '../common/http-common'
@ -48,5 +49,11 @@ class reportsDataService {
PostTotalHours(data: DTOWorkingHours) {
return http.post<Array<DTOWorkingHours>>
( "/Reportes/UpdateWorkingHours", data)
}
}
export default new reportsDataService()

@ -3269,7 +3269,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==
@ -8213,6 +8213,13 @@ react-bootstrap@^2.10.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-data-table-component@^7.6.2:
version "7.6.2"
resolved "https://registry.yarnpkg.com/react-data-table-component/-/react-data-table-component-7.6.2.tgz#298e3f9c27d42fb5ae06c2af6b13663c15577faf"
@ -8268,6 +8275,20 @@ react-fast-compare@^2.0.1:
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
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@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a"

Loading…
Cancel
Save