Skip to content

Commit

Permalink
jejejejej
Browse files Browse the repository at this point in the history
  • Loading branch information
MonDragoNJU committed Nov 3, 2024
1 parent f2dfb10 commit 49d5de1
Show file tree
Hide file tree
Showing 4 changed files with 218 additions and 63 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,13 @@ public ResponseEntity<?> obtenerCategoriaNombre(@PathVariable String nombre){
}

//Metodo que se encarga de crear una categoria
@PostMapping("/categorias/new/save") //Indica que el metodo se activa cuando se hace una peticion POST a la URL /categorias/new/save
public ResponseEntity<String> categoriaGuardar(@RequestBody Categoria categoria){

try{
//Insertar la categoria en la base de datos
@PostMapping("/categorias/new/save")
public ResponseEntity<String> 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);
return new ResponseEntity<>("Categoría creada exitosamente", HttpStatus.CREATED);
} catch (Exception e) {
return new ResponseEntity<>("Error al crear la categoría", HttpStatus.INTERNAL_SERVER_ERROR);
}
}

Expand Down
216 changes: 178 additions & 38 deletions src/main/resources/templates/crearOrdenDeCompra.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
<title>Crear Orden de Compra - SuperAndes</title>
<style>
/* Paleta de colores en tonos verdes pastel */
:root {
--verde-pastel: #b3e5b3;
--verde-pastel-oscuro: #8ac48a;
Expand All @@ -31,7 +30,7 @@

.container {
margin-top: 30px;
max-width: 600px;
max-width: 700px;
}

.card {
Expand Down Expand Up @@ -81,84 +80,225 @@
</style>
</head>
<body>
<!-- Barra de navegación -->
<nav class="navbar navbar-expand-lg">
<div class="container">
<a class="navbar-brand" href="/">SuperAndes</a>
</div>
</nav>

<div class="container">
<!-- Encabezado del formulario -->
<header class="text-center my-4">
<h1 class="display-6 text-primary">Crear Nueva Orden de Compra</h1>
</header>

<!-- Tarjeta del formulario de creación de orden de compra -->
<div class="card">
<div class="card-header">
Formulario para Crear una Nueva Orden de Compra
Encabezado de la Orden de Compra
</div>
<div class="card-body">
<form id="crearOrdenForm">
<!-- Fecha de Creación (automática) -->
<div class="mb-3">
<label for="fechaCreacion" class="form-label">Fecha de Creación</label>
<input type="date" class="form-control" id="fechaCreacion" value="" readonly>
</div>

<!-- Fecha de Entrega -->
<div class="mb-3">
<label for="fechaEntrega" class="form-label">Fecha de Entrega</label>
<input type="date" class="form-control" id="fechaEntrega" required>
</div>

<!-- Sucursal -->
<div class="mb-3">
<label for="idSucursal" class="form-label">ID de la Sucursal</label>
<input type="number" class="form-control" id="idSucursal" required>
<label for="idSucursal" class="form-label">Sucursal</label>
<select class="form-select" id="idSucursal" required>
<option value="">Seleccione una sucursal</option>
</select>
</div>

<!-- Proveedor -->
<div class="mb-3">
<label for="nitProveedor" class="form-label">NIT del Proveedor</label>
<input type="text" class="form-control" id="nitProveedor" required>
<label for="nitProveedor" class="form-label">Proveedor</label>
<select class="form-select" id="nitProveedor" required>
<option value="">Seleccione un proveedor</option>
</select>
</div>

<div class="card-header mt-4">
Detalle de Productos
</div>

<div id="detalleProductos">
<!-- Plantilla de producto -->
<div class="producto">
<div class="mb-3">
<label for="producto" class="form-label">Producto</label>
<select class="form-select producto-nombre" required>
<option value="">Seleccione un producto</option>
</select>
</div>
<div class="mb-3">
<label for="cantidad" class="form-label">Cantidad</label>
<input type="number" class="form-control producto-cantidad" required>
</div>
<div class="mb-3">
<label for="precio" class="form-label">Precio</label>
<input type="number" class="form-control producto-precio" required>
</div>
</div>
</div>

<button type="button" class="btn btn-secondary my-3" id="agregarProducto">Agregar otro producto</button>

<button type="submit" class="btn btn-success">Crear Orden de Compra</button>
</form>
<div id="responseMessage" class="mt-3 text-center"></div>
</div>
</div>

<!-- Botón para regresar al menú de órdenes de compra -->
<div class="text-center my-4">
<a href="/MenuOrdenesDeCompra" class="btn btn-secondary">Volver al Menú de Órdenes de Compra</a>
</div>
</div>

<!-- Pie de página -->
<footer>
<div class="container">
<p>&copy; 2024 SuperAndes. Hecho por el increíble Grupo 1.</p>
</div>
</footer>

<script>
document.getElementById('crearOrdenForm').addEventListener('submit', function(event) {
event.preventDefault();

const ordenDeCompra = {
fechaEntrega: document.getElementById('fechaEntrega').value,
idSucursal: { id: parseInt(document.getElementById('idSucursal').value) },
nitProveedor: { nit: document.getElementById('nitProveedor').value }
};

fetch('/ordenesDeCompra/new/save', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(ordenDeCompra)
})
.then(response => {
if (response.ok) {
document.getElementById('responseMessage').innerHTML = "<p class='text-success'>Orden de compra creada exitosamente.</p>";
document.getElementById('crearOrdenForm').reset();
} else {
document.getElementById('responseMessage').innerHTML = "<p class='text-danger'>Error al crear la orden de compra.</p>";
}
})
.catch(() => {
document.getElementById('responseMessage').innerHTML = "<p class='text-danger'>Error de conexión.</p>";
document.addEventListener("DOMContentLoaded", () => {
document.getElementById('fechaCreacion').value = new Date().toISOString().split('T')[0];

// Cargar sucursales
fetch('/sucursales2')
.then(response => response.json())
.then(sucursales => {
const sucursalSelect = document.getElementById('idSucursal');
sucursales.forEach(sucursal => {
const option = document.createElement('option');
option.value = JSON.stringify(sucursal); // Store full object as string
option.textContent = sucursal.nombre;
sucursalSelect.appendChild(option);
});
});

// Cargar proveedores
fetch('/proveedores')
.then(response => response.json())
.then(proveedores => {
const proveedorSelect = document.getElementById('nitProveedor');
proveedores.forEach(proveedor => {
const option = document.createElement('option');
option.value = JSON.stringify(proveedor); // Store full object as string
option.textContent = proveedor.nombre;
proveedorSelect.appendChild(option);
});
});

// Cargar productos
fetch('/productos')
.then(response => response.json())
.then(productos => {
const productoSelect = document.querySelector('.producto-nombre');
productos.forEach(producto => {
const option = document.createElement('option');
option.value = producto.id;
option.textContent = producto.nombre;
productoSelect.appendChild(option);
});
});

// Agregar otro producto en el detalle
document.getElementById('agregarProducto').addEventListener('click', () => {
const detalleContainer = document.getElementById('detalleProductos');
const productoHTML = `
<div class="producto">
<div class="mb-3">
<label for="producto" class="form-label">Producto</label>
<select class="form-select producto-nombre" required>
<option value="">Seleccione un producto</option>
</select>
</div>
<div class="mb-3">
<label for="cantidad" class="form-label">Cantidad</label>
<input type="number" class="form-control producto-cantidad" required>
</div>
<div class="mb-3">
<label for="precio" class="form-label">Precio</label>
<input type="number" class="form-control producto-precio" required>
</div>
</div>`;
detalleContainer.insertAdjacentHTML('beforeend', productoHTML);

// Rellenar el select del nuevo producto
fetch('/productos')
.then(response => response.json())
.then(productos => {
const nuevoSelect = detalleContainer.lastElementChild.querySelector('.producto-nombre');
productos.forEach(producto => {
const option = document.createElement('option');
option.value = producto.id;
option.textContent = producto.nombre;
nuevoSelect.appendChild(option);
});
});
});

// Enviar la orden de compra al backend
document.getElementById('crearOrdenForm').addEventListener('submit', function(event) {
event.preventDefault();

// Recopilar datos del encabezado
const fechaCreacion = document.getElementById('fechaCreacion').value;
const fechaEntrega = document.getElementById('fechaEntrega').value;
const sucursal = JSON.parse(document.getElementById('idSucursal').value);
const proveedor = JSON.parse(document.getElementById('nitProveedor').value);

// Recopilar datos del detalle de productos
const productos = [];
document.querySelectorAll('.producto').forEach((producto) => {
const productoId = producto.querySelector('.producto-nombre').value;
const cantidad = parseInt(producto.querySelector('.producto-cantidad').value);
const precio = parseFloat(producto.querySelector('.producto-precio').value);

productos.push({
id: productoId,
cantidad: cantidad,
precio: precio
});
});

// Crear el objeto de orden de compra con objetos completos de sucursal y proveedor
const ordenDeCompra = {
fechaCreacion: fechaCreacion,
fechaEntrega: fechaEntrega,
idSucursal: sucursal,
proveedor: proveedor,
estado: "vigente"
};

// Enviar la orden de compra al backend
fetch('/ordenesDeCompra/new/save', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(ordenDeCompra)
})
.then(response => {
if (response.ok) {
document.getElementById('responseMessage').innerHTML = "<p class='text-success'>Orden de compra guardada exitosamente.</p>";
document.getElementById('crearOrdenForm').reset();
} else {
document.getElementById('responseMessage').innerHTML = "<p class='text-danger'>Error al guardar la orden de compra.</p>";
}
})
.catch(() => {
document.getElementById('responseMessage').innerHTML = "<p class='text-danger'>Error de conexión.</p>";
});
});
});
</script>
Expand Down
39 changes: 31 additions & 8 deletions src/main/resources/templates/editarProveedor.html
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ <h1 class="display-6 text-primary">Editar Datos de un Proveedor</h1>
</form>

<!-- Formulario para editar datos del proveedor (se oculta inicialmente) -->
<form id="editarProveedorForm" action="/proveedores/{nit}/edit/save" method="post" style="display: none;">
<form id="editarProveedorForm" action="#" method="post" style="display: none;">
<div class="mb-3">
<label for="nombre" class="form-label">Nombre:</label>
<input type="text" class="form-control" id="nombre" name="nombre" required>
Expand All @@ -123,7 +123,7 @@ <h1 class="display-6 text-primary">Editar Datos de un Proveedor</h1>
<label for="telefonoPersonaContacto" class="form-label">Teléfono de Persona de Contacto:</label>
<input type="text" class="form-control" id="telefonoPersonaContacto" name="telefonoPersonaContacto" required>
</div>
<button type="submit" class="btn btn-success">Guardar Cambios</button>
<button type="button" id="guardarCambios" class="btn btn-success">Guardar Cambios</button>
</form>

<!-- Mensaje de error si el proveedor no se encuentra -->
Expand All @@ -145,12 +145,10 @@ <h1 class="display-6 text-primary">Editar Datos de un Proveedor</h1>
</footer>

<script>
// JavaScript para mostrar u ocultar formularios según el resultado de la búsqueda
document.getElementById('buscarProveedorForm').onsubmit = function (event) {
document.getElementById('buscarProveedorForm').onsubmit = function(event) {
event.preventDefault();
const nit = document.getElementById('nit').value;

// Realizar solicitud AJAX para obtener el proveedor por NIT
fetch(`/proveedores/${nit}`)
.then(response => {
if (response.ok) {
Expand All @@ -160,22 +158,47 @@ <h1 class="display-6 text-primary">Editar Datos de un Proveedor</h1>
}
})
.then(proveedor => {
// Rellenar el formulario con los datos del proveedor
document.getElementById('nombre').value = proveedor.nombre;
document.getElementById('direccion').value = proveedor.direccion;
document.getElementById('nombrePersonaContacto').value = proveedor.nombrePersonaContacto;
document.getElementById('telefonoPersonaContacto').value = proveedor.telefonoPersonaContacto;

// Mostrar el formulario de edición y ocultar el mensaje de error
document.getElementById('editarProveedorForm').style.display = 'block';
document.getElementById('mensajeError').style.display = 'none';
})
.catch(error => {
// Mostrar el mensaje de error si el proveedor no se encuentra
document.getElementById('editarProveedorForm').style.display = 'none';
document.getElementById('mensajeError').style.display = 'block';
});
};

document.getElementById('guardarCambios').onclick = function() {
const nit = document.getElementById('nit').value;
const proveedorData = {
nombre: document.getElementById('nombre').value,
direccion: document.getElementById('direccion').value,
nombrePersonaContacto: document.getElementById('nombrePersonaContacto').value,
telefonoPersonaContacto: document.getElementById('telefonoPersonaContacto').value
};

fetch(`/proveedores/${nit}/edit/save`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(proveedorData)
})
.then(response => {
if (response.ok) {
alert('Proveedor actualizado con éxito');
} else {
throw new Error('Error al actualizar el proveedor');
}
})
.catch(error => {
alert(error.message);
});
};
</script>
</body>

Expand Down
Loading

0 comments on commit 49d5de1

Please sign in to comment.