예제 #1
0
        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));
        }
예제 #2
0
        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));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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));
        }
예제 #6
0
        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));
        }