Se agregan campos: Cita, Validacion que se genere un AOL con minimo 1 servicio, se empieza control de AOL con estatus

develop
Al Garcia 2 years ago
parent 73ec7ccaf0
commit 4dab58af3f
  1. 1
      package.json
  2. 22
      src/Components/Catalogos/CatClientes.tsx
  3. 20
      src/Components/Catalogos/CatProveedores.tsx
  4. 22
      src/Components/Catalogos/CatServicios.tsx
  5. 27
      src/Components/Catalogos/CatUbicaciones.tsx
  6. 8
      src/Components/Home/Home.tsx
  7. 29
      src/Components/Operaciones/OpMonitor.tsx
  8. 10
      src/Components/Operaciones/Viaje/Servicios/Servicios.tsx
  9. 47
      src/Components/Operaciones/Viaje/Viaje.tsx
  10. 40
      src/Components/Operaciones/Viaje/ViajeEstatus.tsx
  11. 9
      src/DTOs/Operaciones/DTOViajeEstatusSecuencia.ts
  12. 1
      src/DTOs/Operaciones/DTOViajesServicios.ts
  13. 4
      src/Services/Operaciones/OpViajes.Services.ts
  14. 34
      src/store/features/Operaciones/OpViajes.Estatus.SecuenciaSlice.ts
  15. 4
      src/store/store.ts
  16. 46
      yarn.lock

@ -19,6 +19,7 @@
"react-bootstrap": "^2.5.0", "react-bootstrap": "^2.5.0",
"react-currency-format": "^1.1.0", "react-currency-format": "^1.1.0",
"react-data-table-component": "^7.5.3", "react-data-table-component": "^7.5.3",
"react-datepicker": "^4.8.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-icons": "^4.4.0", "react-icons": "^4.4.0",
"react-redux": "^8.0.2", "react-redux": "^8.0.2",

