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

master
Luis Rendon 2 days 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. 146
      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", "jwt-decode": "3.1.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-bootstrap": "^2.10.4", "react-bootstrap": "^2.10.4",
"react-captchaa": "^1.0.13",
"react-data-table-component": "^7.6.2", "react-data-table-component": "^7.6.2",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-icons": "^5.2.1", "react-icons": "^5.2.1",

@ -1,8 +1,8 @@
import * as React from 'react'; import * as React from 'react';
import { useState } from 'react'; import { useState } from 'react';
import { Button, Card, Form, Col, Row, ToastHeader, } from 'react-bootstrap'; import { Button, Card, Form, Col, Row, ToastHeader, Modal, Alert, FormGroup, FormLabel, } from 'react-bootstrap';
import { BsSearch, BsFileEarmarkExcel } from 'react-icons/bs' import { BsSearch, BsFileEarmarkExcel, BsFillPencilFill } from 'react-icons/bs'
import ExelServices from '../../../Utils/ExelFiles/Exel.services'; import ExelServices from '../../../Utils/ExelFiles/Exel.services';
import { FiSend } from "react-icons/fi"; import { FiSend } from "react-icons/fi";
import { MsgInformativo } from '../../../Utils/Toast/msgInformativo'; import { MsgInformativo } from '../../../Utils/Toast/msgInformativo';
@ -10,6 +10,9 @@ import * as XLSX from 'xlsx';
import DataTable from 'react-data-table-component'; import DataTable from 'react-data-table-component';
import { DTOWorkingHours } from '../../../DTO/DTOWorkingHours'; import { DTOWorkingHours } from '../../../DTO/DTOWorkingHours';
import reportesServices from '../../../Services/Reportes/reportes.services'; 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() { export default function FileUploadExel() {
@ -26,6 +29,19 @@ export default function FileUploadExel() {
const [filteredData, setFilteredData] = useState<Array<DTOWorkingHours>>( 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', name: 'TotalHoursWorked',
width: '130px', width: '150px',
selector : (row : DTOWorkingHours) => row.totalHoursWorked, selector : (row : DTOWorkingHours) => row.totalHoursWorked,
sortable : true, sortable : true,
filter : 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 { function currentDate (): string {
var today = new Date() var today = new Date()
var dd = String(today.getDate()).padEnd(2,'0') var dd = String(today.getDate()).padEnd(2,'0')
@ -208,9 +314,10 @@ export default function FileUploadExel() {
} ) } )
}
}
const donwloadExel = () => { const donwloadExel = () => {
exportExcel(filteredData, 'Reportes de Horas Trabajadas') exportExcel(filteredData, 'Reportes de Horas Trabajadas')
} }
@ -220,7 +327,6 @@ export default function FileUploadExel() {
const filtraReporte = (e: any ) => { const filtraReporte = (e: any ) => {
const searchText = e.target.value.toLowerCase(); const searchText = e.target.value.toLowerCase();
setFiltro(searchText) setFiltro(searchText)
@ -285,11 +391,6 @@ export default function FileUploadExel() {
const handleSendFiles = async () => { const handleSendFiles = async () => {
if (!WorkingHoursFile) { if (!WorkingHoursFile) {
setToastMsg('No hay archivos para enviar'); 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 ( return (
<div className="mt-2"> <div className="mt-2">
<Card> <Card>
@ -450,6 +571,405 @@ return (
</Card.Body> </Card.Body>
</Card> </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 className="mt-3">
<Card.Body> <Card.Body>
<div className="ag-theme-alpine" style={{ height: 500, width: '100%' }}> <div className="ag-theme-alpine" style={{ height: 500, width: '100%' }}>
@ -472,3 +992,86 @@ return (
</div> </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 * as React from "react";
import { Button, Card, Col, Form, Row } from 'react-bootstrap' import { Button, Card, Col, Form, Row } from "react-bootstrap";
import logo from '../../images/grupo-promax-b.png' import logo from "../../images/grupo-promax-b.png";
import { MsgInformativo } from '../../Utils/Toast/msgInformativo' import { MsgInformativo } from "../../Utils/Toast/msgInformativo";
import ReactCaptchaa from 'react-captchaa' import ReactCaptchaa from "react-captchaa";
import AuthDS from '../../Services/Auth/Auth.Service' import AuthDS from "../../Services/Auth/Auth.Service";
import 'react-captchaa/dist/index.css' import "react-captchaa/dist/index.css";
import '../../css/reactCaptcha.css' import "../../css/reactCaptcha.css";
import ILogin from '../../interfaces/Ilogin' import ILogin from "../../interfaces/Ilogin";
import { AxiosError } from 'axios' import { AxiosError } from "axios";
import { useNavigate } from 'react-router-dom' import { useNavigate } from "react-router-dom";
import { useState } from 'react' import { useState } from "react";
export interface IForgotPasswordProps {} export interface IForgotPasswordProps {}
export default function ForgotPassword(props: IForgotPasswordProps) { export default function ForgotPassword(props: IForgotPasswordProps) {
const navigate = useNavigate() const navigate = useNavigate();
const [Usuario, setUsuario] = useState('') const [Usuario, setUsuario] = useState("");
const [Contrasenia, setContrasenia] = useState('') const [Contrasenia, setContrasenia] = useState("");
const [Captcha, setCaptcha] = useState('') const [Captcha, setCaptcha] = useState("");
const [CaptchaText, setCaptchaText] = useState('') const [CaptchaText, setCaptchaText] = useState("");
const [show, setShow] = useState(false) const [show, setShow] = useState(false);
const [msg, setMsg] = useState('') const [msg, setMsg] = useState("");
const [header, setHeader] = useState('') const [header, setHeader] = useState("");
const [msgColor, setMsgColor] = useState('primary') const [msgColor, setMsgColor] = useState("primary");
const validateCaptcha = () => { const validateCaptcha = () => {
if (!Usuario.length) { if (!Usuario.length) {
setShow(true) setShow(true);
setMsg('El campo usuario no puede estar vacio') setMsg("El campo usuario no puede estar vacio");
setHeader('Error') setHeader("Error");
return return;
} }
if (Captcha !== CaptchaText) { if (Captcha !== CaptchaText) {
setShow(true) setShow(true);
setMsg('Captcha o usuario incorrecto') setMsg("Captcha o usuario incorrecto");
setHeader('Error') setHeader("Error");
return return;
} }
const data: ILogin = { const data: ILogin = {
Usuario: Usuario, Usuario: Usuario,
Contrasena: Contrasenia, Contrasena: Contrasenia,
} };
AuthDS.forgotPassword(data) AuthDS.forgotPassword(data)
.then((response: any) => { .then((response: any) => {
localStorage.setItem('User', JSON.stringify(Usuario)) localStorage.setItem("User", JSON.stringify(Usuario));
navigate('/PIN') navigate("/PIN");
}) })
.catch((e: AxiosError) => { .catch((e: AxiosError) => {
setShow(true) setShow(true);
setMsg('Usuario no existe') setMsg("Usuario no existe");
setHeader('Error') setHeader("Error");
}) });
} };
return ( return (
<div> <div>
<Row style={{ paddingTop: '6rem' }}> <Row style={{ paddingTop: "6rem" }}>
<Col xs={12}></Col> <Col xs={12}></Col>
</Row> </Row>
<Row> <Row>
<Col xs={5}>&nbsp;</Col> <Col xs={5}>&nbsp;</Col>
<Col xs={2}> <Col xs={2}>
<div <div
className='shadow-lg bg-white rounded' className="shadow-lg bg-white rounded"
style={{ marginLeft: 'auto', marginRight: 'auto', width:'125%' }} style={{ marginLeft: "auto", marginRight: "auto", width: "125%" }}
> >
<Card className='Color1'> <Card className="Color1">
<Card.Header> <Card.Header>
<Row style={{ backgroundColor: '#ffffff' }}> <Row style={{ backgroundColor: "#ffffff" }}>
<Col xs={12}> <Col xs={12}>
<img <img
src={logo} src={logo}
alt='ZINC Internacional' alt="Adminusa"
style={{ width: '70%' }} style={{ width: "70%" }}
></img> ></img>
</Col> </Col>
</Row> </Row>
@ -82,16 +82,16 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
<Row> <Row>
<Col xs={12}>&nbsp;</Col> <Col xs={12}>&nbsp;</Col>
</Row> </Row>
<Form id='login-form' className='form'> <Form id="login-form" className="form">
<Row> <Row>
<Col> <Col>
<Form.Control <Form.Control
id='Usuario' id="Usuario"
className='form-control' className="form-control"
placeholder='Usuario' placeholder="Usuario"
value={Usuario} value={Usuario}
onChange={(e) => { onChange={(e) => {
setUsuario(e.target.value) setUsuario(e.target.value);
}} }}
/> />
</Col> </Col>
@ -103,23 +103,23 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
<Col xs={12}> <Col xs={12}>
<ReactCaptchaa <ReactCaptchaa
captchaText={(captchaText: string) => { captchaText={(captchaText: string) => {
setCaptchaText(captchaText) setCaptchaText(captchaText);
}} }}
captchaLength={6} captchaLength={6}
captchaButtonClick={(e: any) => {}} captchaButtonClick={(e: any) => {}}
onCanvasClick={(e: any) => {}} onCanvasClick={(e: any) => {}}
height={150} height={150}
width={200} width={200}
iconName={'FiRefreshCw'} iconName={"FiRefreshCw"}
iconColor={'#fff'} iconColor={"#fff"}
fontSize={'3em'} fontSize={"3em"}
iconSize={'1em'} iconSize={"1em"}
containerClassName={'react-captcha'} containerClassName={"react-captcha"}
iconWrapperClassName={'react-captcha-icon-wrapper'} iconWrapperClassName={"react-captcha-icon-wrapper"}
canvasClassName={'react-captcha-canvas'} canvasClassName={"react-captcha-canvas"}
iconClassName={'react-captcha-icon'} iconClassName={"react-captcha-icon"}
charactersInclude={ charactersInclude={
'0123456789abcdefghijklmnopqrstuvwxzABCDEFGHIJKLMNOPQRSTUVWXYZ' "0123456789abcdefghijklmnopqrstuvwxzABCDEFGHIJKLMNOPQRSTUVWXYZ"
} }
/> />
</Col> </Col>
@ -127,12 +127,12 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
<Row> <Row>
<Col xs={12}> <Col xs={12}>
<Form.Control <Form.Control
id='Captcha' id="Captcha"
className='form-control' className="form-control"
placeholder='Teclee los caracteres de la imagen' placeholder="Teclee los caracteres de la imagen"
value={Captcha} value={Captcha}
onChange={(e) => { onChange={(e) => {
setCaptcha(e.target.value) setCaptcha(e.target.value);
}} }}
/> />
</Col> </Col>
@ -142,13 +142,13 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
</Row> </Row>
</Form> </Form>
</Card.Text> </Card.Text>
<div className='d-grid gap-1'></div> <div className="d-grid gap-1"></div>
<div className='d-grid gap-1'> <div className="d-grid gap-1">
<Button <Button
variant='customColor' variant="customColor"
size='lg' size="lg"
onClick={() => { onClick={() => {
validateCaptcha() validateCaptcha();
}} }}
> >
Continuar Continuar
@ -167,9 +167,9 @@ export default function ForgotPassword(props: IForgotPasswordProps) {
msgColor={msgColor} msgColor={msgColor}
time={2000} time={2000}
closeToast={function (arg: boolean): void { closeToast={function (arg: boolean): void {
setShow(false) setShow(false);
}} }}
/> />
</div> </div>
) );
} }

@ -1,4 +1,4 @@
import React, { FC, useState } from 'react' import React, { FC, useState } from "react";
import { import {
Button, Button,
Card, Card,
@ -7,89 +7,89 @@ import {
Row, Row,
Toast, Toast,
ToastContainer, ToastContainer,
} from 'react-bootstrap' } from "react-bootstrap";
import { MsgInformativo } from '../../Utils/Toast/msgInformativo' import { MsgInformativo } from "../../Utils/Toast/msgInformativo";
import DTOUsuario from '../../DTO/DTOUsuario' import DTOUsuario from "../../DTO/DTOUsuario";
import logo from '../../images/grupo-promax-b.png' import logo from "../../images/grupo-promax-b.png";
import AuthDS from '../../Services/Auth/Auth.Service' import AuthDS from "../../Services/Auth/Auth.Service";
import { DTOResetPassword } from '../../DTO/DTOResetPassword' import { DTOResetPassword } from "../../DTO/DTOResetPassword";
interface IProps {} interface IProps {}
export default function ResetCredentials(props: IProps) { export default function ResetCredentials(props: IProps) {
const [User, setUser] = useState(() => { const [User, setUser] = useState(() => {
const stickyValue = window.localStorage.getItem('User') const stickyValue = window.localStorage.getItem("User");
return stickyValue !== null ? JSON.parse(stickyValue) : '' return stickyValue !== null ? JSON.parse(stickyValue) : "";
}) });
const [PIN, setPIN] = useState(() => { const [PIN, setPIN] = useState(() => {
const stickyValue = window.localStorage.getItem('PIN') const stickyValue = window.localStorage.getItem("PIN");
return stickyValue !== null ? JSON.parse(stickyValue) : '' return stickyValue !== null ? JSON.parse(stickyValue) : "";
}) });
const [header, setHeader] = useState('Error!') const [header, setHeader] = useState("Error!");
const [msgColor, setMsgColor] = useState('primary') const [msgColor, setMsgColor] = useState("primary");
const [showMsg, setShowMsg] = useState(false) const [showMsg, setShowMsg] = useState(false);
const [msg, setMsg] = useState('') const [msg, setMsg] = useState("");
const [Usuario, setUsuario] = useState(User) const [Usuario, setUsuario] = useState(User);
const [Contrasena, setContrasena] = useState('') const [Contrasena, setContrasena] = useState("");
const [ConfirmaContrasena, setConfirmaContrasena] = useState('') const [ConfirmaContrasena, setConfirmaContrasena] = useState("");
const [show, setShow] = useState(false) const [show, setShow] = useState(false);
const validaFormulario = () => { const validaFormulario = () => {
if (Contrasena.length === 0 || ConfirmaContrasena.length === 0) { if (Contrasena.length === 0 || ConfirmaContrasena.length === 0) {
setShow(true) setShow(true);
setMsg('La contraseña no puede estar vacia!') setMsg("La contraseña no puede estar vacia!");
setHeader('Error') setHeader("Error");
return return;
} }
if (Contrasena !== ConfirmaContrasena) { if (Contrasena !== ConfirmaContrasena) {
setShow(true) setShow(true);
setMsg('Contraseña no coincide con la confirmacion!') setMsg("Contraseña no coincide con la confirmacion!");
setHeader('Error') setHeader("Error");
return return;
} }
const data: DTOResetPassword = { const data: DTOResetPassword = {
pin: PIN, pin: PIN,
contrasena: Contrasena, contrasena: Contrasena,
} };
AuthDS.resetPassword(data) AuthDS.resetPassword(data)
.then((response) => { .then((response) => {
if (response.status == 200) { if (response.status == 200) {
setShow(true) setShow(true);
setMsg('La contraseña se cambio exitosamente!') setMsg("La contraseña se cambio exitosamente!");
setHeader('Confirmacion') setHeader("Confirmacion");
return false return false;
} }
}) })
.catch((e: Error) => { .catch((e: Error) => {
setShow(true) setShow(true);
setMsg('Ocurrio un error') setMsg("Ocurrio un error");
setHeader('Error') setHeader("Error");
return false return false;
}) });
} };
const closeToast = (show: boolean): void => { const closeToast = (show: boolean): void => {
setShowMsg(false) setShowMsg(false);
} };
return ( return (
<div> <div>
<div> <div>
<Row style={{ paddingTop: '6rem' }}> <Row style={{ paddingTop: "6rem" }}>
<Col xs={12}></Col> <Col xs={12}></Col>
</Row> </Row>
<Row> <Row>
<Col xs={5}>&nbsp;</Col> <Col xs={5}>&nbsp;</Col>
<Col xs={2}> <Col xs={2}>
<div className='shadow-lg bg-white rounded'> <div className="shadow-lg bg-white rounded">
<Card style={{ width: '100%' }} className='Color1'> <Card style={{ width: "100%" }} className="Color1">
<Card.Header> <Card.Header>
<Row style={{ backgroundColor: '#ffffff' }}> <Row style={{ backgroundColor: "#ffffff" }}>
<Col xs={12}> <Col xs={12}>
<img <img
src={logo} src={logo}
alt=' BookPrecta Internacional' alt=" Adminusa Internacional"
style={{ width: '70%' }} style={{ width: "70%" }}
></img> ></img>
</Col> </Col>
</Row> </Row>
@ -98,9 +98,9 @@ export default function ResetCredentials(props: IProps) {
<Card.Text> <Card.Text>
<Row <Row
style={{ style={{
backgroundColor: '#572364', backgroundColor: "#572364",
color: '#ffffff', color: "#ffffff",
fontSize: '19px', fontSize: "19px",
}} }}
> >
<Col xs={12}>Proporcione su nueva contraseña?</Col> <Col xs={12}>Proporcione su nueva contraseña?</Col>
@ -108,14 +108,14 @@ export default function ResetCredentials(props: IProps) {
<Row> <Row>
<Col xs={12}>&nbsp;</Col> <Col xs={12}>&nbsp;</Col>
</Row> </Row>
<Form id='login-form' className='form'> <Form id="login-form" className="form">
<Row style={{ height: '0px' }}> <Row style={{ height: "0px" }}>
<Col> <Col>
<Form.Control <Form.Control
style={{ visibility: 'hidden' }} style={{ visibility: "hidden" }}
id='PIN' id="PIN"
className='form-control' className="form-control"
placeholder='PIN' placeholder="PIN"
value={PIN} value={PIN}
/> />
</Col> </Col>
@ -123,13 +123,13 @@ export default function ResetCredentials(props: IProps) {
<Row> <Row>
<Col xs={12}> <Col xs={12}>
<Form.Control <Form.Control
id='Contrasena' id="Contrasena"
className='form-control' className="form-control"
placeholder='Contraseña' placeholder="Contraseña"
type='password' type="password"
value={Contrasena} value={Contrasena}
onChange={(e) => { onChange={(e) => {
setContrasena(e.target.value) setContrasena(e.target.value);
}} }}
/> />
</Col> </Col>
@ -140,13 +140,13 @@ export default function ResetCredentials(props: IProps) {
<Row> <Row>
<Col xs={12}> <Col xs={12}>
<Form.Control <Form.Control
id='Contrasena' id="Contrasena"
className='form-control' className="form-control"
placeholder='Confirme contraseña' placeholder="Confirme contraseña"
type='password' type="password"
value={ConfirmaContrasena} value={ConfirmaContrasena}
onChange={(e) => { onChange={(e) => {
setConfirmaContrasena(e.target.value) setConfirmaContrasena(e.target.value);
}} }}
/> />
</Col> </Col>
@ -156,12 +156,12 @@ export default function ResetCredentials(props: IProps) {
</Row> </Row>
</Form> </Form>
</Card.Text> </Card.Text>
<div className='d-grid gap-2'> <div className="d-grid gap-2">
<Button <Button
variant='customColor' variant="customColor"
size='lg' size="lg"
onClick={() => { onClick={() => {
validaFormulario() validaFormulario();
}} }}
> >
reset reset
@ -180,7 +180,7 @@ export default function ResetCredentials(props: IProps) {
header={header} header={header}
msgColor={msgColor} msgColor={msgColor}
closeToast={function (arg: boolean): void { closeToast={function (arg: boolean): void {
setShow(false) setShow(false);
}} }}
/> />
</div> </div>
@ -193,5 +193,5 @@ export default function ResetCredentials(props: IProps) {
closeToast={closeToast} closeToast={closeToast}
/> */} /> */}
</div> </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 { DTORelPreChe } from '../../DTO/DTORelPreChe'
import { DTOWorkingHours } from '../../DTO/DTOWorkingHours' import { DTOWorkingHours } from '../../DTO/DTOWorkingHours'
import { DTOTotalHours } from '../../DTO/Reportes/DTOTotalHours' import { DTOTotalHours } from '../../DTO/Reportes/DTOTotalHours'
import { DTOClocks } from '../../DTO/Reportes/DTOClocks'
import http from '../common/http-common' 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() 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" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 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" version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
@ -8213,6 +8213,13 @@ react-bootstrap@^2.10.4:
uncontrollable "^7.2.1" uncontrollable "^7.2.1"
warning "^4.0.3" 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: react-data-table-component@^7.6.2:
version "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" 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" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== 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: react-icons@^5.2.1:
version "5.2.1" version "5.2.1"
resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a"

Loading…
Cancel
Save