diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..504014cd --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + "configurations": [ + { + "type": "java", + "name": "Spring Boot-ProyectoApplication", + "request": "launch", + "cwd": "${workspaceFolder}", + "mainClass": "uniandes.edu.co.proyecto.ProyectoApplication", + "projectName": "proyecto", + "args": "", + "envFile": "${workspaceFolder}/.env" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..c995aa5c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.debug.settings.onBuildFailureProceed": true +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3c01daba..fd9e2512 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,6 @@ com.oracle.database.jdbc ojdbc8 - 19.3.0.0 org.springframework.boot diff --git a/src/main/java/uniandes/edu/co/proyecto/ProyectoApplication.java b/src/main/java/uniandes/edu/co/proyecto/ProyectoApplication.java index f228d15c..bc8c03ef 100644 --- a/src/main/java/uniandes/edu/co/proyecto/ProyectoApplication.java +++ b/src/main/java/uniandes/edu/co/proyecto/ProyectoApplication.java @@ -1,11 +1,11 @@ package uniandes.edu.co.proyecto; - import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication -public class ProyectoApplication { +@SpringBootApplication +public class ProyectoApplication{ + public static void main(String[] args) { SpringApplication.run(ProyectoApplication.class, args); } diff --git a/src/main/java/uniandes/edu/co/proyecto/controller/BodegaController.java b/src/main/java/uniandes/edu/co/proyecto/controller/BodegaController.java new file mode 100644 index 00000000..16952a29 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/controller/BodegaController.java @@ -0,0 +1,85 @@ +package uniandes.edu.co.proyecto.controller; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import uniandes.edu.co.proyecto.modelo.Bodega; +import uniandes.edu.co.proyecto.repositorio.BodegaRepository; + + +@RestController +public class BodegaController { + + @Autowired + private BodegaRepository bodegaRepository; + + @GetMapping("/bodegas") + public Collection bodegas(){ + return bodegaRepository.darBodegas(); + } + + //Este no dicen como hacerlo xd + @GetMapping("/bodegas/{id}") + public ResponseEntity obtenerBodega(@PathVariable int id){ + + Bodega bodega = bodegaRepository.darBodega(id); + + //Devolver si existe :) + if (bodega != null) { + return new ResponseEntity<>(bodega, HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @PostMapping("/bodegas/new/save") + public ResponseEntity bodegaGuardar(@RequestBody Bodega bodega){ + + try{ + bodegaRepository.insertarBodega(bodega.getNombre(), bodega.getTamanio(), bodega.getCapacidad(), bodega.getIdSucursal().getId()); + return new ResponseEntity<>("Bodega creada exitosamente", HttpStatus.CREATED); + } + catch (Exception e){ + return new ResponseEntity<>("Error al crear la bodega", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @DeleteMapping("/bodegas/{id}/delete") + public ResponseEntity bodegaEliminar(@PathVariable("id") int id) { + + bodegaRepository.eliminarBodega(id); + return new ResponseEntity<>("Bodega eliminada exitosamente", HttpStatus.OK); + } + + @GetMapping("/bodegas/ocupacion") + public Collection> obtenerOcupacionBodegas( + @RequestParam Integer idSucursalU, + @RequestParam Collection listaProductosU) { + Collection resultado = bodegaRepository.obtenerOcupacionBodegas(idSucursalU, listaProductosU); + + // Convertir los resultados en una colección de Map para mayor claridad en el retorno. + Collection> ocupacionBodegas = new ArrayList<>(); + for (Object[] fila : resultado) { + Map bodega = new HashMap<>(); + bodega.put("id", fila[0]); + bodega.put("nombre", fila[1]); + bodega.put("porcentajeOcupacion", fila[2]); + ocupacionBodegas.add(bodega); + } + return ocupacionBodegas; + } + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/controller/CategoriaController.java b/src/main/java/uniandes/edu/co/proyecto/controller/CategoriaController.java new file mode 100644 index 00000000..8064d7a6 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/controller/CategoriaController.java @@ -0,0 +1,62 @@ +package uniandes.edu.co.proyecto.controller; + +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import uniandes.edu.co.proyecto.modelo.Categoria; +import uniandes.edu.co.proyecto.repositorio.CategoriaRepository; + +@RestController +public class CategoriaController { + + @Autowired + private CategoriaRepository categoriaRepository; + + + @GetMapping("/categorias") + public Collection categoria(){ + return categoriaRepository.darCategorias(); + } + + //Este no dicen como hacerlo xd + @GetMapping("/categorias/{codigo}") + public ResponseEntity obtenerCategoria(@PathVariable int codigo){ + Categoria categoria = categoriaRepository.darCategoria(codigo); + + //Devolver si existe :) + if (categoria != null) { + return new ResponseEntity<>(categoria, HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @PostMapping("/categorias/new/save") + public ResponseEntity categoriaGuardar(@RequestBody Categoria categoria){ + + try{ + categoriaRepository.insertarCategoria(categoria.getNombre(), categoria.getDescripcion(), categoria.getCaracteristicasAlmacenamiento()); + return new ResponseEntity<>("Categoria creada exitosamente", HttpStatus.CREATED); + } + catch (Exception e){ + return new ResponseEntity<>("Error al crear la categoria", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @DeleteMapping("/categorias/{codigo}/delete") + public ResponseEntity categoriaEliminar(@PathVariable("codigo") int codigo) { + + categoriaRepository.eliminarCategoria(codigo); + return new ResponseEntity<>("Categoria eliminada exitosamente", HttpStatus.OK); + } + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/controller/CiudadController.java b/src/main/java/uniandes/edu/co/proyecto/controller/CiudadController.java new file mode 100644 index 00000000..5398eb14 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/controller/CiudadController.java @@ -0,0 +1,58 @@ +package uniandes.edu.co.proyecto.controller; + +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import uniandes.edu.co.proyecto.modelo.Ciudad; +import uniandes.edu.co.proyecto.repositorio.CiudadRepository; + + +@RestController +public class CiudadController { + + @Autowired + private CiudadRepository ciudadRepository; + + @GetMapping("/ciudades") + public Collection ciudades(){ + return ciudadRepository.darCiudades(); + } + + //Este no dicen como hacerlo xd + @GetMapping("/ciudades/{codigo}") + public ResponseEntity obtenerCiudad(@PathVariable int codigo){ + + Ciudad ciudad = ciudadRepository.darCiudad(codigo); + + //Devolver si existe :) + if (ciudad != null) { + return new ResponseEntity<>(ciudad, HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @PostMapping("/ciudades/new/save") + public ResponseEntity ciudadGuardar(@RequestBody Ciudad ciudad){ + + try{ + ciudadRepository.insertarCiudad(ciudad.getNombre()); + return new ResponseEntity<>("Ciudad creada exitosamente", HttpStatus.CREATED); + } + catch (Exception e){ + return new ResponseEntity<>("Error al crear la ciudad", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/controller/OrdenDeCompraController.java b/src/main/java/uniandes/edu/co/proyecto/controller/OrdenDeCompraController.java new file mode 100644 index 00000000..f4324cf8 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/controller/OrdenDeCompraController.java @@ -0,0 +1,62 @@ +package uniandes.edu.co.proyecto.controller; +import java.time.LocalDate; +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import uniandes.edu.co.proyecto.modelo.OrdenDeCompra; +import uniandes.edu.co.proyecto.repositorio.OrdenDeCompraRepository; + +@RestController +public class OrdenDeCompraController { + + @Autowired + private OrdenDeCompraRepository ordenDeCompraRepository; + + // REVISAAAAR XD ESTE ES EL RF7 + @PostMapping("/ordenesDeCompra/new/save") + public ResponseEntity ordenDeCompraGuardar(@RequestBody OrdenDeCompra ordenDeCompra) { + try { + ordenDeCompraRepository.insertarOrdenDeCompra( + ordenDeCompra.getFechaEntrega(), + "VIGENTE", + LocalDate.now(), + ordenDeCompra.getIdSucursal().getId(), + ordenDeCompra.getNitProveedor().getNit() + ); + return new ResponseEntity<>("Orden de compra creada exitosamente", HttpStatus.CREATED); + } catch (Exception e) { + return new ResponseEntity<>("Error al crear la orden de compra", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + // REVISAAAAR XD ESTE ES EL RF8 + @PostMapping("/ordenesDeCompra/{numero}/edit/save") + public ResponseEntity ordenDeCompraEditarGuardar(@PathVariable Integer numero) { + OrdenDeCompra orden = ordenDeCompraRepository.darOrdenDeCompra(numero); + if (orden != null && "VIGENTE".equals(orden.getEstado())) { + ordenDeCompraRepository.actualizarEstadoOrdenDeCompra(numero, "ANULADA"); + return new ResponseEntity<>("Orden de compra anulada exitosamente", HttpStatus.OK); + } else if (orden != null && "ENTREGADA".equals(orden.getEstado())) { + return new ResponseEntity<>("No se puede anular una orden de compra entregada", HttpStatus.BAD_REQUEST); + } else if (orden != null && "ANULADA".equals(orden.getEstado())) { + return new ResponseEntity<>("La orden de compra ya se encuentra anulada", HttpStatus.BAD_REQUEST); + } + else { + return new ResponseEntity<>("Orden de compra no encontrada", HttpStatus.NOT_FOUND); + } + } + + // Este si debe estar bien pero no sé, revisen pliss, es el RF9 + @GetMapping("/ordenesDeCompra") + public Collection ordenesDeCompra() { + return ordenDeCompraRepository.darOrdenesDeCompra(); + } +} diff --git a/src/main/java/uniandes/edu/co/proyecto/controller/ProductoController.java b/src/main/java/uniandes/edu/co/proyecto/controller/ProductoController.java new file mode 100644 index 00000000..1c846b49 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/controller/ProductoController.java @@ -0,0 +1,80 @@ +package uniandes.edu.co.proyecto.controller; + +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import uniandes.edu.co.proyecto.modelo.Producto; +import uniandes.edu.co.proyecto.repositorio.ProductoRepository; +import org.springframework.web.bind.annotation.RequestParam; + + +@RestController +public class ProductoController { + + @Autowired + private ProductoRepository productoRepository; + + + @GetMapping("/productos") + public Collection producto(){ + return productoRepository.darProductos(); + } + + //Este no dicen como hacerlo xd + @GetMapping("/productos/{identificador}") + public ResponseEntity obtenerProducto(@PathVariable int identificador){ + Producto producto = productoRepository.darProducto(identificador); + + //Devolver si existe :) + if (producto != null) { + return new ResponseEntity<>(producto, HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @PostMapping("/productos/new/save") + public ResponseEntity productoGuardar(@RequestBody Producto producto){ + + try{ + productoRepository.insertarProducto(producto.getNombre(), producto.getCostoEnBodega(), producto.getPresentacion(), producto.getCantidadPresentacion(), producto.getUnidadMedida(), producto.getVolumenEmpaque(), producto.getPesoEmpaque(), producto.getFechaExpiracion(), producto.getCodigoDeBarras(), producto.getClasificacionCategoria().getCodigo()); + return new ResponseEntity<>("Producto creado exitosamente", HttpStatus.CREATED); + } + catch (Exception e){ + return new ResponseEntity<>("Error al crear el producto", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @PostMapping("/productos/{identificador}/edit/save") + public ResponseEntity productoEditarGuardar(@PathVariable("identificador") Integer identificador, @RequestBody Producto producto){ + try { + productoRepository.actualizarProducto(producto.getIdentificador(), producto.getNombre(), producto.getCostoEnBodega(), producto.getPresentacion(), producto.getCantidadPresentacion(), producto.getUnidadMedida(), producto.getVolumenEmpaque(), producto.getPesoEmpaque(), producto.getFechaExpiracion(), producto.getCodigoDeBarras(), producto.getClasificacionCategoria().getCodigo()); + return new ResponseEntity<>("Producto actualizado exitosamente", HttpStatus.OK); + } + catch (Exception e){ + return new ResponseEntity<>("Error al actualizar el producto", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("productos/filtrados") + public Collection productosfiltrados( + @RequestParam(required = false) Double precioMinU, + @RequestParam(required = false) Double precioMaxU, + @RequestParam(required = false) String fechaSuperiorU, + @RequestParam(required = false) String fechaInferiorU, + @RequestParam(required = false) Integer sucursalIdU, + @RequestParam(required = false) String categoriaNombreU + ){ + return productoRepository.darProductosFiltrados(precioMinU, precioMaxU, fechaSuperiorU, fechaInferiorU, sucursalIdU, categoriaNombreU); + } + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/controller/ProveedorController.java b/src/main/java/uniandes/edu/co/proyecto/controller/ProveedorController.java new file mode 100644 index 00000000..59a119ea --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/controller/ProveedorController.java @@ -0,0 +1,66 @@ +package uniandes.edu.co.proyecto.controller; + +import java.util.Collection; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import uniandes.edu.co.proyecto.modelo.Proveedor; +import uniandes.edu.co.proyecto.repositorio.ProveedorRepository; + +@RestController +public class ProveedorController { + + @Autowired + private ProveedorRepository proveedorRepository; + + @GetMapping("/proveedores") + public Collection proveedores(){ + return proveedorRepository.darProveedores(); + } + + //Este no dicen como hacerlo xd + @GetMapping("/proveedores/{nit}") + public ResponseEntity obtenerProveedor(@PathVariable String nit){ + + Proveedor proveedor = proveedorRepository.darProveedor(nit); + + //Devolver si existe :) + if (proveedor != null) { + return new ResponseEntity<>(proveedor, HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + + @PostMapping("/proveedores/new/save") + public ResponseEntity proveedorGuardar(@RequestBody Proveedor proveedor){ + + try{ + proveedorRepository.insertarProveedor(proveedor.getNit(), proveedor.getNombre(), proveedor.getDireccion(), proveedor.getNombrePersonaContacto(), proveedor.getTelefonoPersonaContacto()); + return new ResponseEntity<>("Proveedor creado exitosamente", HttpStatus.CREATED); + } + catch (Exception e){ + return new ResponseEntity<>("Error al crear el proveedor", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @PostMapping("/proveedores/{nit}/edit/save") + public ResponseEntity proveedorEditarGuardar(@PathVariable("nit") String nit, @RequestBody Proveedor proveedor){ + try { + proveedorRepository.actualizarProveedor(nit, proveedor.getNombre(), proveedor.getDireccion(), proveedor.getNombrePersonaContacto(), proveedor.getTelefonoPersonaContacto()); + return new ResponseEntity<>("Proveedor actualizado exitosamente", HttpStatus.OK); + } + catch (Exception e){ + return new ResponseEntity<>("Error al actualizar el proveedor", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/controller/SucursalController.java b/src/main/java/uniandes/edu/co/proyecto/controller/SucursalController.java new file mode 100644 index 00000000..b63c42f8 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/controller/SucursalController.java @@ -0,0 +1,74 @@ +package uniandes.edu.co.proyecto.controller; + +import java.util.Collection; + +import java.util.Collections; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import uniandes.edu.co.proyecto.modelo.Sucursal; +import uniandes.edu.co.proyecto.repositorio.SucursalRepository; + + +@RestController +public class SucursalController { + + @Autowired + private SucursalRepository sucursalRepository; + + @GetMapping("/sucursales") + public Collection sucursales(){ + return sucursalRepository.darSucursales(); + } + + //Este no dicen como hacerlo xd + @GetMapping("/sucursales/{id}") + public ResponseEntity obtenerSucursal(@PathVariable int id){ + + Sucursal sucursal = sucursalRepository.darSucursal(id); + + //Devolver si existe :) + if (sucursal != null) { + return new ResponseEntity<>(sucursal, HttpStatus.OK); + } else { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + } + + @PostMapping("/sucursales/new/save") + public ResponseEntity sucursalGuardar(@RequestBody Sucursal sucursal){ + + try{ + sucursalRepository.insertarSucursal(sucursal.getNombre(), sucursal.getTamanio(), sucursal.getDireccion(), sucursal.getTelefono(), sucursal.getCodigoCiudad().getCodigo()); + return new ResponseEntity<>("Sucursal creada exitosamente", HttpStatus.CREATED); + } + catch (Exception e){ + return new ResponseEntity<>("Error al crear la sucursal", HttpStatus.INTERNAL_SERVER_ERROR); + } + } + +@GetMapping("/sucursales/productosDisponibles") +public Collection sucursalesConProducto( + @RequestParam(required = false) Integer idProductoU, + @RequestParam(required = false) String nombreProductoU) { + + if (idProductoU != null && nombreProductoU != null) { + return sucursalRepository.darSucursalesConProducto(idProductoU, nombreProductoU); + } else if (idProductoU != null) { + return sucursalRepository.darSucursalesConProductoIdentificador(idProductoU); + } else if (nombreProductoU != null) { + return sucursalRepository.darSucursalesConProductoNombre(nombreProductoU); + } else { + return Collections.emptyList(); + } +} + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/Bodega.java b/src/main/java/uniandes/edu/co/proyecto/modelo/Bodega.java new file mode 100644 index 00000000..6b351791 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/Bodega.java @@ -0,0 +1,79 @@ +package uniandes.edu.co.proyecto.modelo; + + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name="bodega") +public class Bodega { + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + + private Integer id; + private String nombre; + private Double tamanio; + private Integer capacidad; + + @ManyToOne + @JoinColumn(name="id_sucursal", referencedColumnName="id") + private Sucursal idSucursal; + + public Bodega(String nombre, Double tamanio, Integer capacidad, Sucursal idSucursal){ + this.nombre = nombre; + this.tamanio = tamanio; + this.capacidad = capacidad; + this.idSucursal = idSucursal; + } + + public Bodega(){ + ;} + + public Integer getId() { + return id; + } + + public String getNombre() { + return nombre; + } + + public Double getTamanio() { + return tamanio; + } + + public Integer getCapacidad() { + return capacidad; + } + + public Sucursal getIdSucursal() { + return idSucursal; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public void setTamanio(Double tamanio) { + this.tamanio = tamanio; + } + + public void setCapacidad(Integer capacidad) { + this.capacidad = capacidad; + } + + public void setIdSucursal(Sucursal idSucursal) { + this.idSucursal = idSucursal; + } + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/Categoria.java b/src/main/java/uniandes/edu/co/proyecto/modelo/Categoria.java new file mode 100644 index 00000000..ac2fcfeb --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/Categoria.java @@ -0,0 +1,64 @@ +package uniandes.edu.co.proyecto.modelo; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@Entity +@Table(name="categoria") +public class Categoria { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + + private Integer codigo; + private String nombre; + private String descripcion; + private String caracteristicasAlmacenamiento; + + public Categoria(String nombre, String descripcion, String caracteristicasAlmacenamiento){ + this.nombre = nombre; + this.descripcion = descripcion; + this.caracteristicasAlmacenamiento = caracteristicasAlmacenamiento; + } + + public Categoria() + {;} + + public Integer getCodigo() { + return codigo; + } + + public String getNombre() { + return nombre; + } + + public String getDescripcion() { + return descripcion; + } + + public String getCaracteristicasAlmacenamiento() { + return caracteristicasAlmacenamiento; + } + + public void setCodigo(Integer codigo) { + this.codigo = codigo; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public void setDescripcion(String descripcion) { + this.descripcion = descripcion; + } + + public void setCaracteristicasAlmacenamiento(String caracteristicasAlmacenamiento) { + this.caracteristicasAlmacenamiento = caracteristicasAlmacenamiento; + } + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/Ciudad.java b/src/main/java/uniandes/edu/co/proyecto/modelo/Ciudad.java new file mode 100644 index 00000000..c5d658aa --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/Ciudad.java @@ -0,0 +1,47 @@ +package uniandes.edu.co.proyecto.modelo; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@Entity +@Table(name="ciudad") +public class Ciudad { + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private Integer codigo; + + private String nombre; + + + public Ciudad(String nombre) + { + this.nombre = nombre; + } + + public Ciudad() + {;} + + public Integer getCodigo() { + return codigo; + } + + public void setCodigo(Integer codigo) { + this.codigo = codigo; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/OrdenDeCompra.java b/src/main/java/uniandes/edu/co/proyecto/modelo/OrdenDeCompra.java new file mode 100644 index 00000000..69db9282 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/OrdenDeCompra.java @@ -0,0 +1,96 @@ +package uniandes.edu.co.proyecto.modelo; + +import java.time.LocalDate; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name="orden_de_compra") +public class OrdenDeCompra { + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private Integer numero; + + private LocalDate fechaEntrega; + private String estado; + private LocalDate fechaCreacion; + + @ManyToOne + @JoinColumn(name="id_sucursal", referencedColumnName="id") + private Sucursal idSucursal; + + @ManyToOne + @JoinColumn(name="nit_proveedor", referencedColumnName="nit") + private Proveedor nitProveedor; + + public OrdenDeCompra(LocalDate fechaEntrega, String estado, LocalDate fechaCreacion, Sucursal idSucursal, Proveedor nitProveedor){ + this.fechaEntrega = fechaEntrega; + this.estado = estado; + this.fechaCreacion = fechaCreacion; + this.idSucursal = idSucursal; + this.nitProveedor = nitProveedor; + } + + + public OrdenDeCompra(){ + ;} + + public Integer getNumero() { + return numero; + } + + public LocalDate getFechaEntrega() { + return fechaEntrega; + } + + public String getEstado() { + return estado; + } + + public LocalDate getFechaCreacion() { + return fechaCreacion; + } + + public Sucursal getIdSucursal() { + return idSucursal; + } + + public Proveedor getNitProveedor() { + return nitProveedor; + } + + public void setNumero(Integer numero) { + this.numero = numero; + } + + public void setFechaEntrega(LocalDate fechaEntrega) { + this.fechaEntrega = fechaEntrega; + } + + public void setEstado(String estado) { + this.estado = estado; + } + + public void setFechaCreacion(LocalDate fechaCreacion) { + this.fechaCreacion = fechaCreacion; + } + + public void setIdSucursal(Sucursal idSucursal) { + this.idSucursal = idSucursal; + } + + public void setNitProveedor(Proveedor nitProveedor) { + this.nitProveedor = nitProveedor; + } + + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/Producto.java b/src/main/java/uniandes/edu/co/proyecto/modelo/Producto.java new file mode 100644 index 00000000..affb6ca9 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/Producto.java @@ -0,0 +1,143 @@ +package uniandes.edu.co.proyecto.modelo; + +import java.time.LocalDate; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name="producto") +public class Producto { + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private Integer identificador; + + private String nombre; + private Double costoEnBodega; + private String presentacion; + private Double cantidadPresentacion; + private String unidadMedida; + private String volumenEmpaque; + private String pesoEmpaque; + private LocalDate fechaExpiracion; + private String codigoDeBarras; + + @ManyToOne + @JoinColumn(name="clasificacion_categoria", referencedColumnName = "codigo") + private Categoria clasificacionCategoria; + + public Producto(String nombre, Double costoEnBodega, String presentacion, + Double cantidadPresentacion, String unidadMedida, String volumenEmpaque, + String pesoEmpaque, LocalDate fechaExpiracion, String codigoDeBarras, + Categoria clasificacionCategoria + ) { + this.nombre = nombre; + this.costoEnBodega = costoEnBodega; + this.presentacion = presentacion; + this.cantidadPresentacion = cantidadPresentacion; + this.unidadMedida = unidadMedida; + this.volumenEmpaque = volumenEmpaque; + this.pesoEmpaque = pesoEmpaque; + this.fechaExpiracion = fechaExpiracion; + this.codigoDeBarras = codigoDeBarras; + this.clasificacionCategoria = clasificacionCategoria; + } + + public Producto() + {;} + + public Integer getIdentificador() { + return identificador; + } + + public String getNombre() { + return nombre; + } + + public Double getCostoEnBodega() { + return costoEnBodega; + } + + public String getPresentacion() { + return presentacion; + } + + public Double getCantidadPresentacion() { + return cantidadPresentacion; + } + + public String getUnidadMedida() { + return unidadMedida; + } + + public String getVolumenEmpaque() { + return volumenEmpaque; + } + + public String getPesoEmpaque() { + return pesoEmpaque; + } + + public LocalDate getFechaExpiracion() { + return fechaExpiracion; + } + + public String getCodigoDeBarras() { + return codigoDeBarras; + } + + public Categoria getClasificacionCategoria() { + return clasificacionCategoria; + } + + public void setIdentificador(Integer identificador) { + this.identificador = identificador; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public void setCostoEnBodega(Double costoEnBodega) { + this.costoEnBodega = costoEnBodega; + } + + public void setPresentacion(String presentacion) { + this.presentacion = presentacion; + } + + public void setCantidadPresentacion(Double cantidadPresentacion) { + this.cantidadPresentacion = cantidadPresentacion; + } + + public void setUnidadMedida(String unidadMedida) { + this.unidadMedida = unidadMedida; + } + + public void setVolumenEmpaque(String volumenEmpaque) { + this.volumenEmpaque = volumenEmpaque; + } + + public void setPesoEmpaque(String pesoEmpaque) { + this.pesoEmpaque = pesoEmpaque; + } + + public void setFechaExpiracion(LocalDate fechaExpiracion) { + this.fechaExpiracion = fechaExpiracion; + } + + public void setCodigoDeBarras(String codigoDeBarras) { + this.codigoDeBarras = codigoDeBarras; + } + + public void setClasificacionCategoria(Categoria clasificacionCategoria) { + this.clasificacionCategoria = clasificacionCategoria; + } + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoEnBodega.java b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoEnBodega.java new file mode 100644 index 00000000..1b34a976 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoEnBodega.java @@ -0,0 +1,77 @@ +package uniandes.edu.co.proyecto.modelo; + +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name="producto_en_bodega") +public class ProductoEnBodega { + + @EmbeddedId + private ProductoEnBodegaPK pk; + + private Integer nivelMinimoReorden; + private Double costoPromedio; + private Integer capacidadAlmacenarProducto; + private Integer cantidadEnBodega; + + + + public ProductoEnBodega(Producto idProducto, Bodega idBodega,Integer nivelMinimoReorden, Double costoPromedio, + Integer capacidadAlmacenarProducto, Integer cantidadEnBodega) + { + this.pk = new ProductoEnBodegaPK(idProducto, idBodega); + this.nivelMinimoReorden = nivelMinimoReorden; + this.costoPromedio = costoPromedio; + this.capacidadAlmacenarProducto = capacidadAlmacenarProducto; + this.cantidadEnBodega = cantidadEnBodega; + } + + public ProductoEnBodega() + {;} + + public ProductoEnBodegaPK getPk() { + return pk; + } + + public void setPk(ProductoEnBodegaPK pk) { + this.pk = pk; + } + + public Integer getNivelMinimoReorden() { + return nivelMinimoReorden; + } + + public void setNivelMinimoReorden(Integer nivelMinimoReorden) { + this.nivelMinimoReorden = nivelMinimoReorden; + } + + public Double getCostoPromedio() { + return costoPromedio; + } + + public void setCostoPromedio(Double costoPromedio) { + this.costoPromedio = costoPromedio; + } + + public Integer getCapacidadAlmacenarProducto() { + return capacidadAlmacenarProducto; + } + + public void setCapacidadAlmacenarProducto(Integer capacidadAlmacenarProducto) { + this.capacidadAlmacenarProducto = capacidadAlmacenarProducto; + } + + public Integer getCantidadEnBodega() { + return cantidadEnBodega; + } + + public void setCantidadEnBodega(Integer cantidadEnBodega) { + this.cantidadEnBodega = cantidadEnBodega; + } + + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoEnBodegaPK.java b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoEnBodegaPK.java new file mode 100644 index 00000000..3fe6d798 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoEnBodegaPK.java @@ -0,0 +1,46 @@ +package uniandes.edu.co.proyecto.modelo; + +import java.io.Serializable; + +import jakarta.persistence.Embeddable; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; + +@Embeddable +public class ProductoEnBodegaPK implements Serializable{ + + @ManyToOne + @JoinColumn(name="identificador_producto", referencedColumnName="identificador") + private Producto idProducto; + + @ManyToOne + @JoinColumn(name="id_bodega", referencedColumnName="id") + private Bodega idBodega; + + public ProductoEnBodegaPK(Producto idProducto, Bodega idBodega) { + super(); + this.idProducto = idProducto; + this.idBodega = idBodega; + } + + public Producto getIdProducto() { + return idProducto; + } + + public void setIdProducto(Producto idProducto) { + this.idProducto = idProducto; + } + + public Bodega getIdBodega() { + return idBodega; + } + + public void setIdBodega(Bodega idBodega) { + this.idBodega = idBodega; + } + + + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoPedido.java b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoPedido.java new file mode 100644 index 00000000..8e0d787f --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoPedido.java @@ -0,0 +1,43 @@ +package uniandes.edu.co.proyecto.modelo; + + +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name="producto_pedido") +public class ProductoPedido { + + @EmbeddedId + private ProductoPedidoPK pk; + + private Integer cantidadEnOrden; + + public ProductoPedido(Producto identificadorProducto, OrdenDeCompra numeroOrdenDeCompra, Integer cantidadEnOrden){ + this.pk = new ProductoPedidoPK(identificadorProducto, numeroOrdenDeCompra); + this.cantidadEnOrden = cantidadEnOrden; + } + + public ProductoPedido(){ + ;} + + public ProductoPedidoPK getPk() { + return pk; + } + + public Integer getCantidadEnOrden() { + return cantidadEnOrden; + } + + public void setPk(ProductoPedidoPK pk) { + this.pk = pk; + } + + public void setCantidadEnOrden(Integer cantidadEnOrden) { + this.cantidadEnOrden = cantidadEnOrden; + } + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoPedidoPK.java b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoPedidoPK.java new file mode 100644 index 00000000..12b08ff9 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoPedidoPK.java @@ -0,0 +1,44 @@ +package uniandes.edu.co.proyecto.modelo; + +import java.io.Serializable; + +import jakarta.persistence.Embeddable; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; + +@Embeddable +public class ProductoPedidoPK implements Serializable { + @ManyToOne + @JoinColumn(name="identificador_producto", referencedColumnName="identificador") + private Producto identificadorProducto; + + @ManyToOne + @JoinColumn(name="numero_orden_de_compra", referencedColumnName="numero") + private OrdenDeCompra numeroOrdenDeCompra; + + public ProductoPedidoPK(Producto identificadorProducto, OrdenDeCompra numeroOrdenDeCompra){ + super(); + this.identificadorProducto = identificadorProducto; + this.numeroOrdenDeCompra = numeroOrdenDeCompra; + } + + public Producto getIdentificadorProducto() { + return identificadorProducto; + } + + public OrdenDeCompra getNumeroOrdenDeCompra() { + return numeroOrdenDeCompra; + } + + public void setIdentificadorProducto(Producto identificadorProducto) { + this.identificadorProducto = identificadorProducto; + } + + public void setNumeroOrdenDeCompra(OrdenDeCompra numeroOrdenDeCompra) { + this.numeroOrdenDeCompra = numeroOrdenDeCompra; + } + + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoProveedor.java b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoProveedor.java new file mode 100644 index 00000000..14e39cda --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoProveedor.java @@ -0,0 +1,25 @@ +package uniandes.edu.co.proyecto.modelo; + +import jakarta.persistence.EmbeddedId; + +public class ProductoProveedor { + + @EmbeddedId + private ProductoProveedorPK pk; + + public ProductoProveedor(Producto identificadorProducto, Proveedor nitProveedor){ + this.pk = new ProductoProveedorPK(identificadorProducto, nitProveedor); + } + + public ProductoProveedor() + {;} + + public ProductoProveedorPK getPk() { + return pk; + } + + public void setPk(ProductoProveedorPK pk) { + this.pk = pk; + } + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoProveedorPK.java b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoProveedorPK.java new file mode 100644 index 00000000..360bc807 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/ProductoProveedorPK.java @@ -0,0 +1,42 @@ +package uniandes.edu.co.proyecto.modelo; + +import java.io.Serializable; + +import jakarta.persistence.Embeddable; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; + +@Embeddable +public class ProductoProveedorPK implements Serializable{ + @ManyToOne + @JoinColumn(name="identificador_producto", referencedColumnName = "identificador") + private Producto identificadorProducto; + + @ManyToOne + @JoinColumn(name="nit_proveedor", referencedColumnName = "nit") + private Proveedor nitProveedor; + + public ProductoProveedorPK(Producto identificadorProducto, Proveedor nitProveedor){ + super(); + this.identificadorProducto = identificadorProducto; + this.nitProveedor = nitProveedor; + } + + public Producto getIdentificadorProducto() { + return identificadorProducto; + } + + public Proveedor getNitProveedor() { + return nitProveedor; + } + + public void setIdentificadorProducto(Producto identificadorProducto) { + this.identificadorProducto = identificadorProducto; + } + + public void setNitProveedor(Proveedor nitProveedor) { + this.nitProveedor = nitProveedor; + } + + +} \ No newline at end of file diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/Proveedor.java b/src/main/java/uniandes/edu/co/proyecto/modelo/Proveedor.java new file mode 100644 index 00000000..436f0a60 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/Proveedor.java @@ -0,0 +1,75 @@ +package uniandes.edu.co.proyecto.modelo; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@Entity +@Table(name="proveedor") +public class Proveedor { + + @Id + private String nit; + private String nombre; + private String direccion; + private String nombrePersonaContacto; + private String telefonoPersonaContacto; + + public Proveedor(String nit, String nombre, String direccion, + String nombrePersonaContacto, + String telefonoPersonaContacto) + { + this.nit = nit; + this.nombre = nombre; + this.direccion = direccion; + this.nombrePersonaContacto = nombrePersonaContacto; + this.telefonoPersonaContacto = telefonoPersonaContacto; + } + + public Proveedor() + {;} + + public String getNit() { + return nit; + } + + public void setNit(String nit) { + this.nit = nit; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public String getDireccion() { + return direccion; + } + + public void setDireccion(String direccion) { + this.direccion = direccion; + } + + public String getNombrePersonaContacto() { + return nombrePersonaContacto; + } + + public void setNombrePersonaContacto(String nombrePersonaContacto) { + this.nombrePersonaContacto = nombrePersonaContacto; + } + + public String getTelefonoPersonaContacto() { + return telefonoPersonaContacto; + } + + public void setTelefonoPersonaContacto(String telefonoPersonaContacto) { + this.telefonoPersonaContacto = telefonoPersonaContacto; + } + + + +} + diff --git a/src/main/java/uniandes/edu/co/proyecto/modelo/Sucursal.java b/src/main/java/uniandes/edu/co/proyecto/modelo/Sucursal.java new file mode 100644 index 00000000..fdf08a24 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/modelo/Sucursal.java @@ -0,0 +1,94 @@ +package uniandes.edu.co.proyecto.modelo; + +import jakarta.persistence.Table; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; + + + +@Entity +@Table(name="sucursal") +public class Sucursal { + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private Integer id; + + private String nombre; + private Double tamanio; + private String direccion; + private String telefono; + + @ManyToOne + @JoinColumn(name="codigo_ciudad", referencedColumnName="codigo") + private Ciudad codigoCiudad; + + public Sucursal(String nombre, Double tamanio, String direccion, + String telefono, Ciudad codigoCiudad) + { + this.nombre = nombre; + this.tamanio = tamanio; + this.direccion = direccion; + this.telefono = telefono; + this.codigoCiudad = codigoCiudad; + } + + public Sucursal() + {;} + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getNombre() { + return nombre; + } + + public void setNombre(String nombre) { + this.nombre = nombre; + } + + public Double getTamanio() { + return tamanio; + } + + public void setTamanio(Double tamanio) { + this.tamanio = tamanio; + } + + public String getDireccion() { + return direccion; + } + + public void setDireccion(String direccion) { + this.direccion = direccion; + } + + public String getTelefono() { + return telefono; + } + + public void setTelefono(String telefono) { + this.telefono = telefono; + } + + public Ciudad getCodigoCiudad() { + return codigoCiudad; + } + + public void setCodigoCiudad(Ciudad codigoCiudad) { + this.codigoCiudad = codigoCiudad; + } + + + + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/repositorio/BodegaRepository.java b/src/main/java/uniandes/edu/co/proyecto/repositorio/BodegaRepository.java new file mode 100644 index 00000000..ec1b88cb --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/repositorio/BodegaRepository.java @@ -0,0 +1,47 @@ +package uniandes.edu.co.proyecto.repositorio; + +import java.util.Collection; +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import uniandes.edu.co.proyecto.modelo.Bodega; + +public interface BodegaRepository extends JpaRepository{ + + public interface RespuestaPorcentajeOcupacion{ + int getID_BODEGA(); + String getNOMBRE_BODEGA(); + double getPORCENTAJE_OCUPACION(); + } + + @Query(value = "SELECT * FROM bodega", nativeQuery=true) + Collection darBodegas(); + + @Query(value = "SELECT * FROM bodega WHERE id= :id", nativeQuery=true) + Bodega darBodega(@Param("id") int id); + + @Modifying + @Transactional + @Query(value = "INSERT INTO bodega(id, nombre, tamanio, capacidad, id_sucursal) VALUES(secuencia_bodega.nextval, :nombre, :tamanio, :capacidad, :id_sucursal)", nativeQuery = true) + void insertarBodega(@Param("nombre") String nombre, @Param("tamanio") Double tamanio, @Param("capacidad") Integer capacidad, @Param("id_sucursal") Integer idSucursal); + + @Modifying + @Transactional + @Query(value = "DELETE from bodega WHERE id = :id", nativeQuery= true) + void eliminarBodega(@Param("id") int id); + + //Consulta avanzada No. 1 + @Query(value = "SELECT Bodega.id, Bodega.nombre, (SUM(Producto_En_Bodega.cantidad_En_Bodega) / Bodega.capacidad) AS porcentajeOcupacion FROM Bodega\r\n" + + "INNER JOIN Producto_En_Bodega ON Producto_En_Bodega.id_Bodega = Bodega.id\r\n" + + "INNER JOIN Producto ON Producto.identificador = Producto_En_Bodega.identificador_Producto\r\n" + + "WHERE Bodega.id_sucursal = :idSucursalU\r\n" + + "AND Producto.identificador IN :listaProductosU\r\n" + + "GROUP BY Bodega.id, Bodega.nombre, Bodega.capacidad", nativeQuery = true) + Collection obtenerOcupacionBodegas(@Param("idSucursalU") Integer idSucursalU, @Param("listaProductosU") Collection listaProductosU); + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/repositorio/CategoriaRepository.java b/src/main/java/uniandes/edu/co/proyecto/repositorio/CategoriaRepository.java new file mode 100644 index 00000000..a444d7b7 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/repositorio/CategoriaRepository.java @@ -0,0 +1,32 @@ +package uniandes.edu.co.proyecto.repositorio; + + +import java.util.Collection; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import uniandes.edu.co.proyecto.modelo.Categoria; + +public interface CategoriaRepository extends JpaRepository{ + + @Query(value = "SELECT * FROM categoria", nativeQuery=true) + Collection darCategorias(); + + @Query(value = "SELECT * FROM categoria WHERE codigo= :codigo", nativeQuery=true) + Categoria darCategoria(@Param("codigo") int codigo); + + @Modifying + @Transactional + @Query(value = "INSERT INTO categoria(codigo, nombre, descripcion, caracteristicas_almacenamiento) VALUES(secuencia_categoria.nextval, :nombre, :descripcion, :caracteristicas_almacenamiento)", nativeQuery = true) + void insertarCategoria(@Param("nombre") String nombre, @Param("descripcion") String descripcion, @Param("caracteristicas_almacenamiento") String caracteristicasAlmacenamiento); + + + @Modifying + @Transactional + @Query(value = "DELETE from categoria WHERE codigo = :codigo", nativeQuery= true) + void eliminarCategoria(@Param("codigo") int codigo); +} diff --git a/src/main/java/uniandes/edu/co/proyecto/repositorio/CiudadRepository.java b/src/main/java/uniandes/edu/co/proyecto/repositorio/CiudadRepository.java new file mode 100644 index 00000000..8f2ca968 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/repositorio/CiudadRepository.java @@ -0,0 +1,26 @@ +package uniandes.edu.co.proyecto.repositorio; + + +import java.util.Collection; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import uniandes.edu.co.proyecto.modelo.Ciudad; + +public interface CiudadRepository extends JpaRepository{ + + @Query(value = "SELECT * FROM ciudad", nativeQuery=true) + Collection darCiudades(); + + @Query(value = "SELECT * FROM ciudad WHERE codigo= :codigo", nativeQuery=true) + Ciudad darCiudad(@Param("codigo") int id); + + @Modifying + @Transactional + @Query(value = "INSERT INTO ciudad(codigo, nombre) VALUES(secuencia_ciudad.nextval, :nombre)", nativeQuery = true) + void insertarCiudad(@Param("nombre") String nombre); +} diff --git a/src/main/java/uniandes/edu/co/proyecto/repositorio/OrdenDeCompraRepository.java b/src/main/java/uniandes/edu/co/proyecto/repositorio/OrdenDeCompraRepository.java new file mode 100644 index 00000000..328dc523 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/repositorio/OrdenDeCompraRepository.java @@ -0,0 +1,33 @@ +package uniandes.edu.co.proyecto.repositorio; + +import java.time.LocalDate; +import java.util.Collection; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import uniandes.edu.co.proyecto.modelo.OrdenDeCompra; + +public interface OrdenDeCompraRepository extends JpaRepository { + + @Query(value = "SELECT * FROM orden_de_compra", nativeQuery=true) + Collection darOrdenesDeCompra(); + + @Query(value = "SELECT * FROM orden_de_compra WHERE numero= :numero", nativeQuery=true) + OrdenDeCompra darOrdenDeCompra(@Param("numero") Integer numero); + + + @Modifying + @Transactional + @Query(value = "INSERT INTO orden_de_compra(numero, fecha_entrega, estado, fecha_creacion, id_sucursal, nit_proveedor) VALUES(secuencia_orden_de_compra.nextval, :fecha_entrega, :estado, :fecha_creacion, :id_sucursal, :nit_proveedor)", nativeQuery = true) + void insertarOrdenDeCompra(@Param("fecha_entrega") LocalDate fechaEntrega, @Param("estado") String estado, @Param("fecha_creacion") LocalDate fechaCreacion, @Param("id_sucursal") Integer idSucursal, @Param("nit_proveedor") String nitProveedor); + + @Modifying + @Transactional + @Query(value = "UPDATE orden_de_compra SET estado = :estado WHERE numero = :numero", nativeQuery = true) + void actualizarEstadoOrdenDeCompra(@Param("numero") Integer numero, @Param("estado") String estado); + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/repositorio/ProductoRepository.java b/src/main/java/uniandes/edu/co/proyecto/repositorio/ProductoRepository.java new file mode 100644 index 00000000..a684e7a6 --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/repositorio/ProductoRepository.java @@ -0,0 +1,54 @@ +package uniandes.edu.co.proyecto.repositorio; + + +import java.time.LocalDate; +import java.util.Collection; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import uniandes.edu.co.proyecto.modelo.Producto; + +public interface ProductoRepository extends JpaRepository{ + + @Query(value = "SELECT * FROM producto", nativeQuery=true) + Collection darProductos(); + + @Query(value = "SELECT * FROM producto WHERE identificador= :identificador", nativeQuery=true) + Producto darProducto(@Param("identificador") int identificador); + + @Modifying + @Transactional + @Query(value = "INSERT INTO producto( identificador, nombre, costo_en_bodega, presentacion, cantidad_presentacion, unidad_medida, volumen_empaque, peso_empaque, fecha_expiracion, codigo_de_barras, clasificacion_categoria) VALUES(secuencia_producto.nextval, :nombre, :costo_en_bodega, :presentacion, :cantidad_presentacion, :unidad_medida, :volumen_empaque, :peso_empaque, :fecha_expiracion, :codigo_de_barras, :clasificacion_categoria)", nativeQuery = true) + void insertarProducto(@Param("nombre") String nombre, @Param("costo_en_bodega") Double costoEnBodega, @Param("presentacion") String presentacion, @Param("cantidad_presentacion") Double cantidadPresentacion, @Param("unidad_medida") String unidadMedida, + @Param("volumen_empaque") String volumenEmpaque, @Param("peso_empaque") String pesoEmpaque, @Param("fecha_expiracion")LocalDate fechaExpiracion, @Param("codigo_de_barras") String codigoDeBarras, @Param("clasificacion_categoria") Integer clasificacionCategoria); + + @Modifying + @Transactional + @Query(value = "UPDATE producto SET nombre = :nombre, costo_en_bodega = :costo_en_bodega, presentacion = :presentacion,cantidad_presentacion = :cantidad_presentacion,unidad_medida = :unidad_medida,volumen_empaque = :volumen_empaque, peso_empaque = :peso_empaque, fecha_expiracion = :fecha_expiracion, codigo_de_barras = :codigo_de_barras, clasificacion_categoria = :clasificacion_categoria WHERE identificador = :identificador", nativeQuery = true) + void actualizarProducto(@Param("identificador")Integer identificador, @Param("nombre") String nombre, @Param("costo_en_bodega") Double costoEnBodega, @Param("presentacion") String presentacion, @Param("cantidad_presentacion") Double cantidadPresentacion, + @Param("unidad_medida") String unidadMedida, @Param("volumen_empaque") String volumenEmpaque, @Param("peso_empaque") String pesoEmpaque, @Param("fecha_expiracion")LocalDate fechaExpiracion, @Param("codigo_de_barras") String codigoDeBarras, @Param("clasificacion_categoria") Integer clasificacionCategoria); + @Modifying + @Transactional + @Query(value = "DELETE from producto WHERE identificador = :identificador", nativeQuery= true) + void eliminarProducto(@Param("identificador") int identificador); + + //Consulta Avanzada No. 2 + + @Query(value = "SELECT DISTINCT Producto.* FROM Producto\r\n " + + "INNER JOIN Producto_En_Bodega ON Producto_En_Bodega.identificador_Producto = Producto.identificador\r\n " + + "INNER JOIN Bodega ON Bodega.id = Producto_En_Bodega.id_Bodega\r\n " + + "INNER JOIN Sucursal ON Sucursal.id = Bodega.id_sucursal\r\n " + + "INNER JOIN Categoria ON Categoria.codigo = Producto.clasificacion_categoria\r\n " + + "WHERE (:precioMinU IS NULL OR Producto.costo_en_bodega >= :precioMinU)\r\n " + + "AND (:precioMaxU IS NULL OR Producto.costo_en_bodega <= :precioMaxU)\r\n " + + "AND (:fechaSuperiorU IS NULL OR Producto.fecha_expiracion < TO_DATE(:fechaSuperiorU, 'YYYY-MM-DD'))\r\n " + + "AND (:fechaInferiorU IS NULL OR Producto.fecha_expiracion > TO_DATE(:fechaInferiorU, 'YYYY-MM-DD'))\r\n " + + "AND (:sucursalIdU IS NULL OR Bodega.id_sucursal = :sucursalIdU)\r\n " + + "AND (:categoriaNombreU IS NULL OR Categoria.nombre = :categoriaNombreU)", + nativeQuery = true) + Collection darProductosFiltrados(@Param("precioMinU") Double precioMinU, @Param("precioMaxU") Double precioMaxU, @Param("fechaSuperiorU") String fechaSuperiorU, @Param("fechaInferiorU") String fechaInferiorU, @Param("sucursalIdU") Integer sucursalIdU, @Param("categoriaNombreU") String categoriaNombreU); +} diff --git a/src/main/java/uniandes/edu/co/proyecto/repositorio/ProveedorRepository.java b/src/main/java/uniandes/edu/co/proyecto/repositorio/ProveedorRepository.java new file mode 100644 index 00000000..d71c92ad --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/repositorio/ProveedorRepository.java @@ -0,0 +1,31 @@ +package uniandes.edu.co.proyecto.repositorio; + +import java.util.Collection; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import uniandes.edu.co.proyecto.modelo.Proveedor; + +public interface ProveedorRepository extends JpaRepository{ + +@Query(value = "SELECT * FROM proveedor", nativeQuery=true) +Collection darProveedores(); + +@Query(value = "SELECT * FROM proveedor WHERE nit= :nit", nativeQuery=true) + Proveedor darProveedor(@Param("nit") String nit); + +@Modifying +@Transactional +@Query(value = "INSERT INTO proveedor(nit, nombre, direccion, nombre_persona_contacto, telefono_persona_contacto) VALUES(:nit, :nombre, :direccion, :nombre_persona_contacto, :telefono_persona_contacto)", nativeQuery = true) +void insertarProveedor(@Param("nit") String nit, @Param("nombre") String nombre, @Param("direccion") String direccion, @Param("nombre_persona_contacto") String nombrePersonaContacto, @Param("telefono_persona_contacto") String telefonoPersonaContacto); + +@Modifying +@Transactional +@Query(value = "UPDATE proveedor SET nombre=:nombre, direccion=:direccion, nombre_persona_contacto=:nombre_persona_contacto, telefono_persona_contacto=:telefono_persona_contacto WHERE nit=:nit", nativeQuery= true) +void actualizarProveedor(@Param("nit") String nit, @Param("nombre") String nombre, @Param("direccion") String direccion, @Param("nombre_persona_contacto") String nombrePersonaContacto, @Param("telefono_persona_contacto") String telefonoPersonaContacto); + +} diff --git a/src/main/java/uniandes/edu/co/proyecto/repositorio/SucursalRepository.java b/src/main/java/uniandes/edu/co/proyecto/repositorio/SucursalRepository.java new file mode 100644 index 00000000..ad98123d --- /dev/null +++ b/src/main/java/uniandes/edu/co/proyecto/repositorio/SucursalRepository.java @@ -0,0 +1,54 @@ +package uniandes.edu.co.proyecto.repositorio; + +import java.util.Collection; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; + +import uniandes.edu.co.proyecto.modelo.Sucursal; + +public interface SucursalRepository extends JpaRepository{ + +@Query(value = "SELECT * FROM sucursal", nativeQuery=true) + Collection darSucursales(); + +@Query(value = "SELECT * FROM sucursal WHERE id= :id", nativeQuery=true) + Sucursal darSucursal(@Param("id") int id); + +@Modifying +@Transactional +@Query(value = "INSERT INTO sucursal(id, nombre, tamanio, direccion, telefono, codigo_ciudad) VALUES(secuencia_sucursal.nextval, :nombre, :tamanio, :direccion, :telefono, :codigo_ciudad)", nativeQuery = true) +void insertarSucursal(@Param("nombre") String nombre, @Param("tamanio") Double tamanio, @Param("direccion") String direccion, @Param("telefono") String telefono, @Param("codigo_ciudad") Integer codigoCiudad); + + +//Consulta Avanzada No. 4 + +@Query(value = "SELECT DISTINCT Sucursal.*\r\n" + + "FROM Sucursal INNER JOIN Bodega ON Sucursal.id = Bodega.id_sucursal\r\n" + + "INNER JOIN Producto_En_Bodega ON Bodega.id = Producto_En_Bodega.id_bodega\r\n" + + "INNER JOIN Producto ON Producto_En_Bodega.identificador_producto = Producto.identificador\r\n" + + "WHERE (Producto.identificador = :idProductoU OR Producto.nombre = :nombreProductoU)\r\n" + + "AND Producto_En_Bodega.cantidad_En_Bodega > 0", nativeQuery=true) +Collection darSucursalesConProducto(@Param("idProductoU") int idProductoU, @Param("nombreProductoU") String nombreProductoU); + +@Query(value = "SELECT DISTINCT Sucursal.*\r\n" + + "FROM Sucursal INNER JOIN Bodega ON Sucursal.id = Bodega.id_sucursal\r\n" + + "INNER JOIN Producto_En_Bodega ON Bodega.id = Producto_En_Bodega.id_bodega\r\n" + + "INNER JOIN Producto ON Producto_En_Bodega.identificador_producto = Producto.identificador\r\n" + + "WHERE Producto.identificador = :idProductoU\r\n" + + "AND Producto_En_Bodega.cantidad_En_Bodega > 0", nativeQuery=true) +Collection darSucursalesConProductoIdentificador(@Param("idProductoU") int idProductoU); + +@Query(value = "SELECT DISTINCT Sucursal.*\r\n" + + "FROM Sucursal INNER JOIN Bodega ON Sucursal.id = Bodega.id_sucursal\r\n" + + "INNER JOIN Producto_En_Bodega ON Bodega.id = Producto_En_Bodega.id_bodega\r\n" + + "INNER JOIN Producto ON Producto_En_Bodega.identificador_producto = Producto.identificador\r\n" + + "WHERE Producto.nombre = :nombreProductoU\r\n" + + "AND Producto_En_Bodega.cantidad_En_Bodega > 0", nativeQuery=true) +Collection darSucursalesConProductoNombre(@Param("nombreProductoU") String nombreProductoU); + + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 046a7b0b..c192e8d2 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,9 +1,9 @@ spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.hql.bulk_id_strategy.global_temporary.create_tables=false spring.datasource.url=jdbc:oracle:thin:@fn4.oracle.virtual.uniandes.edu.co:1521/PROD -spring.datasource.username=usuario -spring.datasource.password=contraseña +spring.datasource.username=ISIS2304F12202420 +spring.datasource.password=jBsyYZAMnW spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect spring.datasource.driver-class-name=oracle.jdbc.OracleDriver -spring.jpa.show-sql=true +spring.jpa.show-sql=true \ No newline at end of file