From fab7d63333b86b9fe0f1c52d2c642b52bbf506c0 Mon Sep 17 00:00:00 2001 From: gabrhr <73925454+gabrhr@users.noreply.github.com> Date: Mon, 6 Jun 2022 11:35:56 -0500 Subject: Add CRUD Camiones MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - están ok funcionando: listar, insertar, editar, eliminar #TODO - añadir todos los puntos - Mejorar el path del punto con funcion - añadir tiempos segun distancia - estetica al final (camion, colores, etc) - Arreglar combos - Añadir los reducer de pedidos, rutas, almacen Camiones CRUD - ver codigo de camion corelativo - añadir Ciudad origen --- .../controllers/TipoCamionController.java | 5 ++ .../pe/edu/pucp/odiparback/dao/TipoCamionDao.java | 1 + .../pucp/odiparback/dao/imp/TipoCamionDaoImp.java | 18 ++++++ .../java/pe/edu/pucp/odiparback/models/Camion.java | 10 +-- .../odiparback/services/TipoCamionService.java | 4 ++ front/odiparpack/app/actions/actionTypes.js | 5 ++ front/odiparpack/app/actions/camion.js | 74 +++++++++++++++++++++- front/odiparpack/app/actions/tipoCamion.js | 19 ++++++ front/odiparpack/app/api/camion.js | 17 ++++- front/odiparpack/app/api/pedido.js | 2 +- front/odiparpack/app/api/tipoCamion.js | 10 +++ .../app/components/Tables/CrudTableForm.js | 15 ++++- .../components/Tables/tableParts/RowReadOnly.js | 2 +- .../Odipar/Camiones/CamionTab/CamionTab.js | 7 +- .../Camiones/CamionTab/table/CrudCamionTab.js | 28 ++++---- .../Camiones/CamionTab/table/FormCamionTab.js | 66 ++++++++++++++----- .../containers/Odipar/Simulacion/SimulacionMain.js | 32 +++++----- front/odiparpack/app/redux/modules/camion.js | 4 +- front/odiparpack/app/redux/modules/tipoCamion.js | 16 +++++ front/odiparpack/app/utils/odipar/api.js | 1 + 20 files changed, 272 insertions(+), 64 deletions(-) create mode 100644 front/odiparpack/app/actions/tipoCamion.js create mode 100644 front/odiparpack/app/api/tipoCamion.js create mode 100644 front/odiparpack/app/redux/modules/tipoCamion.js diff --git a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/controllers/TipoCamionController.java b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/controllers/TipoCamionController.java index 72beae9..31374a6 100644 --- a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/controllers/TipoCamionController.java +++ b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/controllers/TipoCamionController.java @@ -35,6 +35,11 @@ public class TipoCamionController { return tipoCamionService.get(id); } + @GetMapping(value = "/nombre={nombre}") + TipoCamion get(@PathVariable String nombre)throws AuthenticationException{ + return tipoCamionService.getXNombre(nombre); + } + @PostMapping(value = "/") void register(@RequestBody TipoCamion tipoCamion)throws SQLException{ tipoCamionService.register(tipoCamion); diff --git a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/TipoCamionDao.java b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/TipoCamionDao.java index 4340dfc..4b73298 100644 --- a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/TipoCamionDao.java +++ b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/TipoCamionDao.java @@ -7,6 +7,7 @@ import pe.edu.pucp.odiparback.models.TipoCamion; public interface TipoCamionDao { public List getAll(); public TipoCamion get(int id); + public TipoCamion getXNombre(String nombre); public void register(TipoCamion tipoCamion); public TipoCamion update(TipoCamion tipoCamion); public void delete(int id); diff --git a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/imp/TipoCamionDaoImp.java b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/imp/TipoCamionDaoImp.java index d352634..76ad979 100644 --- a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/imp/TipoCamionDaoImp.java +++ b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/dao/imp/TipoCamionDaoImp.java @@ -48,6 +48,24 @@ public class TipoCamionDaoImp implements TipoCamionDao{ return resultado; } + @Transactional + @Override + public TipoCamion getXNombre(String nombre) { + TipoCamion resultado = null; + List lista = null; + try { + char nomb = nombre.charAt(0); + String hql = "FROM TipoCamion WHERE nombre = '" + nomb + "'"; + lista = entityManager.createQuery(hql).getResultList(); + resultado = lista.get(0); + } + catch(Exception ex){ + System.out.print(ex.getMessage()); + } + + return resultado; + } + @Transactional @Override public void register(TipoCamion tipoCamion) { diff --git a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/models/Camion.java b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/models/Camion.java index 7c66069..747d937 100644 --- a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/models/Camion.java +++ b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/models/Camion.java @@ -40,9 +40,6 @@ public class Camion { @Column(name = "placa") private String placa; - @Column(name = "codigo") - private String codigo; - @Column(name = "kilometraje") private double kilometraje; @@ -56,9 +53,4 @@ public class Camion { @JoinColumn(name = "tipoCamion_fk") private TipoCamion tipoCamion; - @Column(name = "activo") - @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) - private int activo = 1; - - -} +} \ No newline at end of file diff --git a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/services/TipoCamionService.java b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/services/TipoCamionService.java index fd7b811..e92e355 100644 --- a/back/odiparback/src/main/java/pe/edu/pucp/odiparback/services/TipoCamionService.java +++ b/back/odiparback/src/main/java/pe/edu/pucp/odiparback/services/TipoCamionService.java @@ -18,6 +18,10 @@ public class TipoCamionService { return daoTipoCamion.get(id); } + public TipoCamion getXNombre(String nombre){ + return daoTipoCamion.getXNombre(nombre); + } + public void register(TipoCamion tipoCamion){ daoTipoCamion.register(tipoCamion); } diff --git a/front/odiparpack/app/actions/actionTypes.js b/front/odiparpack/app/actions/actionTypes.js index 11884c0..36d1b07 100644 --- a/front/odiparpack/app/actions/actionTypes.js +++ b/front/odiparpack/app/actions/actionTypes.js @@ -93,3 +93,8 @@ export const LISTA_PEDIDO = 'LISTA_PEDIDO'; export const LISTA_ALMACEN = 'LISTA_ALMACEN'; //Odi Camion export const LISTA_CAMION = 'LISTA_CAMION'; +export const NUEVO_CAMION = 'NUEVO_CAMION'; +export const ACTUALIZAR_CAMION = 'ACTUALIZAR_CAMION'; +export const ELIMINAR_CAMION = 'ELIMINAR_CAMION'; + +export const LISTA_TIPO_CAMION = 'LISTA_TIPO_CAMION'; diff --git a/front/odiparpack/app/actions/camion.js b/front/odiparpack/app/actions/camion.js index 6fdd2c6..dc60eee 100644 --- a/front/odiparpack/app/actions/camion.js +++ b/front/odiparpack/app/actions/camion.js @@ -1,6 +1,12 @@ import { - getCamionAPI + getCamionAPI, + insertarCamionAPI, + editarCamionAPI, + eliminarCamionAPI } from 'ba-api/camion'; +import { + getTipoCamionXNombreAPI +} from 'ba-api/tipoCamion'; import * as types from './actionTypes' export const setCamiones = (payload) => ({ @@ -8,6 +14,21 @@ export const setCamiones = (payload) => ({ payload }); +export const insertCamiones = (payload) => ({ + type: types.NUEVO_CAMION, + payload +}); + +export const updateCamiones = (payload) => ({ + type: types.ACTUALIZAR_CAMION, + payload +}); + +export const deleteCamiones = (payload) => ({ + type: types.ELIMINAR_CAMION, + payload +}); + /***************************************/ export function b2fCamiones(x){ const {...other} = x @@ -23,6 +44,24 @@ export function b2fCamiones(x){ } } +export function f2bCamion(x, tipo){ + console.log("Antes", tipo) + console.log("data new", x.get('id')) + const data = { + id: x.get('id')? x.get('id'): undefined, + placa: x.get('placa'), + codigo: "A0005", + estado: x.get('estado'), + kilometraje: 50.0, + tipoCamion: { + id: tipo.id, + nombre: tipo.nombre, + capacidad: tipo.capacidad + } + } + return data +} + /***************************************/ export const getCamiones = () => async dispatch => { @@ -37,3 +76,36 @@ export const getCamiones = () => async dispatch => { console.log(e) } } + +export const insertarCamion = (data) => async dispatch => { + try{ + const resTipo = await getTipoCamionXNombreAPI(data.get('tipo')); + const res = await insertarCamionAPI(f2bCamion(data, resTipo.data)); + dispatch(insertCamiones({res})) + return res; + }catch(e){ + console.log(e) + } +} + +export const editarCamion = (data) => async dispatch => { + try{ + const resTipo = await getTipoCamionXNombreAPI(data.get('tipo')); + const res = await editarCamionAPI(f2bCamion(data, resTipo.data)); + dispatch(updateCamiones({res})) + return res; + }catch(e){ + console.log(e) + } +} + +export const eliminarCamion = (data) => async dispatch => { + try{ + //Envia id + const res = await eliminarCamionAPI(data); + dispatch(deleteCamiones({res})) + return res; + }catch(e){ + console.log(e) + } +} diff --git a/front/odiparpack/app/actions/tipoCamion.js b/front/odiparpack/app/actions/tipoCamion.js new file mode 100644 index 0000000..06a47d6 --- /dev/null +++ b/front/odiparpack/app/actions/tipoCamion.js @@ -0,0 +1,19 @@ +import { + getTiposCamionAPI +} from 'ba-api/tipoCamion'; +import * as types from './actionTypes' + +export const setTipoCamiones = (payload) => ({ + type: types.LISTA_TIPO_CAMION, + payload +}); + +export const getTipoCamiones = () => async dispatch => { + try{ + const res = await getTiposCamionAPI(); + dispatch(setTipoCamiones({res})) + return res; + }catch(e){ + console.log(e) + } +} \ No newline at end of file diff --git a/front/odiparpack/app/api/camion.js b/front/odiparpack/app/api/camion.js index 8229bbf..b368522 100644 --- a/front/odiparpack/app/api/camion.js +++ b/front/odiparpack/app/api/camion.js @@ -1,6 +1,21 @@ -import { apiGet } from '../utils/odipar/api'; +import { apiDelete, apiGet, apiPost, apiPut } from '../utils/odipar/api'; //GET APIS export const getCamionAPI = async () => { return await apiGet(`camion/`) } + +//POST APIS +export const insertarCamionAPI = async (data) => { + return await apiPost(`camion/`, data) +} + +//PUT APIS +export const editarCamionAPI = async (data) => { + return await apiPut(`camion/`, data) +} + +//DELETE APIS +export const eliminarCamionAPI = async (id) => { + return await apiDelete(`camion/${id}`) +} diff --git a/front/odiparpack/app/api/pedido.js b/front/odiparpack/app/api/pedido.js index 63d6e2e..0b7e3d1 100644 --- a/front/odiparpack/app/api/pedido.js +++ b/front/odiparpack/app/api/pedido.js @@ -3,7 +3,7 @@ import { apiGet } from '../utils/odipar/api'; //GET APIS export const getPedidosAPI = async () => { - return await apiGet(`ayuda/`) + return await apiGet(`camion/`) } export function getAPi(){ diff --git a/front/odiparpack/app/api/tipoCamion.js b/front/odiparpack/app/api/tipoCamion.js new file mode 100644 index 0000000..d932d10 --- /dev/null +++ b/front/odiparpack/app/api/tipoCamion.js @@ -0,0 +1,10 @@ +import { apiGet } from '../utils/odipar/api'; + +//GET APIS +export const getTiposCamionAPI = async () => { + return await apiGet(`tipoCamion/`) +} + +export const getTipoCamionXNombreAPI = async (nombre) => { + return await apiGet(`tipoCamion/nombre=${nombre}`) +} \ No newline at end of file diff --git a/front/odiparpack/app/components/Tables/CrudTableForm.js b/front/odiparpack/app/components/Tables/CrudTableForm.js index 017a3fc..5e99280 100644 --- a/front/odiparpack/app/components/Tables/CrudTableForm.js +++ b/front/odiparpack/app/components/Tables/CrudTableForm.js @@ -15,21 +15,30 @@ class CrudTableForm extends React.Component { this.props.fetchData(this.props.dataInit, this.props.branch); } } + + renderData(){ + this.props.dispatch(this.props.getDataAPI()).then((res) => { + if (res) { + this.props.fetchData(res.data, this.props.branch); + } + }) + }6 + sendValues = (values) => { setTimeout(() => { this.props.submit(values, this.props.branch); }, 500); if (this.props.editingId === this.props.initValues.get('id')) { - this.props.dispatch(this.props.editRowAPI()).then((res) => { + this.props.dispatch(this.props.editRowAPI(values)).then((res) => { if (res) { console.log("EDIT RO ", res) } }) } else { - this.props.dispatch(this.props.addNewAPI()).then((res) => { + this.props.dispatch(this.props.addNewAPI(values)).then((res) => { if (res) { - console.log("ADD NEW FORM ", res) + this.renderData(); } }) } diff --git a/front/odiparpack/app/components/Tables/tableParts/RowReadOnly.js b/front/odiparpack/app/components/Tables/tableParts/RowReadOnly.js index f6be3fd..5e58ca7 100644 --- a/front/odiparpack/app/components/Tables/tableParts/RowReadOnly.js +++ b/front/odiparpack/app/components/Tables/tableParts/RowReadOnly.js @@ -29,7 +29,7 @@ class RowReadOnly extends React.Component { } = this.props; const eventDel = () => { removeRow(item, branch); - this.props.dispatch(removeRowAPI()).then((res) => { + this.props.dispatch(removeRowAPI(item.get('id'))).then((res) => { if (res) { console.log("REMOVE READ ONLY ", res) } diff --git a/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/CamionTab.js b/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/CamionTab.js index 5110566..bd86653 100644 --- a/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/CamionTab.js +++ b/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/CamionTab.js @@ -16,6 +16,7 @@ const styles = ({ }); class CamionTab extends Component { + //Obtenemos la lista constructor (props) { super(props) this.state = { @@ -26,7 +27,6 @@ class CamionTab extends Component { this.setState({ dataRealF: res.data, }); - console.log("Vengo del back", res.data) } }) } @@ -34,10 +34,9 @@ class CamionTab extends Component { render() { const {dataRealF} = this.state; - const { classes } = this.props; return ( - - + //Mandamos la lista(dataRealF) y la funcion del GET + ); } diff --git a/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/CrudCamionTab.js b/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/CrudCamionTab.js index 11c0805..6d5f366 100644 --- a/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/CrudCamionTab.js +++ b/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/CrudCamionTab.js @@ -19,8 +19,10 @@ import { } from '@material-ui/core'; import { anchorTable, dataApi } from './dataCamion'; import FormCamionTab from './FormCamionTab'; + //actions -import { getPedidos } from 'ba-actions/pedido'; +import { insertarCamion, editarCamion, eliminarCamion } from 'ba-actions/camion'; + const branch = 'crudCamion'; const renderRadioGroup = ({ input, ...rest }) => ( @@ -42,7 +44,7 @@ const styles = ({ class CrudCamionTab extends Component { render() { - //console.log("render ps") + //Obtenemos dataReal y getDataAPI const { classes, fetchData, @@ -59,16 +61,17 @@ class CrudCamionTab extends Component { title, dataReal, dispatch, - editingId + editingId, + getDataAPI } = this.props; - //console.log("render ps DATA", dataReal) - //console.log("original", dataApi) - return (
closeNotif(branch)} variant = "success" message={messageNotif} /> + {/* Enviamos dataReal como dataInit y getDataAPI. + También, mandamos addNewAPI, removeRowAPI, editRowAPI (con funciones de arriba "//actions") + */} - {/* Create Your own form, then arrange or custom it as You like */} - + {/* Create Your own form, then arrange or custom it as You like + ------------> OJO Mandamos dispatch + */} + {/* No need create button or submit, because that already made in this component */} diff --git a/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/FormCamionTab.js b/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/FormCamionTab.js index 25d107c..f98ae20 100644 --- a/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/FormCamionTab.js +++ b/front/odiparpack/app/containers/Odipar/Camiones/CamionTab/table/FormCamionTab.js @@ -2,19 +2,17 @@ import React, { Component } from 'react'; import { withStyles } from '@material-ui/core/styles'; import PropTypes from 'prop-types'; import { Field } from 'redux-form/immutable'; -import {required, integer} from 'ba-api/validation' +import {required} from 'ba-api/validation' import { SelectRedux, - TextFieldRedux, - DatePickerRedux, - EstadoRedux + TextFieldRedux } from 'ba-components/Forms/ReduxFormMUI'; import { MenuItem, InputLabel, - FormControl, - Typography, + FormControl } from '@material-ui/core'; + import { getTipoCamiones } from 'ba-actions/tipoCamion'; const styles = ({ root: { @@ -34,25 +32,56 @@ const styles = ({ flexDirection: 'row' } }); - + +const tipoCamion = [ + { + id: 1, + nombre: "A", + capacidad: 90 + }, + { + id: 2, + nombre: "B", + capacidad: 45 + }, + { + id: 3, + nombre: "C", + capacidad: 30 + }, + { + id: 4, + nombre: "D", + capacidad: 30 + } +] + class FormCamionTab extends Component { + constructor (props) { + super(props) + this.state = { + comboTipos: [] + }; + this.props.dispatch(getTipoCamiones()).then((res) => { + if (res) { + this.setState({ + comboTipos: res.data? res.data : [] + }); + } + }) + } + + saveRef = ref => { this.ref = ref; return this.ref; }; - state = { - selectedDate: new Date(), - } - - handleDateChange = (date) => { - this.setState({ selectedDate: date }); - } render() { const { classes } = this.props; - const { selectedDate } = this.state; const trueBool = true; + const {comboTipos} = this.state return ( <>
@@ -75,8 +104,11 @@ class FormCamionTab extends Component { placeholder="Seleccionar" autoWidth={trueBool} > - A - B + {comboTipos.map((item,index) => { + return ( + {item.nombre} + ) + })}
diff --git a/front/odiparpack/app/containers/Odipar/Simulacion/SimulacionMain.js b/front/odiparpack/app/containers/Odipar/Simulacion/SimulacionMain.js index b9447d8..52d821f 100644 --- a/front/odiparpack/app/containers/Odipar/Simulacion/SimulacionMain.js +++ b/front/odiparpack/app/containers/Odipar/Simulacion/SimulacionMain.js @@ -1,8 +1,9 @@ import React, {Component} from "react"; import { Button, Divider, FormControl, Grid, InputLabel, MenuItem, Paper, Select, Typography } from "@material-ui/core"; import { withStyles } from '@material-ui/core/styles'; -import { Field, reduxForm } from "redux-form"; -import { SelectRedux } from 'ba-components/Forms/ReduxFormMUI'; +import { Link } from 'react-router-dom'; +import { reduxForm } from "redux-form"; + const styles = ({ root: { @@ -30,13 +31,9 @@ class SimulacionMain extends Component { tipo:'' } - changeTipo(tipo){ - this.setState({tipo: tipo}) - } - handleChange = event => { - this.setState({ [event.target.name]: event.target.value }); - }; + this.setState({ tipo: event.target.value }); + }; render() { const trueBool = true; @@ -56,27 +53,32 @@ class SimulacionMain extends Component {
- Tipo de simulación + Tipo de simulación
+ + +
diff --git a/front/odiparpack/app/redux/modules/camion.js b/front/odiparpack/app/redux/modules/camion.js index 5cfe7d8..03394d7 100644 --- a/front/odiparpack/app/redux/modules/camion.js +++ b/front/odiparpack/app/redux/modules/camion.js @@ -1,4 +1,4 @@ -import { LISTA_CAMION } from 'ba-actions/actionTypes'; +import { LISTA_CAMION, NUEVO_CAMION } from 'ba-actions/actionTypes'; const initState = { camiones : [] @@ -8,6 +8,8 @@ const camion = (state = initState, action) => { switch (action.type) { case LISTA_CAMION: return { ...state, camiones: action.payload } + case NUEVO_CAMION: + return { ...state } default : return state } diff --git a/front/odiparpack/app/redux/modules/tipoCamion.js b/front/odiparpack/app/redux/modules/tipoCamion.js new file mode 100644 index 0000000..c5e690a --- /dev/null +++ b/front/odiparpack/app/redux/modules/tipoCamion.js @@ -0,0 +1,16 @@ +import { LISTA_TIPO_CAMION } from 'ba-actions/actionTypes'; + +const initState = { + tipos : [] +} + +const camion = (state = initState, action) => { + switch (action.type) { + case LISTA_TIPO_CAMION: + return { ...state, tipos: action.payload } + default : + return state + } +} + +export default camion; \ No newline at end of file diff --git a/front/odiparpack/app/utils/odipar/api.js b/front/odiparpack/app/utils/odipar/api.js index 50c2beb..3f6f726 100644 --- a/front/odiparpack/app/utils/odipar/api.js +++ b/front/odiparpack/app/utils/odipar/api.js @@ -43,6 +43,7 @@ export function apiReq(endPoint, data, method, headers, requestOptions = {}) { } } + console.log("AAAAAAAaaaaaaa?", data) return axios[method](endPoint, data, { headers }) } -- cgit v1.2.3