-
Notifications
You must be signed in to change notification settings - Fork 59
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
f2dfb10
commit 49d5de1
Showing
4 changed files
with
218 additions
and
63 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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; | ||
|
@@ -31,7 +30,7 @@ | |
|
||
.container { | ||
margin-top: 30px; | ||
max-width: 600px; | ||
max-width: 700px; | ||
} | ||
|
||
.card { | ||
|
@@ -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>© 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> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.