Version estable el 5 Octubre 2022

develop
Al Garcia 2 years ago
parent 985d2659bc
commit 4413faa159
  1. 5
      src/App.tsx
  2. 2
      src/Components/Login/Login.tsx
  3. 19
      src/Components/Navbar/Navbar.tsx
  4. 8
      src/Components/Operaciones/OpMonitor.tsx
  5. 467
      src/Components/Operaciones/Viaje/Viaje.tsx
  6. 25
      src/Components/Operaciones/Viaje/ViajeEstatus.tsx
  7. 1
      src/DTOs/Operaciones/DTOViajes.ts
  8. 2
      src/Services/Auth/config/http-common.ts
  9. 30
      src/css/autoComplete.css

@ -37,8 +37,9 @@ function App() {
<BrowserRouter> <BrowserRouter>
<Navbar /> <Navbar />
<Routes> <Routes>
<Route path='/' element={<Home />}></Route> {/* <Route path='/' element={<Home />}></Route>
<Route path='login' element={<Login />}></Route> <Route path='login' element={<Login />}></Route> */}
<Route path='/' element={<Login />}></Route>
<Route path='logout' element={<Logout />}></Route> <Route path='logout' element={<Logout />}></Route>
<Route element={<ProtectedRoute />}> <Route element={<ProtectedRoute />}>
<Route path='OpMonitor' element={<OpMonitor />} /> <Route path='OpMonitor' element={<OpMonitor />} />

@ -100,7 +100,7 @@ export const Login: FC<IProps> = (props) => {
}, [token]) }, [token])
return ( return (
<div> <div hidden={token ? true : false}>
<div className='Auth-form-container'> <div className='Auth-form-container'>
<form className='Auth-form'> <form className='Auth-form'>
<div className='Auth-form-content'> <div className='Auth-form-content'>

@ -14,7 +14,11 @@ function Submenu({ descripcion, menu }: Isubmenu) {
return ( return (
<div> <div>
<NavDropdown title={descripcion} id='basic-nav-dropdown'> <NavDropdown title={descripcion} id='basic-nav-dropdown'>
{menu.map((item, index) => { {menu
.filter((item) => {
return item.descripcion.length > 2
})
.map((item, index) => {
return ( return (
<NavDropdown.Item to={item.url} as={Link}> <NavDropdown.Item to={item.url} as={Link}>
{item.descripcion} {item.descripcion}
@ -42,14 +46,14 @@ function AOLNavbar() {
<Nav className='me-auto'> <Nav className='me-auto'>
{Menu {Menu
? Menu.map((itemMenu, index) => { ? Menu.map((itemMenu, index) => {
if (itemMenu.padreId === 0) { if (itemMenu.padreId === 0 && itemMenu.descripcion.length > 2) {
return ( return (
<> <>
<Submenu <Submenu
descripcion={itemMenu.descripcion} descripcion={itemMenu.descripcion}
key={itemMenu.id} key={itemMenu.id}
menu={Menu.filter(function (item) { menu={Menu.filter(function (item) {
return item.padreId === itemMenu.id return item.padreId === itemMenu.id && item.descripcion.length > 2
})} })}
/> />
</> </>
@ -60,13 +64,14 @@ function AOLNavbar() {
</Nav> </Nav>
</Navbar.Collapse> </Navbar.Collapse>
<Navbar.Collapse className='justify-content-end'> <Navbar.Collapse className='justify-content-end'>
{UserLogued ? ( {
UserLogued ? (
<Navbar.Text> <Navbar.Text>
Usuario: {User} - <Link to='logout'>logout</Link> Usuario: {User} - <Link to='logout'>logout</Link>
</Navbar.Text> </Navbar.Text>
) : ( ) : null
<Link to='login'>login</Link> /* <Link to='login'>login</Link> */
)} }
</Navbar.Collapse> </Navbar.Collapse>
</Container> </Container>
</Navbar> </Navbar>

@ -98,6 +98,7 @@ export const OpMonitor: FC<IProps> = (props) => {
const loadTrips = () => { const loadTrips = () => {
DSOpViajes.Get() DSOpViajes.Get()
.then((response) => { .then((response) => {
console.log('viajes=' + JSON.stringify(response.data))
var data = response.data.map((x) => { var data = response.data.map((x) => {
x.max = false x.max = false
return x return x
@ -181,6 +182,7 @@ export const OpMonitor: FC<IProps> = (props) => {
<th>AOL</th> <th>AOL</th>
<th>&nbsp;</th> <th>&nbsp;</th>
<th>Cliente</th> <th>Cliente</th>
<th>Tipo operacion</th>
<th>Origen</th> <th>Origen</th>
<th>Destino</th> <th>Destino</th>
<th>Tipo Unidad</th> <th>Tipo Unidad</th>
@ -231,6 +233,12 @@ export const OpMonitor: FC<IProps> = (props) => {
> >
{MasterData.sCliente} {MasterData.sCliente}
</td> </td>
<td
style={{ textAlign: 'left' }}
className={MasterData.max === true ? 'masterSelected' : 'normalSelected'}
>
{MasterData.sTipoOperacion}
</td>
<td <td
style={{ textAlign: 'left' }} style={{ textAlign: 'left' }}
className={MasterData.max === true ? 'masterSelected' : 'normalSelected'} className={MasterData.max === true ? 'masterSelected' : 'normalSelected'}

@ -1,5 +1,5 @@
import React, { FC, useEffect, useState, ChangeEvent, useCallback } from 'react' import { FC, useEffect, useRef, useState } from 'react'
import { Alert, Button, Card, Col, Form, Modal, Row } from 'react-bootstrap' import { Button, ButtonGroup, Card, Col, Dropdown, DropdownButton, Form, ListGroup, Modal, Row } from 'react-bootstrap'
import { useDispatch, useSelector } from 'react-redux' import { useDispatch, useSelector } from 'react-redux'
import DTOOpViajes from '../../../DTOs/Operaciones/DTOViajes' import DTOOpViajes from '../../../DTOs/Operaciones/DTOViajes'
import DSOpViajes from '../../../Services/Operaciones/OpViajes.Services' import DSOpViajes from '../../../Services/Operaciones/OpViajes.Services'
@ -13,28 +13,9 @@ import DTOViajesServicios from '../../../DTOs/Operaciones/DTOViajesServicios'
import { Servicios } from '../Viaje/Servicios/Servicios' import { Servicios } from '../Viaje/Servicios/Servicios'
import DatePicker from 'react-datepicker' import DatePicker from 'react-datepicker'
import 'react-datepicker/dist/react-datepicker.css' import 'react-datepicker/dist/react-datepicker.css'
import { Typeahead } from 'react-bootstrap-typeahead' // ES2015
import 'react-bootstrap-typeahead/css/Typeahead.css' import 'react-bootstrap-typeahead/css/Typeahead.css'
import 'react-bootstrap-typeahead/css/Typeahead.bs5.css' import 'react-bootstrap-typeahead/css/Typeahead.bs5.css'
import ICatClientes from '../../../Interfaces/Catalogos/ICatClientes' import '../../../css/autoComplete.css'
import { AutocompletePure, AutocompletePureProps, ChangeReason, RenderItem } from 'react-autocomplete-pure'
import { Autocomplete } from '../../Utils/Autocomplete/Autocomplete'
import Select from 'react-select'
import AutoSuggest from 'react-autosuggest'
type Film = { id: number; cliente: string }
const renderItem: RenderItem<Film> = (item, { isHighlighted }) => (
<span style={{ fontWeight: isHighlighted ? 700 : 400 }}>{item.cliente}</span>
)
const getSuggestionValue = (item: Film) => item.cliente
const options = [
{ value: 'chocolate', label: 'Chocolate' },
{ value: 'strawberry', label: 'Strawberry' },
{ value: 'vanilla', label: 'Vanilla' },
]
interface IProps { interface IProps {
IDViaje: number IDViaje: number
@ -45,33 +26,19 @@ interface IOpciones {
label: string label: string
} }
/* interface Option {
firstName: string
lastName: string
} */
export const Viaje: FC<IProps> = (props) => { export const Viaje: FC<IProps> = (props) => {
const [value, setValue] = useState('')
const [suggestions, setSuggestions] = useState<string[]>([])
const [isOpen, setIsOpen] = useState<boolean>(false)
//const [suggestions, setSuggestions] = useState<Film[]>([])
//const [value, setValue] = useState<string>('')
const [selectedOption, setselectedOption] = useState<IOpciones | null>() const [selectedOption, setselectedOption] = useState<IOpciones | null>()
const dispatch = useDispatch() const dispatch = useDispatch()
const mAllTrips = useSelector((state: RootState) => state.OpViajes.OpViajes) const mAllTrips = useSelector((state: RootState) => state.OpViajes.OpViajes)
const mAllTripServices = useSelector((state: RootState) => state.OpViajesServicios.OpViajesServicios) const mAllTripServices = useSelector((state: RootState) => state.OpViajesServicios.OpViajesServicios)
const Info = JSON.parse(localStorage.getItem('tokenInfo') || '[]') const Info = JSON.parse(localStorage.getItem('tokenInfo') || '[]')
const UserID = Info.UserId const UserID = Info.UserId
const mCatClientes = useSelector((state: RootState) => state.CatClientes.CatClientes) const mCatClientes = useSelector((state: RootState) => state.CatClientes.CatClientes)
const CatProveedores = useSelector((state: RootState) => state.CatProveedores.CatProveedores) const mCatProveedores = useSelector((state: RootState) => state.CatProveedores.CatProveedores)
const CatTipoUnidades = useSelector((state: RootState) => state.CatTipoUnidades.CatTipoUnidades) const CatTipoUnidades = useSelector((state: RootState) => state.CatTipoUnidades.CatTipoUnidades)
const CatUbicaciones = useSelector((state: RootState) => state.CatUbicaciones.CatUbicaciones) const mCatUbicaciones = useSelector((state: RootState) => state.CatUbicaciones.CatUbicaciones)
const CatServicios = useSelector((state: RootState) => state.CatServicios.CatServicios) const mCatServicios = useSelector((state: RootState) => state.CatServicios.CatServicios)
const CatAduanas = useSelector((state: RootState) => state.CatAduanas.CatAduanas) const CatAduanas = useSelector((state: RootState) => state.CatAduanas.CatAduanas)
const [OpViajes, setOpViajes] = useState<DTOOpViajes[]>([])
const [showTripDialog, setShowTripDialog] = useState(false)
const [Switch, setSwitch] = useState(false)
const [NoCaja, setNoCaja] = useState('') const [NoCaja, setNoCaja] = useState('')
const [UltimaCaja, setUltimaCaja] = useState('') const [UltimaCaja, setUltimaCaja] = useState('')
const [IDViaje, setIDViaje] = useState(0) const [IDViaje, setIDViaje] = useState(0)
@ -79,11 +46,14 @@ export const Viaje: FC<IProps> = (props) => {
const [IDCliente, setIDCliente] = useState(0) const [IDCliente, setIDCliente] = useState(0)
const [Cliente, setCliente] = useState('') const [Cliente, setCliente] = useState('')
const [IDProveedor, setIDProveedor] = useState(0) const [IDProveedor, setIDProveedor] = useState(0)
const [Proveedor, setProveedor] = useState('')
const [IDServicio, setIDServicio] = useState(0) const [IDServicio, setIDServicio] = useState(0)
const [IDNuevoServicio, setIDNuevoServicio] = useState(0) const [Servicio, setServicio] = useState('')
const [IDTipoUnidad, setIDTipoUnidad] = useState(0) const [IDTipoUnidad, setIDTipoUnidad] = useState(0)
const [IDOrigen, setIDOrigen] = useState(0) const [IDOrigen, setIDOrigen] = useState(0)
const [Origen, setOrigen] = useState('')
const [IDDestino, setIDDestino] = useState(0) const [IDDestino, setIDDestino] = useState(0)
const [Destino, setDestino] = useState('')
const [RefAA, setRefAA] = useState('') const [RefAA, setRefAA] = useState('')
const [PickUpNumber, setPickUpNumber] = useState('') const [PickUpNumber, setPickUpNumber] = useState('')
const [Hazmat, setHazmat] = useState(0) const [Hazmat, setHazmat] = useState(0)
@ -94,45 +64,12 @@ export const Viaje: FC<IProps> = (props) => {
const [DisableAduana, setDisableAduana] = useState(true) const [DisableAduana, setDisableAduana] = useState(true)
const [TotalServicios, setTotalServicios] = useState(0) const [TotalServicios, setTotalServicios] = useState(0)
const [Cita, setCita] = useState<Date | null>() const [Cita, setCita] = useState<Date | null>()
const [singleSelections, setSingleSelections] = useState<IOpciones[]>([]) const [SelectedClient, setSelectedClient] = useState(false)
const [multiSelections, setMultiSelections] = useState([]) const [SelectedOrigen, setSelectedOrigen] = useState(false)
const [SelectedDestino, setSelectedDestino] = useState(false)
/* const handleChange: AutocompletePureProps<Film>['onChange'] = useCallback(async (_event, { value, reason }) => { const [SelectedServicio, setSelectedServicio] = useState(false)
setValue(value) const [SelectedProveedor, setSelectedProveedor] = useState(false)
console.log('value=' + value) const inputRef = useRef()
if (reason === 'INPUT') {
let newFilms = mCatClientes.filter((a) => {
if (a.cliente.includes(value)) {
return a
}
})
//const newFilms = await fetchFilms(value)
setSuggestions(newFilms)
setIsOpen(Boolean(newFilms.length))
} else if (reason === 'ENTER') {
setIsOpen(false)
}
}, []) */
const handleSelect: AutocompletePureProps<Film>['onSelect'] = useCallback((_event, { item }) => {
const value = getSuggestionValue(item)
setValue(value)
console.log('value=' + value)
setIsOpen(false)
}, [])
const handleClickOutside = (_event: Event) => {
setIsOpen(false)
}
/* const [options, setOptions] = useState([
{ firstName: 'Art', lastName: 'Blakey' },
{ firstName: 'John', lastName: 'Coltrane' },
{ firstName: 'Miles', lastName: 'Davis' },
{ firstName: 'Herbie', lastName: 'Hancock' },
{ firstName: 'Charlie', lastName: 'Parker' },
{ firstName: 'Tony', lastName: 'Williams' },
]) */
useEffect(() => { useEffect(() => {
if (IDServicio > 0 && TotalServicios === 0) saveDetail() if (IDServicio > 0 && TotalServicios === 0) saveDetail()
@ -149,11 +86,17 @@ export const Viaje: FC<IProps> = (props) => {
setPickUpNumber(row.pickUpNumber) setPickUpNumber(row.pickUpNumber)
setTipoOperacion(row.tipoOperacion) setTipoOperacion(row.tipoOperacion)
setPedimento(row.pedimento) setPedimento(row.pedimento)
setCliente(row.sCliente)
setOrigen(row.sOrigen)
setDestino(row.sDestino)
setSelectedClient(true)
setSelectedOrigen(true)
setSelectedDestino(true)
setSelectedServicio(true)
setSelectedProveedor(true)
return row return row
} }
}) })
//setRefAA(selectedRow[0].refAgenciaAduanal)
// console.log(JSON.stringify(selectedRow) + ' ' + props.IDViaje)
let totalServicios = mAllTripServices.filter((a) => { let totalServicios = mAllTripServices.filter((a) => {
if (a.idViaje === IDViaje) { if (a.idViaje === IDViaje) {
return a return a
@ -165,6 +108,22 @@ export const Viaje: FC<IProps> = (props) => {
useEffect(() => { useEffect(() => {
if (IDServicio === 1 || IDServicio === 2 || IDServicio === 22) setDisableAduana(false) if (IDServicio === 1 || IDServicio === 2 || IDServicio === 22) setDisableAduana(false)
else setDisableAduana(true) else setDisableAduana(true)
if (IDServicio > 0) {
let serviceFound = mCatServicios.filter((item) => {
if (item.id == IDServicio) {
return item
}
})
setServicio(serviceFound[0].servicio)
}
if (IDProveedor > 0) {
let providerFound = mCatProveedores.filter((item) => {
if (item.id == IDProveedor) {
return item
}
})
setProveedor(providerFound[0].proveedor)
}
}, [IDServicio]) }, [IDServicio])
useEffect(() => { useEffect(() => {
@ -187,12 +146,7 @@ export const Viaje: FC<IProps> = (props) => {
}, [Hazmat]) }, [Hazmat])
const saveDetail = () => { const saveDetail = () => {
if (IDServicio === 0) { if (IDServicio === 0 || IDProveedor === 0) {
alert('Para continuar, primero seleccione un servicio')
return false
}
if (IDProveedor === 0) {
alert('Para continuar, primero seleccione un proveedor')
return false return false
} }
const data: DTOViajesServicios = { const data: DTOViajesServicios = {
@ -209,7 +163,6 @@ export const Viaje: FC<IProps> = (props) => {
} }
DSOpViajes.AppendServices(data) DSOpViajes.AppendServices(data)
.then((responsed) => { .then((responsed) => {
// console.log('Item regresado del post=' + JSON.stringify(responsed.data))
if (IDDetail === 0) { if (IDDetail === 0) {
dispatch(populateOpViajesServicios(responsed.data)) dispatch(populateOpViajesServicios(responsed.data))
setIDDetail(responsed.data[0].id) setIDDetail(responsed.data[0].id)
@ -273,6 +226,7 @@ export const Viaje: FC<IProps> = (props) => {
noCaja: NoCaja, noCaja: NoCaja,
pickUpNumber: PickUpNumber, pickUpNumber: PickUpNumber,
tipoOperacion: TipoOperacion, tipoOperacion: TipoOperacion,
sTipoOperacion: '',
pedimento: Pedimento, pedimento: Pedimento,
max: true, max: true,
status: 1, status: 1,
@ -294,14 +248,11 @@ export const Viaje: FC<IProps> = (props) => {
setComentarios('') setComentarios('')
setIDProveedor(0) setIDProveedor(0)
setUltimaCaja('') setUltimaCaja('')
setServicio('')
setProveedor('')
setDisableAduana(true) setDisableAduana(true)
} }
const handleChange = (option: IOpciones) => {
console.log('selectedoptions=' + option)
//setselectedOption(selectedOption)
}
useEffect(() => { useEffect(() => {
console.log(selectedOption) console.log(selectedOption)
}, [selectedOption]) }, [selectedOption])
@ -318,6 +269,18 @@ export const Viaje: FC<IProps> = (props) => {
return lowerCasedCompanies.filter((language) => language.startsWith(value.trim().toLowerCase())) return lowerCasedCompanies.filter((language) => language.startsWith(value.trim().toLowerCase()))
} }
const handleKeyDown = (e: any) => {
// const { cursor, result } = this.state
// arrow up/down button should select next/previous list element
/* if (e.keyCode === 38) {
console.log('arrow down')
} else */
if (e.keyCode === 40) {
console.log('arrow down')
}
}
return ( return (
<div className='tripField'> <div className='tripField'>
<Card style={{ backgroundColor: '#F0F7FC' }}> <Card style={{ backgroundColor: '#F0F7FC' }}>
@ -346,8 +309,11 @@ export const Viaje: FC<IProps> = (props) => {
</Row> </Row>
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
<Col xs={2}>Cliente</Col> <Col xs={2}>Cliente</Col>
{/* <Col xs={10}> <Col xs={9}>
<div className='mainDiv'>
<Form.Group className='typeahead-form-group'>
<Form.Control <Form.Control
autoComplete='nope'
type='text' type='text'
id='Cliente' id='Cliente'
value={Cliente} value={Cliente}
@ -355,81 +321,33 @@ export const Viaje: FC<IProps> = (props) => {
className='dialogLabel' className='dialogLabel'
onChange={(e) => { onChange={(e) => {
setCliente(e.target.value) setCliente(e.target.value)
setSelectedClient(false)
}}
onKeyDown={(e) => {
handleKeyDown(e)
}} }}
/> />
<Autocomplete input={''} /> <Dropdown className='d-inline mx-6' show={!SelectedClient && Cliente.length > 0}>
</Col>*/} <Dropdown.Menu>
{/* <Col xs={10}> {Cliente.length > 0 &&
<Form.Control !SelectedClient &&
as='select' mCatClientes
onChange={(e) => { .filter((result) => result.cliente.toLocaleLowerCase().includes(Cliente.toLocaleLowerCase()))
setIDCliente(parseInt(e.target.value)) .map((result) => (
<Dropdown.Item
onClick={() => {
setIDCliente(result.id)
setCliente(result.cliente)
setSelectedClient(true)
}} }}
value={IDCliente}
className='form-select form-select-sm dialogLabel'
> >
<option value='0'>-SELECCIONE-</option> {result.cliente}
{mCatClientes </Dropdown.Item>
? mCatClientes.map((c) => {
return (
<option key={c.id} value={c.id}>
{c.cliente}
</option>
)
})
: null}
</Form.Control>
</Col> */}
{/* <Col xs={10}>
<Typeahead
clearButton
defaultSelected={mCatClientes.filter((cliente) => {
if (cliente.id === IDCliente) {
return cliente
}
})}
id='Cliente'
labelKey='cliente'
onChange={(selected) => {
if (selected.length > 0) {
const valStringify = JSON.stringify(selected)
const valParse = JSON.parse(valStringify)
//console.log(valParse[0].id)
setIDCliente(valParse[0].id)
}
}}
options={mCatClientes}
placeholder='Seleccione el cliente...'
/>
</Col> */}
{/* <Col xs={10}>
<div className='autoComplete'>
<AutocompletePure
open={isOpen}
value={value}
items={suggestions}
onChange={handleChange}
onSelect={handleSelect}
onClickOutside={handleClickOutside}
renderItem={renderItem}
getSuggestionValue={getSuggestionValue}
/>
</div>
</Col> */}
<Col xs={10}>
{/* <Select
value={selectedOption}
onChange={() => handleChange}
options={options}
isClearable={true}
getOptionLabel={(animal: IOpciones) => animal.label}
getOptionValue={(animal: IOpciones) => animal.value}
/> */}
{/* <select onChange={(e) => handleAddrTypeChange(e)} className='browser-default custom-select'>
{Add.map((address, key) => (
<option value={key}>{address}</option>
))} ))}
</select> */} </Dropdown.Menu>
</Dropdown>
</Form.Group>
</div>
</Col> </Col>
</Row> </Row>
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
@ -474,53 +392,89 @@ export const Viaje: FC<IProps> = (props) => {
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
<Col xs={2}>Origen</Col> <Col xs={2}>Origen</Col>
<Col xs={4}> <Col xs={4}>
<div className='mainDiv'>
<Form.Group className='typeahead-form-group'>
<Form.Control <Form.Control
as='select' autoComplete='nope'
type='text'
id='Origen'
value={Origen}
size='sm'
className='dialogLabel'
onChange={(e) => { onChange={(e) => {
setIDOrigen(parseInt(e.target.value)) setOrigen(e.target.value)
setSelectedOrigen(false)
}} }}
value={IDOrigen} />
className='form-select form-select-sm dialogLabel' <Dropdown className='d-inline mx-6' show={!SelectedOrigen && Origen.length > 0}>
> <Dropdown.Menu>
<option value='0'>-SELECCIONE-</option> {Origen.length > 0 &&
{CatUbicaciones !SelectedOrigen &&
? CatUbicaciones.map((c) => { mCatUbicaciones
if (c.clasificacion === 1) { .filter(
return ( (result) =>
<option key={c.id} value={c.id}> result.ubicacion.toLocaleLowerCase().includes(Origen.toLocaleLowerCase()) &&
{c.ubicacion} result.clasificacion === 1
</option>
) )
} .map((result) => (
}) <Dropdown.Item
: null} onClick={() => {
</Form.Control> setIDOrigen(result.id)
setOrigen(result.ubicacion)
setSelectedOrigen(true)
}}
>
{result.ubicacion}
</Dropdown.Item>
))}
</Dropdown.Menu>
</Dropdown>
</Form.Group>
</div>
</Col> </Col>
<Col xs={2} style={{ textAlign: 'right' }}> <Col xs={2} style={{ textAlign: 'right' }}>
Destino Destino
</Col> </Col>
<Col xs={4}> <Col xs={4}>
<div className='mainDiv'>
<Form.Group className='typeahead-form-group'>
<Form.Control <Form.Control
as='select' autoComplete='nope'
type='text'
id='Destino'
value={Destino}
size='sm'
className='dialogLabel'
onChange={(e) => { onChange={(e) => {
setIDDestino(parseInt(e.target.value)) setDestino(e.target.value)
setSelectedDestino(false)
}} }}
value={IDDestino} />
className='form-select form-select-sm dialogLabel' <Dropdown className='d-inline mx-6' show={!SelectedDestino && Destino.length > 0}>
> <Dropdown.Menu>
<option value='0'>-SELECCIONE-</option> {Destino.length > 0 &&
{CatUbicaciones !SelectedDestino &&
? CatUbicaciones.map((c) => { mCatUbicaciones
if (c.clasificacion === 2) { .filter(
return ( (result) =>
<option key={c.id} value={c.id}> result.ubicacion.toLocaleLowerCase().includes(Destino.toLocaleLowerCase()) &&
{c.ubicacion} result.clasificacion === 2
</option>
) )
} .map((result) => (
}) <Dropdown.Item
: null} onClick={() => {
</Form.Control> setIDDestino(result.id)
setDestino(result.ubicacion)
setSelectedDestino(true)
}}
>
{result.ubicacion}
</Dropdown.Item>
))}
</Dropdown.Menu>
</Dropdown>
</Form.Group>
</div>
</Col> </Col>
</Row> </Row>
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
@ -557,19 +511,6 @@ export const Viaje: FC<IProps> = (props) => {
</Form.Control> </Form.Control>
</Col> </Col>
<Col xs={3}>&nbsp;</Col> <Col xs={3}>&nbsp;</Col>
{/* <Col>Pickup no</Col>
<Col xs={4}>
<Form.Control
type='text'
id='PickUpNumber'
value={PickUpNumber}
size='sm'
className='dialogLabel'
onChange={(e) => {
setPickUpNumber(e.target.value)
}}
/>
</Col> */}
</Row> </Row>
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
<Col xs={2}>Pedimento</Col> <Col xs={2}>Pedimento</Col>
@ -603,6 +544,7 @@ export const Viaje: FC<IProps> = (props) => {
variant='primary' variant='primary'
onClick={() => { onClick={() => {
saveMaster() saveMaster()
saveDetail()
}} }}
> >
Guardar Guardar
@ -619,25 +561,46 @@ export const Viaje: FC<IProps> = (props) => {
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
<Col xs={2}>Servicio</Col> <Col xs={2}>Servicio</Col>
<Col xs={4}> <Col xs={4}>
<div className='mainDiv'>
<Form.Group className='typeahead-form-group'>
<Form.Control <Form.Control
as='select' autoComplete='nope'
type='text'
id='Servicio'
value={Servicio}
size='sm'
className='dialogLabel'
onChange={(e) => { onChange={(e) => {
setIDServicio(parseInt(e.target.value)) setServicio(e.target.value)
setSelectedServicio(false)
}} }}
value={IDServicio} onKeyDown={(e) => {
className='form-select form-select-sm dialogLabel' handleKeyDown(e)
> }}
<option value='0'>Seleccione el servicio...</option> />
{CatServicios <Dropdown className='d-inline mx-6' show={!SelectedServicio && Servicio.length > 0}>
? CatServicios.map((c) => { <Dropdown.Menu>
return ( {Servicio.length > 0 &&
<option key={c.id} value={c.id}> !SelectedServicio &&
{c.servicio} mCatServicios
</option> .filter((result) =>
result.servicio.toLocaleLowerCase().includes(Servicio.toLocaleLowerCase())
) )
}) .map((result) => (
: null} <Dropdown.Item
</Form.Control> onClick={() => {
setIDServicio(result.id)
setServicio(result.servicio)
setSelectedServicio(true)
}}
>
{result.servicio}
</Dropdown.Item>
))}
</Dropdown.Menu>
</Dropdown>
</Form.Group>
</div>
</Col> </Col>
<Col style={{ visibility: DisableAduana ? 'hidden' : 'visible' }}> <Col style={{ visibility: DisableAduana ? 'hidden' : 'visible' }}>
<DatePicker <DatePicker
@ -690,25 +653,43 @@ export const Viaje: FC<IProps> = (props) => {
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
<Col xs={2}>Proveedor</Col> <Col xs={2}>Proveedor</Col>
<Col xs={10}> <Col xs={10}>
<div className='mainDiv'>
<Form.Group className='typeahead-form-group'>
<Form.Control <Form.Control
as='select' autoComplete='nope'
type='text'
id='Proveedor'
value={Proveedor}
size='sm'
className='dialogLabel'
onChange={(e) => { onChange={(e) => {
setIDProveedor(parseInt(e.target.value)) setProveedor(e.target.value)
setSelectedProveedor(false)
}} }}
value={IDProveedor} />
className='form-select form-select-sm dialogLabel' <Dropdown className='d-inline mx-6' show={!SelectedProveedor && Proveedor.length > 0}>
> <Dropdown.Menu>
<option value='0'>-SELECCIONE-</option> {Proveedor.length > 0 &&
{CatProveedores !SelectedProveedor &&
? CatProveedores.map((c) => { mCatProveedores
return ( .filter((result) =>
<option key={c.id} value={c.id}> result.proveedor.toLocaleLowerCase().includes(Proveedor.toLocaleLowerCase())
{c.proveedor}
</option>
) )
}) .map((result) => (
: null} <Dropdown.Item
</Form.Control> onClick={() => {
setIDProveedor(result.id)
setProveedor(result.proveedor)
setSelectedProveedor(true)
}}
>
{result.proveedor}
</Dropdown.Item>
))}
</Dropdown.Menu>
</Dropdown>
</Form.Group>
</div>
</Col> </Col>
</Row> </Row>
<Row style={{ paddingTop: '5px' }}> <Row style={{ paddingTop: '5px' }}>
@ -727,14 +708,14 @@ export const Viaje: FC<IProps> = (props) => {
</Col> </Col>
<Col xs={4}></Col> <Col xs={4}></Col>
<Col xs={3} style={{ textAlign: 'right' }}> <Col xs={3} style={{ textAlign: 'right' }}>
<Button {/* <Button
variant='success' variant='success'
onClick={() => { onClick={() => {
saveDetail() saveDetail()
}} }}
> >
Guardar servicio Guardar servicio
</Button> </Button> */}
</Col> </Col>
</Row> </Row>
</Card.Body> </Card.Body>

@ -25,9 +25,9 @@ export const ViajeEstatus: FC<IProps> = (props) => {
const [ListaSecuencia, setListaSecuencia] = useState<DTOViajeEstatusSecuencia[]>([]) const [ListaSecuencia, setListaSecuencia] = useState<DTOViajeEstatusSecuencia[]>([])
const [Secuencia, setSecuencia] = useState(1) const [Secuencia, setSecuencia] = useState(1)
const changeStatus = (e: any) => { /* const changeStatus = (e: any) => {
setIDStatus(parseInt(e.target.value)) setIDStatus(parseInt(e.target.value))
} } */
const enlistaSecuenciaViaje = () => { const enlistaSecuenciaViaje = () => {
const Lista: DTOViajeEstatusSecuencia[] = mTripStatus const Lista: DTOViajeEstatusSecuencia[] = mTripStatus
@ -48,10 +48,11 @@ export const ViajeEstatus: FC<IProps> = (props) => {
enlistaSecuenciaViaje() enlistaSecuenciaViaje()
}, [Secuencia, IDStatus]) }, [Secuencia, IDStatus])
const selectedStatus = () => { const selectedStatus = (e: any) => {
setIDStatus(parseInt(e.target.value))
const data: DTOChangeTripStatus = { const data: DTOChangeTripStatus = {
idViaje: props.IDViaje, idViaje: props.IDViaje,
idEstatus: IDStatus, idEstatus: parseInt(e.target.value),
} }
DSOpStatusSecuence.ChangeTripStatus(data) DSOpStatusSecuence.ChangeTripStatus(data)
.then((response) => { .then((response) => {
@ -64,13 +65,12 @@ export const ViajeEstatus: FC<IProps> = (props) => {
return a return a
} }
}) })
const updatedRow: DTOOpViajes = { ...result[0] } /* const updatedRow: DTOOpViajes = { ...result[0] }
setSecuencia(response.data.secuencia) setSecuencia(response.data.secuencia)
updatedRow.status = response.data.secuencia updatedRow.status = response.data.secuencia*/
if (response.data.secuencia !== 100) { if (response.data.secuencia === 100) {
updatedRow.status = response.data.secuencia dispatch(deleteOpViajes(props.IDViaje))
dispatch(updateOpViajes(updatedRow)) }
} else dispatch(deleteOpViajes(props.IDViaje))
}) })
.catch((e: Error) => {}) .catch((e: Error) => {})
} }
@ -80,9 +80,10 @@ export const ViajeEstatus: FC<IProps> = (props) => {
<Form.Control <Form.Control
as='select' as='select'
onChange={(e) => { onChange={(e) => {
changeStatus(e) // changeStatus(e)
selectedStatus(e)
}} }}
onKeyPress={(e) => e.key === 'Enter' && selectedStatus()} /* onKeyPress={(e) => e.key === 'Enter' && selectedStatus()} */
value={IDStatus} value={IDStatus}
className='form-select form-select-sm dialogLabel' className='form-select form-select-sm dialogLabel'
> >

@ -15,6 +15,7 @@ export default interface DTOOpViajes {
destino: number destino: number
sDestino: string, sDestino: string,
tipoOperacion: number, tipoOperacion: number,
sTipoOperacion: string,
pedimento: string, pedimento: string,
max: boolean, max: boolean,
status: number status: number

@ -21,7 +21,7 @@ instance.interceptors.response.use(function (response) {
} }
else if (401 === error.response.status) { else if (401 === error.response.status) {
localStorage.clear(); localStorage.clear();
window.location.href = "/login"; window.location.href = "/";
} else if ((409 === error.response.status) && (error.response.data.respuesta.indexOf('factura'))) { } else if ((409 === error.response.status) && (error.response.data.respuesta.indexOf('factura'))) {
console.log(JSON.stringify(error.response)) console.log(JSON.stringify(error.response))
if (error.response.data.registro.factura) { if (error.response.data.registro.factura) {

@ -0,0 +1,30 @@
.mainDiv {
/* padding-top: 50px; */
font-family: sans-serif;
text-align: center;
/* width: 300px; */
/* margin: 0 auto; */
}
.typeahead-form-group {
position: relative;
z-index: 10000;
}
.typeahead-list-group {
position: absolute;
width: 100%;
top: 38px;
left: 0;
}
.typeahead-list-group-item {
padding: 0.3rem 1.3rem;
background-color: rgb(228, 243, 240);
}
.typeahead-list-group-item:hover {
cursor: pointer;
background: #2d4ddc;
color: #fff;
}
Loading…
Cancel
Save