@ -5,7 +5,7 @@ import { IconContext } from 'react-icons'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import ICatClientes from '../../Interfaces/Catalogos/ICatClientes' import ICatClientes from '../../Interfaces/Catalogos/ICatClientes'
import { RootState } from '../../store/store' import { RootState } from '../../store/store'
import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs'
import DSCatClientes from '../../Services/Catalogos/CatClientes.Services' import DSCatClientes from '../../Services/Catalogos/CatClientes.Services'
import { updateCatClientes, deleteCatClientes } from '../../store/features/Catalogos/CatClientesSlice' import { updateCatClientes, deleteCatClientes } from '../../store/features/Catalogos/CatClientesSlice'
@ -89,6 +89,11 @@ export const CatClientes: FC<IProps> = (props) => {
setDeleteCatClientesDialog(false) setDeleteCatClientesDialog(false)
} }
const clearForm = () => {
setIDCliente(0)
setCliente('')
}
const saveInfo = () => { const saveInfo = () => {
const data: ICatClientes = { const data: ICatClientes = {
id: IDCliente, id: IDCliente,
@ -159,9 +164,22 @@ export const CatClientes: FC<IProps> = (props) => {
<Modal.Body> <Modal.Body>
<Row> <Row>
<Col xs={3}>No cliente</Col> <Col xs={3}>No cliente</Col>
<Col xs={2}> <Col xs={2} style={{ textAlign: 'right' }}>
<Form.Control type='text' id='IDCliente' value={IDCliente} disabled size='sm' /> <Form.Control type='text' id='IDCliente' value={IDCliente} disabled size='sm' />
</Col> </Col>
<Col xs={1} style={{ textAlign: 'left' }}>
<Button
size='sm'
variant='white'
onClick={() => {
clearForm()
}}
>
<IconContext.Provider value={{ color: 'orange', size: '25px' }}>
<BsEraserFill />
</IconContext.Provider>
</Button>
</Col>
</Row> </Row>
<br /> <br />
<Row> <Row>

@ -5,7 +5,7 @@ import { IconContext } from 'react-icons'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import ICatProveedores from '../../Interfaces/Catalogos/ICatProveedores' import ICatProveedores from '../../Interfaces/Catalogos/ICatProveedores'
import { RootState } from '../../store/store' import { RootState } from '../../store/store'
import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs'
import DSCatProveedores from '../../Services/Catalogos/CatProveedores.Services' import DSCatProveedores from '../../Services/Catalogos/CatProveedores.Services'
import { updateCatProveedores, deleteCatProveedores } from '../../store/features/Catalogos/CatProveedoresSlice' import { updateCatProveedores, deleteCatProveedores } from '../../store/features/Catalogos/CatProveedoresSlice'
@ -89,6 +89,11 @@ export const CatProveedores: FC<IProps> = (props) => {
setDeleteCatProveedoresDialog(false) setDeleteCatProveedoresDialog(false)
} }
const clearForm = () => {
setIDProveedor(0)
setProveedor('')
}
const saveInfo = () => { const saveInfo = () => {
const data: ICatProveedores = { const data: ICatProveedores = {
id: IDProveedor, id: IDProveedor,
@ -165,6 +170,19 @@ export const CatProveedores: FC<IProps> = (props) => {
<Col xs={2}> <Col xs={2}>
<Form.Control type='text' id='IDCliente' value={IDProveedor} disabled size='sm' /> <Form.Control type='text' id='IDCliente' value={IDProveedor} disabled size='sm' />
</Col> </Col>
<Col xs={1} style={{ textAlign: 'left' }}>
<Button
size='sm'
variant='white'
onClick={() => {
clearForm()
}}
>
<IconContext.Provider value={{ color: 'orange', size: '25px' }}>
<BsEraserFill />
</IconContext.Provider>
</Button>
</Col>
</Row> </Row>
<br /> <br />
<Row> <Row>

@ -5,7 +5,7 @@ import { IconContext } from 'react-icons'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import ICatServicios from '../../Interfaces/Catalogos/ICatServicios' import ICatServicios from '../../Interfaces/Catalogos/ICatServicios'
import { RootState } from '../../store/store' import { RootState } from '../../store/store'
import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs'
import DSCatServicios from '../../Services/Catalogos/CatServicios.Service' import DSCatServicios from '../../Services/Catalogos/CatServicios.Service'
import { updateCatServicios, deleteCatServicios } from '../../store/features/Catalogos/CatServiciosSlice' import { updateCatServicios, deleteCatServicios } from '../../store/features/Catalogos/CatServiciosSlice'
@ -89,6 +89,11 @@ export const CatServicios: FC<IProps> = (props) => {
setDeleteCatClientesDialog(false) setDeleteCatClientesDialog(false)
} }
const clearForm = () => {
setIDServicio(0)
setServicio('')
}
const saveInfo = () => { const saveInfo = () => {
const data: ICatServicios = { const data: ICatServicios = {
id: IDServicio, id: IDServicio,
@ -154,7 +159,7 @@ export const CatServicios: FC<IProps> = (props) => {
}} }}
> >
<Modal.Header closeButton> <Modal.Header closeButton>
<Modal.Title>Catalogo: Clientes</Modal.Title> <Modal.Title>Catalogo: Servicios</Modal.Title>
</Modal.Header> </Modal.Header>
<Modal.Body> <Modal.Body>
<Row> <Row>
@ -162,6 +167,19 @@ export const CatServicios: FC<IProps> = (props) => {
<Col xs={2}> <Col xs={2}>
<Form.Control type='text' id='IDServicio' value={IDServicio} disabled size='sm' /> <Form.Control type='text' id='IDServicio' value={IDServicio} disabled size='sm' />
</Col> </Col>
<Col xs={1} style={{ textAlign: 'left' }}>
<Button
size='sm'
variant='white'
onClick={() => {
clearForm()
}}
>
<IconContext.Provider value={{ color: 'orange', size: '25px' }}>
<BsEraserFill />
</IconContext.Provider>
</Button>
</Col>
</Row> </Row>
<br /> <br />
<Row> <Row>

@ -4,7 +4,7 @@ import DataTable from 'react-data-table-component'
import { IconContext } from 'react-icons' import { IconContext } from 'react-icons'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import { RootState } from '../../store/store' import { RootState } from '../../store/store'
import { BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs' import { BsEraserFill, BsFillPencilFill, BsFillTrashFill, BsSave } from 'react-icons/bs'
import DSCatUbicaciones from '../../Services/Catalogos/CatUbicaciones.Services' import DSCatUbicaciones from '../../Services/Catalogos/CatUbicaciones.Services'
import { updateCatUbicaciones, deleteCatUbicaciones } from '../../store/features/Catalogos/CatUbicacionesSlice' import { updateCatUbicaciones, deleteCatUbicaciones } from '../../store/features/Catalogos/CatUbicacionesSlice'
import ICatUbicaciones from '../../Interfaces/Catalogos/ICatUbicaciones' import ICatUbicaciones from '../../Interfaces/Catalogos/ICatUbicaciones'
@ -98,6 +98,12 @@ export const CatUbicaciones: FC<IProps> = (props) => {
setDeleteCatUbicacionesDialog(false) setDeleteCatUbicacionesDialog(false)
} }
const clearForm = () => {
setIDUbicacion(0)
setUbicacion('')
setClasificacion(1)
}
const saveInfo = () => { const saveInfo = () => {
const data: ICatUbicaciones = { const data: ICatUbicaciones = {
id: IDUbicacion, id: IDUbicacion,
@ -176,8 +182,23 @@ export const CatUbicaciones: FC<IProps> = (props) => {
<Col xs={2}> <Col xs={2}>
<Form.Control type='text' id='IDUbicacion' value={IDUbicacion} disabled size='sm' /> <Form.Control type='text' id='IDUbicacion' value={IDUbicacion} disabled size='sm' />
</Col> </Col>
<Col xs={3}>Clasificacion</Col> <Col xs={1} style={{ textAlign: 'left' }}>
<Col> <Button
size='sm'
variant='white'
onClick={() => {
clearForm()
}}
>
<IconContext.Provider value={{ color: 'orange', size: '25px' }}>
<BsEraserFill />
</IconContext.Provider>
</Button>
</Col>
<Col xs={3} style={{ textAlign: 'right' }}>
Clasificacion
</Col>
<Col xs={3}>
<Form.Control <Form.Control
as='select' as='select'
onChange={(e) => { onChange={(e) => {

@ -8,6 +8,7 @@ import DSCatProveedores from '../../Services/Catalogos/CatProveedores.Services'
import DSCatTipoUnidades from '../../Services/Catalogos/CatTipoUnidades.Services' import DSCatTipoUnidades from '../../Services/Catalogos/CatTipoUnidades.Services'
import DSCatUbicaciones from '../../Services/Catalogos/CatUbicaciones.Services' import DSCatUbicaciones from '../../Services/Catalogos/CatUbicaciones.Services'
import DSCatServicios from '../../Services/Catalogos/CatServicios.Service' import DSCatServicios from '../../Services/Catalogos/CatServicios.Service'
import DSOpStatusSecuence from '../../Services/Operaciones/OpViajes.Services'
import { populateCatClientes } from '../../store/features/Catalogos/CatClientesSlice' import { populateCatClientes } from '../../store/features/Catalogos/CatClientesSlice'
import { populateCatProveedores } from '../../store/features/Catalogos/CatProveedoresSlice' import { populateCatProveedores } from '../../store/features/Catalogos/CatProveedoresSlice'
import { populateCatTipoUnidades } from '../../store/features/Catalogos/CatTipoUnidadesSlice' import { populateCatTipoUnidades } from '../../store/features/Catalogos/CatTipoUnidadesSlice'
@ -15,6 +16,7 @@ import { populateCatUbicaciones } from '../../store/features/Catalogos/CatUbicac
import { populateCatServicios } from '../../store/features/Catalogos/CatServiciosSlice' import { populateCatServicios } from '../../store/features/Catalogos/CatServiciosSlice'
import { populateUserProfile } from '../../store/features/Auth/UserProfileSlice' import { populateUserProfile } from '../../store/features/Auth/UserProfileSlice'
import { populateMenuItems } from '../../store/features/Auth/MenuItemsSlice' import { populateMenuItems } from '../../store/features/Auth/MenuItemsSlice'
import { populateOpViajesEstatusSecuencia } from '../../store/features/Operaciones/OpViajes.Estatus.SecuenciaSlice'
import Leyend from '../../images/leyend.png' import Leyend from '../../images/leyend.png'
interface IProps {} interface IProps {}
@ -56,6 +58,12 @@ export const Home: FC<IProps> = (props) => {
dispatch(populateCatServicios(response.data)) dispatch(populateCatServicios(response.data))
}) })
.catch((e: Error) => {}) .catch((e: Error) => {})
DSOpStatusSecuence.GetStatusSecuence()
.then((response) => {
dispatch(populateOpViajesEstatusSecuencia(response.data))
})
.catch((e: Error) => {})
} }
const validateToken = () => { const validateToken = () => {

@ -1,7 +1,8 @@
import React, { FC, useEffect, useState } from 'react' import React, { FC, useEffect, useState } from 'react'
import { Alert, Button, Card, Col, Form, Modal, Row, Table } from 'react-bootstrap' import { Alert, Button, Card, Col, Form, Modal, OverlayTrigger, Row, Table, Tooltip } from 'react-bootstrap'
import { IconContext } from 'react-icons' import { IconContext } from 'react-icons'
import { BsChevronDown, BsChevronRight, BsChevronUp, BsFillPencilFill, BsPlusSquareFill } from 'react-icons/bs' import { BsChevronDown, BsChevronRight, BsChevronUp, BsFillPencilFill, BsPlusSquareFill, BsTruck } from 'react-icons/bs'
import { FcShipped, FcInTransit } from 'react-icons/fc'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import { RootState } from '../../store/store' import { RootState } from '../../store/store'
import DTOOpViajes from '../../DTOs/Operaciones/DTOViajes' import DTOOpViajes from '../../DTOs/Operaciones/DTOViajes'
@ -15,6 +16,7 @@ import {
populateOpViajesServicios, populateOpViajesServicios,
updateOpViajesServicios, updateOpViajesServicios,
} from '../../store/features/Operaciones/OpViajesServiciosSlice' } from '../../store/features/Operaciones/OpViajesServiciosSlice'
import { ViajeEstatus } from './Viaje/ViajeEstatus'
interface IProps {} interface IProps {}
@ -118,21 +120,27 @@ export const OpMonitor: FC<IProps> = (props) => {
<Card style={{ textAlign: 'left' }}> <Card style={{ textAlign: 'left' }}>
<Alert variant='primary'> <Alert variant='primary'>
<Row> <Row>
<Col xs={3} style={{ textAlign: 'right', fontSize: '25px' }}> <Col xs={2} style={{ textAlign: 'right', fontSize: '25px' }}>
Monitor de Viajes Monitor de Viajes
</Col> </Col>
<Col xs={1} style={{ textAlign: 'left', cursor: 'pointer' }}></Col> <Col xs={1} style={{ textAlign: 'left', cursor: 'pointer' }}></Col>
<Col xs={7}></Col> <Col xs={8}></Col>
<Col xs={1}> <Col xs={1}>
<div <div
onClick={() => { onClick={() => {
newTrip() newTrip()
}} }}
title='De un click aqui para crear un nuevo viaje' style={{ cursor: 'pointer' }}
>
<OverlayTrigger
overlay={<Tooltip id='tooltip-disabled'>De un click aqui para iniciar un viaje</Tooltip>}
> >
<IconContext.Provider value={{ color: 'green', size: '28px' }}> <span className='d-inline-block'>
<BsPlusSquareFill /> <IconContext.Provider value={{ color: 'blue', size: '35px' }}>
<FcInTransit />
</IconContext.Provider> </IconContext.Provider>
</span>
</OverlayTrigger>
</div> </div>
</Col> </Col>
</Row> </Row>
@ -166,6 +174,7 @@ export const OpMonitor: FC<IProps> = (props) => {
<th>Destino</th> <th>Destino</th>
<th>Tipo Unidad</th> <th>Tipo Unidad</th>
<th>No caja</th> <th>No caja</th>
<th style={{ width: '185px' }}>Estatus</th>
<th>Hazmat</th> <th>Hazmat</th>
<th>Ref AA</th> <th>Ref AA</th>
<th>PickUp No</th> <th>PickUp No</th>
@ -235,6 +244,12 @@ export const OpMonitor: FC<IProps> = (props) => {
> >
{MasterData.noCaja} {MasterData.noCaja}
</td> </td>
<td
style={{ textAlign: 'left' }}
className={MasterData.max === true ? 'masterSelected' : 'normalSelected'}
>
<ViajeEstatus IDViaje={MasterData.id} TipoOperacion={MasterData.tipoOperacion} />
</td>
<td <td
style={{ textAlign: 'center' }} style={{ textAlign: 'center' }}
className={MasterData.max === true ? 'masterSelected' : 'normalSelected'} className={MasterData.max === true ? 'masterSelected' : 'normalSelected'}

@ -1,5 +1,5 @@
import React, { FC, useState } from 'react' import React, { FC, useState } from 'react'
import { Button } from 'react-bootstrap' import { Button, Form } from 'react-bootstrap'
import { IconContext } from 'react-icons' import { IconContext } from 'react-icons'
import { BsFillPencilFill, BsXSquareFill } from 'react-icons/bs' import { BsFillPencilFill, BsXSquareFill } from 'react-icons/bs'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
@ -59,11 +59,12 @@ export const Servicios: FC<IProps> = (props) => {
) : ( ) : (
'' ''
)} )}
<th style={{ width: '25%', textAlign: 'left' }}>Servicio</th> <th style={{ width: '20%', textAlign: 'left' }}>Servicio</th>
<th style={{ width: '10%', textAlign: 'left' }}>Caja</th> <th style={{ width: '10%', textAlign: 'left' }}>Caja</th>
<th style={{ width: '10%', textAlign: 'left' }}>Aduana</th> <th style={{ width: '10%', textAlign: 'left' }}>Aduana</th>
<th style={{ width: '25%', textAlign: 'left' }}>Proveedor</th> <th style={{ width: '10%', textAlign: 'left' }}>Cita</th>
<th style={{ width: '25%', textAlign: 'left' }}>Comentarios</th> <th style={{ width: '20%', textAlign: 'left' }}>Proveedor</th>
<th style={{ width: '20%', textAlign: 'left' }}>Comentarios</th>
{props.actionButtons ? ( {props.actionButtons ? (
<> <>
<th style={{ width: '30px', textAlign: 'center' }}></th> <th style={{ width: '30px', textAlign: 'center' }}></th>
@ -107,6 +108,7 @@ export const Servicios: FC<IProps> = (props) => {
<td style={{ textAlign: 'left' }}>{service.sServicio}</td> <td style={{ textAlign: 'left' }}>{service.sServicio}</td>
<td style={{ textAlign: 'left' }}>{service.noCaja}</td> <td style={{ textAlign: 'left' }}>{service.noCaja}</td>
<td style={{ textAlign: 'left' }}>{getAduana(service.aduana)}</td> <td style={{ textAlign: 'left' }}>{getAduana(service.aduana)}</td>
<td style={{ textAlign: 'left' }}>{service.cita}</td>
<td style={{ textAlign: 'left' }}>{service.sProveedor}</td> <td style={{ textAlign: 'left' }}>{service.sProveedor}</td>
<td style={{ textAlign: 'left' }}>{service.comentarios}</td> <td style={{ textAlign: 'left' }}>{service.comentarios}</td>
{props.actionButtons ? ( {props.actionButtons ? (

@ -11,6 +11,8 @@ import {
} from '../../../store/features/Operaciones/OpViajesServiciosSlice' } from '../../../store/features/Operaciones/OpViajesServiciosSlice'
import DTOViajesServicios from '../../../DTOs/Operaciones/DTOViajesServicios' import DTOViajesServicios from '../../../DTOs/Operaciones/DTOViajesServicios'
import { Servicios } from '../Viaje/Servicios/Servicios' import { Servicios } from '../Viaje/Servicios/Servicios'
import DatePicker from 'react-datepicker'
import 'react-datepicker/dist/react-datepicker.css'
interface IProps { interface IProps {
IDViaje: number IDViaje: number
@ -50,8 +52,11 @@ export const Viaje: FC<IProps> = (props) => {
const [Comentarios, setComentarios] = useState('') const [Comentarios, setComentarios] = useState('')
const [Aduana, setAduana] = useState(0) const [Aduana, setAduana] = useState(0)
const [DisableAduana, setDisableAduana] = useState(true) const [DisableAduana, setDisableAduana] = useState(true)
const [TotalServicios, setTotalServicios] = useState(0)
const [Cita, setCita] = useState<Date | null>()
useEffect(() => { useEffect(() => {
if (IDServicio > 0 && TotalServicios === 0) saveDetail()
let selectedRow = mAllTrips.filter((row) => { let selectedRow = mAllTrips.filter((row) => {
if (row.id === props.IDViaje) { if (row.id === props.IDViaje) {
setIDViaje(row.id) setIDViaje(row.id)
@ -70,7 +75,13 @@ export const Viaje: FC<IProps> = (props) => {
}) })
//setRefAA(selectedRow[0].refAgenciaAduanal) //setRefAA(selectedRow[0].refAgenciaAduanal)
// console.log(JSON.stringify(selectedRow) + ' ' + props.IDViaje) // console.log(JSON.stringify(selectedRow) + ' ' + props.IDViaje)
}, [props.IDViaje]) let totalServicios = mAllTripServices.filter((a) => {
if (a.idViaje === IDViaje) {
return a
}
})
setTotalServicios(totalServicios.length)
}, [IDViaje])
useEffect(() => { useEffect(() => {
if (IDServicio === 1 || IDServicio === 2 || IDServicio === 22) setDisableAduana(false) if (IDServicio === 1 || IDServicio === 2 || IDServicio === 22) setDisableAduana(false)
@ -110,6 +121,7 @@ export const Viaje: FC<IProps> = (props) => {
idViaje: IDViaje, idViaje: IDViaje,
idServicio: IDServicio, idServicio: IDServicio,
sServicio: '', sServicio: '',
cita: Cita ? adjustTimeZone(Cita.toISOString()) : '',
aduana: Aduana, aduana: Aduana,
comentarios: Comentarios, comentarios: Comentarios,
idProveedor: IDProveedor, idProveedor: IDProveedor,
@ -130,6 +142,14 @@ export const Viaje: FC<IProps> = (props) => {
.catch((e: Error) => {}) .catch((e: Error) => {})
} }
const adjustTimeZone = (str: string): string => {
if (str) {
const original: any = new Date(str)
const real = new Date(original - original.getTimezoneOffset() * 60 * 1000)
return real.toISOString()
} else return ''
}
const loadService = (id: number) => { const loadService = (id: number) => {
let found = mAllTripServices.filter((a) => { let found = mAllTripServices.filter((a) => {
if (a.id === id) { if (a.id === id) {
@ -146,12 +166,7 @@ export const Viaje: FC<IProps> = (props) => {
} }
const saveMaster = () => { const saveMaster = () => {
let totalServicios = mAllTripServices.filter((a) => { if (TotalServicios === 0) {
if (a.idViaje === IDViaje) {
return a
}
})
if (totalServicios.length === 0) {
if (IDServicio === 0) { if (IDServicio === 0) {
alert('Para continuar, primero seleccione un servicio ') alert('Para continuar, primero seleccione un servicio ')
return false return false
@ -188,7 +203,6 @@ export const Viaje: FC<IProps> = (props) => {
data['max'] = false data['max'] = false
dispatch(updateOpViajes(data)) dispatch(updateOpViajes(data))
setIDViaje(data.id) setIDViaje(data.id)
saveDetail()
}) })
.catch((e: Error) => {}) .catch((e: Error) => {})
} }
@ -199,6 +213,7 @@ export const Viaje: FC<IProps> = (props) => {
setIDServicio(0) setIDServicio(0)
setComentarios('') setComentarios('')
setIDProveedor(0) setIDProveedor(0)
setUltimaCaja('')
setDisableAduana(true) setDisableAduana(true)
} }
@ -438,7 +453,7 @@ export const Viaje: FC<IProps> = (props) => {
<Card.Body> <Card.Body>
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
<Col xs={2}>Servicio</Col> <Col xs={2}>Servicio</Col>
<Col xs={5}> <Col xs={4}>
<Form.Control <Form.Control
as='select' as='select'
onChange={(e) => { onChange={(e) => {
@ -459,9 +474,19 @@ export const Viaje: FC<IProps> = (props) => {
: null} : null}
</Form.Control> </Form.Control>
</Col> </Col>
<Col xs={2} style={{ textAlign: 'right' }}> <Col style={{ visibility: DisableAduana ? 'hidden' : 'visible' }}>
Aduana <DatePicker
selected={Cita}
onChange={(date: any) => setCita(date)}
showTimeSelect
dateFormat='MM/dd/yyyy HH:mm:ss'
placeholderText='Cita no definida'
isClearable
/>
</Col> </Col>
{/* <Col xs={2} style={{ textAlign: 'right' }}>
Aduana
</Col> */}
<Col xs={3}> <Col xs={3}>
<Form.Control <Form.Control
as='select' as='select'

@ -0,0 +1,40 @@
import React, { FC, useState } from 'react'
import { Form } from 'react-bootstrap'
import { useSelector } from 'react-redux'
import { RootState } from '../../../store/store'
interface IProps {
IDViaje: number
TipoOperacion: number
}
export const ViajeEstatus: FC<IProps> = (props) => {
const mTripStatus = useSelector((state: RootState) => state.OpViajesEstatusSecuencia.OpViajesEstatusSecuencia)
const [IDStatus, setIDStatus] = useState(0)
return (
<div>
<Form.Control
as='select'
onChange={(e) => {
setIDStatus(parseInt(e.target.value))
}}
value={IDStatus}
className='form-select form-select-sm dialogLabel'
>
<option value='0'>Pendiente</option>
{mTripStatus
? mTripStatus
.filter((row) => row.tipoOperacion === props.TipoOperacion)
.sort((a, b) => a.secuencia - b.secuencia)
.map((row) => {
return (
<option key={row.id} value={row.id}>
{row.sEstatus}
</option>
)
})
: null}
</Form.Control>
</div>
)
}

@ -0,0 +1,9 @@
export default interface DTOViajeEstatusSecuencia {
id: number,
tipoOperacion: number,
sTipoOperacion: string,
estatus: number,
sEstatus: string,
secuencia: number,
activo: number
}

@ -3,6 +3,7 @@ export default interface DTOViajesServicios {
idViaje: number, idViaje: number,
idServicio: number, idServicio: number,
sServicio: string, sServicio: string,
cita?: string,
aduana: number, aduana: number,
comentarios: string, comentarios: string,
idProveedor: number, idProveedor: number,

@ -3,6 +3,7 @@ import DTOViajes from "../../DTOs/Operaciones/DTOViajes";
import IRespuesta from "../../Interfaces/Respuestas/IRespuesta"; import IRespuesta from "../../Interfaces/Respuestas/IRespuesta";
import DTOViajesServicios from "../../DTOs/Operaciones/DTOViajesServicios"; import DTOViajesServicios from "../../DTOs/Operaciones/DTOViajesServicios";
import DTOUltimaCaja from "../../DTOs/Operaciones/DTOUltimaCaja"; import DTOUltimaCaja from "../../DTOs/Operaciones/DTOUltimaCaja";
import DTOViajeEstatusSecuencia from "../../DTOs/Operaciones/DTOViajeEstatusSecuencia";
class OpViajesDataService { class OpViajesDataService {
Get() { Get() {
@ -14,6 +15,9 @@ class OpViajesDataService {
GetLastTrailerBox(idViaje: number) { GetLastTrailerBox(idViaje: number) {
return http.get<DTOUltimaCaja>(`Operaciones/OpViajes/GetLastTrailerBox?idViaje=${idViaje}`); return http.get<DTOUltimaCaja>(`Operaciones/OpViajes/GetLastTrailerBox?idViaje=${idViaje}`);
} }
GetStatusSecuence() {
return http.get<DTOViajeEstatusSecuencia[]>(`Operaciones/OpViajes/GetStatusSecuence`);
}
Append(data: DTOViajes) { Append(data: DTOViajes) {
return http.post<DTOViajes>(`Operaciones/OpViajes/Append`,data); return http.post<DTOViajes>(`Operaciones/OpViajes/Append`,data);
} }

@ -0,0 +1,34 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit'
import DTOViajeEstatusSecuencia from '../../../DTOs/Operaciones/DTOViajeEstatusSecuencia'
const OpViajesEstatusSecuencia: DTOViajeEstatusSecuencia[] = []
const initialState = { OpViajesEstatusSecuencia }
export const OpViajesEstatusSecuenciaSlice = createSlice({
name: 'OpViajesEstatusSecuencia',
initialState: initialState,
reducers: {
resetOpViajesEstatusSecuencia : (state, action: PayloadAction<string>) => {
state.OpViajesEstatusSecuencia = []
},
populateOpViajesEstatusSecuencia : (state, action: PayloadAction<DTOViajeEstatusSecuencia[]>) => {
action.payload.forEach(element => {
const index = state.OpViajesEstatusSecuencia.findIndex(object => object.id === element.id)
if (index<0) state.OpViajesEstatusSecuencia.push(element)
})
},
updateOpViajesEstatusSecuencia : (state, action: PayloadAction<DTOViajeEstatusSecuencia[]>) => {
action.payload.forEach(row => {
const i = state.OpViajesEstatusSecuencia.findIndex(_element => _element.id === row.id);
if (i > -1) state.OpViajesEstatusSecuencia[i] = row;
else state.OpViajesEstatusSecuencia.push(row);
})
},
deleteOpViajesEstatusSecuencia : (state, action: PayloadAction<number>) => {
const newArr = state.OpViajesEstatusSecuencia.filter(data => data.id != action.payload);
state.OpViajesEstatusSecuencia=newArr
},
},
})
export const { resetOpViajesEstatusSecuencia, populateOpViajesEstatusSecuencia, updateOpViajesEstatusSecuencia, deleteOpViajesEstatusSecuencia } = OpViajesEstatusSecuenciaSlice.actions;
export default OpViajesEstatusSecuenciaSlice.reducer;

@ -10,6 +10,7 @@ import { CatUbicacionesSlice } from './features/Catalogos/CatUbicacionesSlice'
import { CatAduanasSlice } from './features/Catalogos/CatAduanasSlice' import { CatAduanasSlice } from './features/Catalogos/CatAduanasSlice'
import { OpViajesSlice } from './features/Operaciones/OpViajesSlice' import { OpViajesSlice } from './features/Operaciones/OpViajesSlice'
import { OpViajesServiciosSlice } from './features/Operaciones/OpViajesServiciosSlice' import { OpViajesServiciosSlice } from './features/Operaciones/OpViajesServiciosSlice'
import { OpViajesEstatusSecuenciaSlice } from './features/Operaciones/OpViajes.Estatus.SecuenciaSlice'
export const store = configureStore({ export const store = configureStore({
reducer: { reducer: {
@ -22,7 +23,8 @@ export const store = configureStore({
CatServicios: CatServiciosSlice.reducer, CatServicios: CatServiciosSlice.reducer,
CatAduanas : CatAduanasSlice.reducer, CatAduanas : CatAduanasSlice.reducer,
OpViajes: OpViajesSlice.reducer, OpViajes: OpViajesSlice.reducer,
OpViajesServicios: OpViajesServiciosSlice.reducer OpViajesServicios: OpViajesServiciosSlice.reducer,
OpViajesEstatusSecuencia: OpViajesEstatusSecuenciaSlice.reducer
} }
}) })

@ -1570,7 +1570,7 @@
schema-utils "^3.0.0" schema-utils "^3.0.0"
source-map "^0.7.3" source-map "^0.7.3"
"@popperjs/core@^2.11.5": "@popperjs/core@^2.11.5", "@popperjs/core@^2.9.2":
version "2.11.6" version "2.11.6"
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45"
integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==
@ -3153,6 +3153,11 @@ cjs-module-lexer@^1.0.0:
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
classnames@^2.2.6:
version "2.3.2"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924"
integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
classnames@^2.3.1: classnames@^2.3.1:
version "2.3.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
@ -3610,6 +3615,11 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0" whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0" whatwg-url "^8.0.0"
date-fns@^2.24.0:
version "2.29.3"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8"
integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==
debug@2.6.9, debug@^2.6.0, debug@^2.6.9: debug@2.6.9, debug@^2.6.0, debug@^2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@ -7313,7 +7323,7 @@ prop-types-extra@^1.1.0:
react-is "^16.3.2" react-is "^16.3.2"
warning "^4.0.0" warning "^4.0.0"
prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1: prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1" version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@ -7440,6 +7450,18 @@ react-data-table-component@^7.5.3:
dependencies: dependencies:
deepmerge "^4.2.2" deepmerge "^4.2.2"
react-datepicker@^4.8.0:
version "4.8.0"
resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-4.8.0.tgz#11b8918d085a1ce4781eee4c8e4641b3cd592010"
integrity sha512-u69zXGHMpxAa4LeYR83vucQoUCJQ6m/WBsSxmUMu/M8ahTSVMMyiyQzauHgZA2NUr9y0FUgOAix71hGYUb6tvg==
dependencies:
"@popperjs/core" "^2.9.2"
classnames "^2.2.6"
date-fns "^2.24.0"
prop-types "^15.7.2"
react-onclickoutside "^6.12.0"
react-popper "^2.2.5"
react-dev-utils@^12.0.1: react-dev-utils@^12.0.1:
version "12.0.1" version "12.0.1"
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
@ -7483,6 +7505,11 @@ react-error-overlay@^6.0.11:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb"
integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==
react-fast-compare@^3.0.1:
version "3.2.0"
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
react-icons@^4.4.0: react-icons@^4.4.0:
version "4.4.0" version "4.4.0"
resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703" resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.4.0.tgz#a13a8a20c254854e1ec9aecef28a95cdf24ef703"
@ -7508,6 +7535,19 @@ react-lifecycles-compat@^3.0.4:
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
react-onclickoutside@^6.12.0:
version "6.12.2"
resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.12.2.tgz#8e6cf80c7d17a79f2c908399918158a7b02dda01"
integrity sha512-NMXGa223OnsrGVp5dJHkuKxQ4czdLmXSp5jSV9OqiCky9LOpPATn3vLldc+q5fK3gKbEHvr7J1u0yhBh/xYkpA==
react-popper@^2.2.5:
version "2.3.0"
resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba"
integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==
dependencies:
react-fast-compare "^3.0.1"
warning "^4.0.2"
react-redux@^8.0.2: react-redux@^8.0.2:
version "8.0.2" version "8.0.2"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.2.tgz#bc2a304bb21e79c6808e3e47c50fe1caf62f7aad" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.2.tgz#bc2a304bb21e79c6808e3e47c50fe1caf62f7aad"
@ -8860,7 +8900,7 @@ walker@^1.0.7:
dependencies: dependencies:
makeerror "1.0.12" makeerror "1.0.12"
warning@^4.0.0, warning@^4.0.3: warning@^4.0.0, warning@^4.0.2, warning@^4.0.3:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==

Loading…
Cancel
Save