Пример #1
0
 private void frmSalidaProducto_Load(object sender, EventArgs e)
 {
     dtgDetalleSalidaProducto.AutoGenerateColumns = true;
     cmbProducto.DataSource   = Producto.ObtenerProductos();
     cmbMotivo.DataSource     = Motivo.ObtenerMotivos();
     cmbProducto.SelectedItem = null;
     cmbMotivo.SelectedItem   = null;
     salida = new SalidaProducto();
 }
Пример #2
0
        public async Task <IActionResult> PostSalidaProducto([FromBody] SalidaProducto salidaProducto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        salidaProducto.FechaCreacion = DateTime.Now;

                        sn.Save(salidaProducto);

                        foreach (var item in salidaProducto.Items)
                        {
                            InventarioProducto inventario = await sn.Query <InventarioProducto>()
                                                            .Where(x => x.IdAlmacen == salidaProducto.Almacen.IdAlmacen &&
                                                                   x.IdProducto == 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 producto: " + item.Producto.Nombre);
                            }

                            item.IdSalidaProducto = salidaProducto.IdSalidaProducto;

                            sn.Save(item);
                        }

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }
Пример #3
0
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (validarNulosCabecera())
            {
                salida.fecharemision = dtpFechaRemision.Value.Date;
                salida.motivo        = (Motivo)cmbMotivo.SelectedItem;
                salida.direccion     = txtDireccion.Text;
                salida.destinatario  = txtDestinatario.Text;
                salida.nrodocumento  = txtNumeroDoc.Text;


                SalidaProducto.Agregar(salida);
                LimpiarCab();
                dtgDetalleSalidaProducto.DataSource = null;
                dtpFechaRemision.Value = System.DateTime.Now;
                cmbMotivo.SelectedItem = null;
                salida = new SalidaProducto();
            }
        }
Пример #4
0
        public async Task <IActionResult> GetSalidaProducto([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            SalidaProducto salidaProducto = null;

            using (var sn = factory.OpenSession())
            {
                salidaProducto = await sn.GetAsync <SalidaProducto>(id);

                salidaProducto.Items = await sn.Query <ItemSalidaProducto>().Where(x => x.IdSalidaProducto == id).ToListAsync();
            }

            if (salidaProducto == null)
            {
                return(NotFound());
            }

            return(Ok(salidaProducto));
        }
Пример #5
0
        public async Task <IActionResult> PutSalidaProducto([FromRoute] int id, [FromBody] SalidaProducto salidaProducto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != salidaProducto.IdSalidaProducto)
            {
                return(BadRequest());
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        List <ItemSalidaProducto> items = await sn.Query <ItemSalidaProducto>()
                                                          .Where(x => x.IdSalidaProducto == id)
                                                          .ToListAsync();

                        foreach (var item in items)
                        {
                            InventarioProducto inventario = await sn.Query <InventarioProducto>()
                                                            .Where(x => x.IdAlmacen == salidaProducto.Almacen.IdAlmacen &&
                                                                   x.IdProducto == item.Producto.IdProducto)
                                                            .FirstOrDefaultAsync();

                            inventario.Stock = inventario.Stock + (item.Cantidad * item.Factor);
                        }

                        sn.Delete(string.Format("FROM ItemSalidaProducto WHERE IdSalidaProducto = {0}", id));

                        foreach (var item in salidaProducto.Items)
                        {
                            InventarioProducto inventario = await sn.Query <InventarioProducto>()
                                                            .Where(x => x.IdAlmacen == salidaProducto.Almacen.IdAlmacen &&
                                                                   x.IdProducto == 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 producto: " + item.Producto.Nombre);
                            }

                            item.IdSalidaProducto = salidaProducto.IdSalidaProducto;

                            sn.Save(item);
                        }

                        SalidaProducto salidaProductoBD = sn.Get <SalidaProducto>(id);

                        salidaProductoBD.Comentario = salidaProducto.Comentario;

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }
Пример #6
0
        public async Task <IActionResult> DeleteSalidaProducto([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        SalidaProducto salidaProducto = sn.Get <SalidaProducto>(id);

                        List <ItemSalidaProducto> items = await sn.Query <ItemSalidaProducto>()
                                                          .Where(x => x.IdSalidaProducto == id)
                                                          .ToListAsync();

                        foreach (var item in items)
                        {
                            InventarioProducto inventario = await sn.Query <InventarioProducto>()
                                                            .Where(x => x.IdAlmacen == salidaProducto.Almacen.IdAlmacen &&
                                                                   x.IdProducto == item.Producto.IdProducto)
                                                            .FirstOrDefaultAsync();

                            inventario.Stock = inventario.Stock + (item.Cantidad * item.Factor);
                        }

                        sn.Delete(string.Format("FROM ItemSalidaProducto WHERE IdSalidaProducto = {0}", id));

                        if (salidaProducto.IdPedido != null)
                        {
                            Pedido pedido = sn.Get <Pedido>(salidaProducto.IdPedido);

                            pedido.FechaEntrega = null;

                            if (pedido.Pago == 0)
                            {
                                pedido.Estado = Constantes.Pendiente;
                            }
                            else if (pedido.Pago == pedido.Total)
                            {
                                pedido.Estado = Constantes.Pagado;
                            }
                            else if (pedido.Pago < pedido.Total)
                            {
                                pedido.Estado = Constantes.PagoParcial;
                            }
                        }

                        sn.Delete(salidaProducto);

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }
Пример #7
0
        public async Task <IActionResult> Entregar([FromBody] SalidaProducto salidaProducto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            using (var sn = factory.OpenSession())
            {
                using (var tx = sn.BeginTransaction())
                {
                    try
                    {
                        Pedido pedido = sn.Get <Pedido>(salidaProducto.IdPedido);

                        pedido.FechaEntrega = DateTime.Now;
                        pedido.Estado       = Constantes.Entregado;

                        SalidaProducto salidaProductoBD = new SalidaProducto();

                        salidaProductoBD.FechaCreacion = DateTime.Now;
                        salidaProductoBD.Usuario       = salidaProducto.Usuario;
                        salidaProductoBD.Almacen       = salidaProducto.Almacen;
                        salidaProductoBD.Comentario    = "GENERADO DESDE PEDIDO";
                        salidaProductoBD.IdPedido      = salidaProducto.IdPedido;

                        sn.Save(salidaProductoBD);

                        List <ItemPedido> items = sn.Query <ItemPedido>()
                                                  .Where(x => x.IdPedido == pedido.IdPedido)
                                                  .ToList();

                        foreach (var item in items)
                        {
                            InventarioProducto inventario = await sn.Query <InventarioProducto>()
                                                            .Where(x => x.IdAlmacen == salidaProducto.Almacen.IdAlmacen &&
                                                                   x.IdProducto == 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 producto: " + item.Producto.Nombre);
                            }

                            sn.Save(new ItemSalidaProducto {
                                IdSalidaProducto = salidaProductoBD.IdSalidaProducto,
                                Producto         = item.Producto,
                                Unidad           = item.Unidad,
                                Factor           = item.Factor,
                                Cantidad         = item.Cantidad
                            });
                        }

                        await tx.CommitAsync();
                    }
                    catch (Exception ex)
                    {
                        await tx.RollbackAsync();

                        return(StatusCode(500, ex.Message));
                    }
                }
            }

            return(Ok(true));
        }