diff --git a/package.json b/package.json index b80157c..e03074a 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "jwt-decode": "^3.1.2", "react": "^18.2.0", "react-bootstrap": "^2.5.0", + "react-currency-format": "^1.1.0", "react-data-table-component": "^7.5.3", "react-dom": "^18.2.0", "react-icons": "^4.4.0", diff --git a/src/Components/Catalogos/CatRutas.tsx b/src/Components/Catalogos/CatRutas.tsx index 9e55aea..7d9a801 100644 --- a/src/Components/Catalogos/CatRutas.tsx +++ b/src/Components/Catalogos/CatRutas.tsx @@ -2,17 +2,24 @@ import React, { FC, useState } from 'react' import { Alert, Card, Col, Form, Row } from 'react-bootstrap' import { useSelector } from 'react-redux' import { RootState } from '../../store/store' +import * as CurrencyFormat from 'react-currency-format' interface IProps {} export const CatRutas: FC = (props) => { const CatClientes = useSelector((state: RootState) => state.CatClientes.CatClientes) + const CatProveedores = useSelector((state: RootState) => state.CatProveedores.CatProveedores) const CatTipoUnidades = useSelector((state: RootState) => state.CatTipoUnidades.CatTipoUnidades) const CatUbicaciones = useSelector((state: RootState) => state.CatUbicaciones.CatUbicaciones) + const CatServicios = useSelector((state: RootState) => state.CatServicios.CatServicios) const [IDCliente, setIDCliente] = useState(0) + const [IDProveedor, setIDProveedor] = useState(0) const [IDTipoUnidad, setIDTipoUnidad] = useState(0) const [IDOrigen, setIDOrigen] = useState(0) const [IDDestino, setIDDestino] = useState(0) + const [IDServicio, setIDServicio] = useState(0) + const [Precio, setPrecio] = useState(0) + const [Costo, setCosto] = useState(0) return (
@@ -24,8 +31,8 @@ export const CatRutas: FC = (props) => { Rutas - Cliente - + Cliente + { @@ -46,57 +53,130 @@ export const CatRutas: FC = (props) => { : null} - Tipo unidad - + Servicio + { - setIDTipoUnidad(parseInt(e.target.value)) + setIDServicio(parseInt(e.target.value)) }} - value={IDTipoUnidad} + value={IDServicio} className='form-select form-select-sm' > - {CatTipoUnidades - ? CatTipoUnidades.map((c) => { + {CatServicios + ? CatServicios.map((c) => { return ( ) }) : null} +   + Precio + + { + const { value } = values + setPrecio(value) + }} + style={{ + fontSize: '18px', + backgroundColor: '#F5FFED', + border: '2px solid #25D05B', + width: '150px', + textAlign: 'right', + borderRadius: '10px', + }} + /> +   - Origen - + Proveedor + { - setIDOrigen(parseInt(e.target.value)) + setIDProveedor(parseInt(e.target.value)) }} - value={IDOrigen} + value={IDProveedor} className='form-select form-select-sm' > - {CatUbicaciones - ? CatUbicaciones.map((c) => { + {CatProveedores + ? CatProveedores.map((c) => { return ( ) }) : null} - Destino - +   + Costo + + { + const { value } = values + setCosto(value) + }} + style={{ + fontSize: '18px', + backgroundColor: '#F5FFED', + border: '2px solid #25D05B', + width: '150px', + textAlign: 'right', + borderRadius: '10px', + }} + /> + + + +   + + + Origen + + { + setIDOrigen(parseInt(e.target.value)) + }} + value={IDOrigen} + className='form-select form-select-sm' + > + + {CatUbicaciones + ? CatUbicaciones.map((c) => { + if (c.clasificacion === 1) { + return ( + + ) + } + }) + : null} + + + Destino + { @@ -108,9 +188,33 @@ export const CatRutas: FC = (props) => { {CatUbicaciones ? CatUbicaciones.map((c) => { + if (c.clasificacion === 2) { + return ( + + ) + } + }) + : null} + + + Tipo unidad + + { + setIDTipoUnidad(parseInt(e.target.value)) + }} + value={IDTipoUnidad} + className='form-select form-select-sm' + > + + {CatTipoUnidades + ? CatTipoUnidades.map((c) => { return ( ) }) @@ -118,7 +222,9 @@ export const CatRutas: FC = (props) => { - + +   + diff --git a/src/Components/Catalogos/CatUbicaciones.tsx b/src/Components/Catalogos/CatUbicaciones.tsx index 4323061..a980801 100644 --- a/src/Components/Catalogos/CatUbicaciones.tsx +++ b/src/Components/Catalogos/CatUbicaciones.tsx @@ -17,6 +17,7 @@ export const CatUbicaciones: FC = (props) => { const [showCatUbicacionesDialog, setShowCatUbicacionesDialog] = useState(false) const [deleteCatUbicacionesDialog, setDeleteCatUbicacionesDialog] = useState(false) const [IDUbicacion, setIDUbicacion] = useState(0) + const [Clasificacion, setClasificacion] = useState(0) const [Ubicacion, setUbicacion] = useState('') const [Search, setSearch] = useState('') const columnsConcepts = [ @@ -26,6 +27,12 @@ export const CatUbicaciones: FC = (props) => { selector: (row: ICatUbicaciones) => row.id, sortable: true, }, + { + name: 'O / D', + width: '80px', + selector: (row: ICatUbicaciones) => (row.clasificacion === 1 ? 'O' : 'D'), + sortable: true, + }, { name: 'Ubicacion', width: '450px', @@ -71,12 +78,14 @@ export const CatUbicaciones: FC = (props) => { const showInfo = (data: ICatUbicaciones) => { setIDUbicacion(data.id) setUbicacion(data.ubicacion) + setClasificacion(data.clasificacion) setShowCatUbicacionesDialog(true) } const confirmDelete = (data: ICatUbicaciones) => { setIDUbicacion(data.id) setUbicacion(data.ubicacion) + setClasificacion(data.clasificacion) setDeleteCatUbicacionesDialog(true) } @@ -93,6 +102,7 @@ export const CatUbicaciones: FC = (props) => { const data: ICatUbicaciones = { id: IDUbicacion, ubicacion: Ubicacion, + clasificacion: Clasificacion, activo: 1, } DSCatUbicaciones.Append(data) @@ -166,6 +176,20 @@ export const CatUbicaciones: FC = (props) => { + Clasificacion + + { + setClasificacion(parseInt(e.target.value)) + }} + value={Clasificacion} + className='form-select form-select-sm' + > + + + +
diff --git a/src/Components/Home/Home.tsx b/src/Components/Home/Home.tsx index 5a5520d..4f14078 100644 --- a/src/Components/Home/Home.tsx +++ b/src/Components/Home/Home.tsx @@ -6,10 +6,12 @@ import DSCatClientes from '../../Services/Catalogos/CatClientes.Services' import DSCatProveedores from '../../Services/Catalogos/CatProveedores.Services' import DSCatTipoUnidades from '../../Services/Catalogos/CatTipoUnidades.Services' import DSCatUbicaciones from '../../Services/Catalogos/CatUbicaciones.Services' +import DSCatServicios from '../../Services/Catalogos/CatServicios.Service' import { populateCatClientes } from '../../store/features/Catalogos/CatClientesSlice' import { populateCatProveedores } from '../../store/features/Catalogos/CatProveedoresSlice' import { populateCatTipoUnidades } from '../../store/features/Catalogos/CatTipoUnidadesSlice' import { populateCatUbicaciones } from '../../store/features/Catalogos/CatUbicacionesSlice' +import { populateCatServicios } from '../../store/features/Catalogos/CatServiciosSlice' interface IProps {} @@ -38,6 +40,11 @@ export const Home: FC = (props) => { dispatch(populateCatUbicaciones(response.data)) }) .catch((e: Error) => {}) + DSCatServicios.Get() + .then((response) => { + dispatch(populateCatServicios(response.data)) + }) + .catch((e: Error) => {}) } useEffect(() => { diff --git a/src/Interfaces/Catalogos/ICatServicios.ts b/src/Interfaces/Catalogos/ICatServicios.ts new file mode 100644 index 0000000..88c1cd1 --- /dev/null +++ b/src/Interfaces/Catalogos/ICatServicios.ts @@ -0,0 +1,5 @@ +export default interface ICatServicios { + id: number, + servicio: string, + precio: number +} \ No newline at end of file diff --git a/src/Interfaces/Catalogos/ICatUbicaciones.ts b/src/Interfaces/Catalogos/ICatUbicaciones.ts index 8bb5042..fa4ce86 100644 --- a/src/Interfaces/Catalogos/ICatUbicaciones.ts +++ b/src/Interfaces/Catalogos/ICatUbicaciones.ts @@ -1,5 +1,6 @@ export default interface ICatUbicaciones { id: number, ubicacion: string, + clasificacion: number activo: number } \ No newline at end of file diff --git a/src/Services/Catalogos/CatServicios.Service.ts b/src/Services/Catalogos/CatServicios.Service.ts new file mode 100644 index 0000000..b1260c8 --- /dev/null +++ b/src/Services/Catalogos/CatServicios.Service.ts @@ -0,0 +1,16 @@ +import http from "../../Services/Auth/config/http-common"; +import ICatServicios from "../../Interfaces/Catalogos/ICatServicios"; +import IRespuesta from "../../Interfaces/Respuestas/IRespuesta"; + +class CatServiciosDataService { + Get() { + return http.get("Catalogos/CatServicios/Get"); + } + Append(data: ICatServicios) { + return http.post(`Catalogos/CatServicios/Append`,data); + } + Delete(id: number) { + return http.delete(`/Catalogos/CatServicios/Delete/${id}`); + } +} +export default new CatServiciosDataService(); \ No newline at end of file diff --git a/src/store/features/Catalogos/CatServiciosSlice.ts b/src/store/features/Catalogos/CatServiciosSlice.ts new file mode 100644 index 0000000..be62c76 --- /dev/null +++ b/src/store/features/Catalogos/CatServiciosSlice.ts @@ -0,0 +1,32 @@ +import { createSlice, PayloadAction } from '@reduxjs/toolkit' +import ICatServicios from '../../../Interfaces/Catalogos/ICatServicios' +const CatServicios: ICatServicios[] = [] +const initialState = { CatServicios } + +export const CatServiciosSlice = createSlice({ + name: 'CatServicios', + initialState: initialState, + reducers: { + resetCatServicios : (state, action: PayloadAction) => { + state.CatServicios = [] + }, + populateCatServicios : (state, action: PayloadAction) => { + action.payload.forEach(element => { + const index = state.CatServicios.findIndex(object => object.id === element.id) + if (index<0) state.CatServicios.push(element) + }) + }, + updateCatServicios : (state, action: PayloadAction) => { + const i = state.CatServicios.findIndex(_element => _element.id === action.payload.id); + if (i > -1) state.CatServicios[i] = action.payload; + else state.CatServicios.push(action.payload); + }, + deleteCatServicios : (state, action: PayloadAction) => { + const newArr = state.CatServicios.filter(data => data.id != action.payload); + state.CatServicios=newArr + }, + }, +}) + +export const { resetCatServicios, populateCatServicios, updateCatServicios, deleteCatServicios } = CatServiciosSlice.actions; +export default CatServiciosSlice.reducer; \ No newline at end of file diff --git a/src/store/store.ts b/src/store/store.ts index 0f3974e..16bd969 100644 --- a/src/store/store.ts +++ b/src/store/store.ts @@ -4,6 +4,7 @@ import { MenuItemsSlice } from './features/Auth/MenuItemsSlice' import { UserProfileSlice } from './features/Auth/UserProfileSlice' import { CatClientesSlice } from './features/Catalogos/CatClientesSlice' import { CatProveedoresSlice } from './features/Catalogos/CatProveedoresSlice' +import { CatServiciosSlice } from './features/Catalogos/CatServiciosSlice' import { CatTipoUnidadesSlice } from './features/Catalogos/CatTipoUnidadesSlice' import { CatUbicacionesSlice } from './features/Catalogos/CatUbicacionesSlice' @@ -14,7 +15,8 @@ export const store = configureStore({ CatClientes: CatClientesSlice.reducer, CatProveedores: CatProveedoresSlice.reducer, CatTipoUnidades: CatTipoUnidadesSlice.reducer, - CatUbicaciones: CatUbicacionesSlice.reducer + CatUbicaciones: CatUbicacionesSlice.reducer, + CatServicios: CatServiciosSlice.reducer } }) diff --git a/yarn.lock b/yarn.lock index 0e0fa81..d034db4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7313,7 +7313,7 @@ prop-types-extra@^1.1.0: react-is "^16.3.2" warning "^4.0.0" -prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -7426,6 +7426,13 @@ react-bootstrap@^2.5.0: uncontrollable "^7.2.1" warning "^4.0.3" +react-currency-format@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/react-currency-format/-/react-currency-format-1.1.0.tgz#efef7f18045fc09a987de270b144f5eec8801dab" + integrity sha512-WWrEOIp/3GbDSk1wlhFXaBc7IHGT3IwL306DHbGP3GVr4YFa0iS5hHPbKjHa0haruGL4Ly+WG4/5jBHpUtgqZg== + dependencies: + prop-types "^15.6.0" + react-data-table-component@^7.5.3: version "7.5.3" resolved "https://registry.yarnpkg.com/react-data-table-component/-/react-data-table-component-7.5.3.tgz#a008b4c281574cc1a81315e2c1b34107b5d18fe0"