public async Task <IActionResult> PostSalidaInsumo([FromBody] SalidaInsumo salidaInsumo) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } using (var sn = factory.OpenSession()) { using (var tx = sn.BeginTransaction()) { try { salidaInsumo.FechaCreacion = DateTime.Now; sn.Save(salidaInsumo); foreach (var item in salidaInsumo.Items) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == salidaInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Insumo.IdProducto) .FirstOrDefaultAsync(); if (inventario != null && inventario.Stock >= (item.Cantidad * item.Factor)) { inventario.Stock = inventario.Stock - (item.Cantidad * item.Factor); } else { throw new Exception("Sin stock para el insumo: " + item.Insumo.Nombre); } item.IdSalidaInsumo = salidaInsumo.IdSalidaInsumo; sn.Save(item); } await tx.CommitAsync(); } catch (Exception ex) { await tx.RollbackAsync(); return(StatusCode(500, ex.Message)); } } } return(Ok(true)); }
public async Task <IActionResult> DeleteSalidaInsumo([FromRoute] int id) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } using (var sn = factory.OpenSession()) { using (var tx = sn.BeginTransaction()) { try { SalidaInsumo salidaInsumo = sn.Get <SalidaInsumo>(id); List <ItemSalidaInsumo> items = await sn.Query <ItemSalidaInsumo>() .Where(x => x.IdSalidaInsumo == id) .ToListAsync(); foreach (var item in items) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == salidaInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Insumo.IdProducto) .FirstOrDefaultAsync(); inventario.Stock = inventario.Stock + (item.Cantidad * item.Factor); } sn.Delete(string.Format("FROM ItemSalidaInsumo WHERE IdSalidaInsumo = {0}", id)); sn.Delete(salidaInsumo); await tx.CommitAsync(); } catch (Exception ex) { await tx.RollbackAsync(); return(StatusCode(500, ex.Message)); } } } return(Ok(true)); }
public async Task <IActionResult> PutSalidaInsumo([FromRoute] int id, [FromBody] SalidaInsumo salidaInsumo) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != salidaInsumo.IdSalidaInsumo) { return(BadRequest()); } using (var sn = factory.OpenSession()) { using (var tx = sn.BeginTransaction()) { try { List <ItemSalidaInsumo> items = await sn.Query <ItemSalidaInsumo>() .Where(x => x.IdSalidaInsumo == id) .ToListAsync(); foreach (var item in items) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == salidaInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Insumo.IdProducto) .FirstOrDefaultAsync(); inventario.Stock = inventario.Stock + (item.Cantidad * item.Factor); } sn.Delete(string.Format("FROM ItemSalidaInsumo WHERE IdSalidaInsumo = {0}", id)); foreach (var item in salidaInsumo.Items) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == salidaInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Insumo.IdProducto) .FirstOrDefaultAsync(); if (inventario != null && inventario.Stock >= (item.Cantidad * item.Factor)) { inventario.Stock = inventario.Stock - (item.Cantidad * item.Factor); } else { throw new Exception("Sin stock para el insumo: " + item.Insumo.Nombre); } item.IdSalidaInsumo = id; sn.Save(item); } SalidaInsumo salidaInsumoBD = sn.Get <SalidaInsumo>(id); salidaInsumoBD.IdLote = salidaInsumo.IdLote; salidaInsumoBD.Comentario = salidaInsumo.Comentario; await tx.CommitAsync(); } catch (Exception ex) { await tx.RollbackAsync(); return(StatusCode(500, ex.Message)); } } } return(Ok(true)); }
public async Task <IActionResult> PutIngresoInsumo([FromRoute] int id, [FromBody] IngresoInsumo ingresoInsumo) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != ingresoInsumo.IdIngresoInsumo) { return(BadRequest()); } using (var sn = factory.OpenSession()) { using (var tx = sn.BeginTransaction()) { try { decimal costo = ingresoInsumo.Items.Sum(x => x.Costo); var ingresoInsumoBD = sn.Get <IngresoInsumo>(id); var caja = await sn.GetAsync <Caja>(ingresoInsumo.Caja.IdCaja); if ((ingresoInsumoBD.Costo + caja.Saldo) >= costo) { caja.Saldo += ingresoInsumoBD.Costo; caja.Saldo -= costo; } else { throw new Exception("La caja no tiene saldo suficiente."); } var items = sn.Query <ItemIngresoInsumo>() .Where(x => x.IdIngresoInsumo == id) .ToList(); foreach (var item in items) { if (item.Producto.EsInsumo) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == ingresoInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Producto.IdProducto) .FirstOrDefaultAsync(); if (inventario != null && inventario.Stock >= (item.Cantidad * item.Factor)) { inventario.Stock = inventario.Stock - (item.Cantidad * item.Factor); } else { return(StatusCode(500, "Sin stock para el insumo: " + item.Producto.Nombre)); } } } sn.Delete(string.Format("FROM ItemIngresoInsumo WHERE IdIngresoInsumo = {0}", id)); foreach (var item in ingresoInsumo.Items) { if (item.Producto.EsInsumo) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == ingresoInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Producto.IdProducto) .FirstOrDefaultAsync(); if (inventario == null) { sn.Save(new InventarioInsumo { IdAlmacen = ingresoInsumo.Almacen.IdAlmacen, IdInsumo = item.Producto.IdProducto, Stock = (item.Cantidad * item.Factor) }); } else { inventario.Stock = inventario.Stock + (item.Cantidad * item.Factor); } } item.IdIngresoInsumo = id; sn.Save(item); } MovimientoCaja movimiento = sn.Query <MovimientoCaja>() .Where(x => x.IdIngresoInsumo == id).FirstOrDefault(); movimiento.Importe = costo * -1; ingresoInsumoBD.Comentario = ingresoInsumo.Comentario; ingresoInsumoBD.Costo = costo; await tx.CommitAsync(); } catch (Exception ex) { await tx.RollbackAsync(); return(StatusCode(500, ex.Message)); } } } return(Ok(true)); }
public async Task <IActionResult> DeleteIngresoInsumo([FromRoute] int id) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } using (var sn = factory.OpenSession()) { using (var tx = sn.BeginTransaction()) { try { IngresoInsumo ingresoInsumo = sn.Get <IngresoInsumo>(id); List <ItemIngresoInsumo> items = await sn.Query <ItemIngresoInsumo>() .Where(x => x.IdIngresoInsumo == id) .ToListAsync(); foreach (var item in items) { if (item.Producto.EsInsumo) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == ingresoInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Producto.IdProducto) .FirstOrDefaultAsync(); if (inventario != null && inventario.Stock >= (item.Cantidad * item.Factor)) { inventario.Stock = inventario.Stock - (item.Cantidad * item.Factor); } else { throw new Exception("Sin stock para el insumo: " + item.Producto.Nombre); } } } var caja = await sn.GetAsync <Caja>(ingresoInsumo.Caja.IdCaja); caja.Saldo += ingresoInsumo.Costo; sn.Delete(string.Format("FROM MovimientoCaja WHERE IdIngresoInsumo = {0}", id)); sn.Delete(string.Format("FROM ItemIngresoInsumo WHERE IdIngresoInsumo = {0}", id)); sn.Delete(ingresoInsumo); await tx.CommitAsync(); } catch (Exception ex) { await tx.RollbackAsync(); return(StatusCode(500, ex.Message)); } } } return(Ok(true)); }
public async Task <IActionResult> PostIngresoInsumo([FromBody] IngresoInsumo ingresoInsumo) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } using (var sn = factory.OpenSession()) { using (var tx = sn.BeginTransaction()) { try { decimal costo = ingresoInsumo.Items.Sum(x => x.Costo); var caja = await sn.GetAsync <Caja>(ingresoInsumo.Caja.IdCaja); if (caja.Saldo >= costo) { caja.Saldo -= costo; } else { throw new Exception("La caja no tiene saldo suficiente."); } ingresoInsumo.FechaCreacion = DateTime.Now; ingresoInsumo.Costo = costo; sn.Save(ingresoInsumo); foreach (var item in ingresoInsumo.Items) { if (item.Producto.EsInsumo) { InventarioInsumo inventario = await sn.Query <InventarioInsumo>() .Where(x => x.IdAlmacen == ingresoInsumo.Almacen.IdAlmacen && x.IdInsumo == item.Producto.IdProducto) .FirstOrDefaultAsync(); if (inventario == null) { sn.Save(new InventarioInsumo { IdAlmacen = ingresoInsumo.Almacen.IdAlmacen, IdInsumo = item.Producto.IdProducto, Stock = (item.Cantidad * item.Factor) }); } else { inventario.Stock = inventario.Stock + (item.Cantidad * item.Factor); } } item.IdIngresoInsumo = ingresoInsumo.IdIngresoInsumo; sn.Save(item); } sn.Save(new MovimientoCaja { IdCaja = caja.IdCaja, Fecha = DateTime.Now, IdIngresoInsumo = ingresoInsumo.IdIngresoInsumo, TipoMovimiento = Constantes.Salida, Importe = costo * -1, Glosa = "COMPRA DE INSUMOS N° " + ingresoInsumo.IdIngresoInsumo, Usuario = ingresoInsumo.Usuario }); await tx.CommitAsync(); } catch (Exception ex) { await tx.RollbackAsync(); return(StatusCode(500, ex.Message)); } } } return(Ok(true)); }