private static ComprasDetalleInfo CargarDetalleCompraAlmacen(IDataReader dr)
        {
            int colCount = dr.FieldCount;
            var values   = new object[colCount];

            #region Indices
            int indCompraId         = dr.GetOrdinal("CompraId");
            int indComprasDetalleId = dr.GetOrdinal("ComprasDetalleId");
            int indProductoId       = dr.GetOrdinal("ProductoId");
            int indProducto         = dr.GetOrdinal("Producto");
            int indCodigo           = dr.GetOrdinal("Codigo");
            int indCantidad         = dr.GetOrdinal("Cantidad");
            int indPrecioUnitario   = dr.GetOrdinal("PrecioUnitario");
            int indUnidadMedidaId   = dr.GetOrdinal("UnidadMedidaId");
            int indUnidadMedida     = dr.GetOrdinal("UnidadMedida");
            int indSubTotal         = dr.GetOrdinal("SubTotal");
            int indIgv   = dr.GetOrdinal("Igv");
            int indTotal = dr.GetOrdinal("Total");

            int indNumeroSerie       = dr.GetOrdinal("NumeroSerie");
            int indNumeroComprobante = dr.GetOrdinal("NumeroComprobante");
            int indTipoDocumento     = dr.GetOrdinal("TipoDocumento");
            //int indUsuarioModificacionId = dr.GetOrdinal("UsuarioModificacionId");
            //int indFechaModificacion = dr.GetOrdinal("FechaModificacion");
            int indNumeroFila = dr.GetOrdinal("NumeroFila");
            int indTotalFilas = dr.GetOrdinal("TotalFilas");
            #endregion

            var tipoProductoInfo = new ComprasDetalleInfo();
            dr.GetValues(values);

            #region Campos
            tipoProductoInfo.CompraId         = Convert.ToInt32(values[indCompraId]);
            tipoProductoInfo.ComprasDetalleId = Convert.ToInt32(values[indComprasDetalleId]);
            tipoProductoInfo.ProductoId       = Convert.ToInt32(values[indProductoId]);
            tipoProductoInfo.Producto         = Convert.ToString(values[indProducto]);
            tipoProductoInfo.Codigo           = Convert.ToString(values[indCodigo]);
            tipoProductoInfo.Cantidad         = Convert.ToDecimal(values[indCantidad]);
            tipoProductoInfo.PrecioUnitario   = Convert.ToDecimal(values[indPrecioUnitario]);
            tipoProductoInfo.UnidadMedidaId   = Convert.ToInt32(values[indUnidadMedidaId]);
            tipoProductoInfo.UnidadMedida     = Convert.ToString(values[indUnidadMedida]);
            tipoProductoInfo.SubTotal         = Convert.ToDecimal(values[indSubTotal]);
            tipoProductoInfo.Igv   = Convert.ToDecimal(values[indIgv]);
            tipoProductoInfo.Total = Convert.ToDecimal(values[indTotal]);

            tipoProductoInfo.NumeroComprobante = Convert.ToString(values[indNumeroComprobante]);
            tipoProductoInfo.NumeroSerie       = Convert.ToString(values[indNumeroSerie]);
            tipoProductoInfo.TipoDocumento     = Convert.ToString(values[indTipoDocumento]);

            //tipoProductoInfo.Activo = Convert.ToInt32(values[indActivo]);
            //tipoProductoInfo.UsuarioCreacionId = Convert.ToInt32(values[indUsuarioCreacionId]);
            //tipoProductoInfo.FechaCreacion = Convert.ToDateTime(values[indFechaCreacion]);
            //tipoProductoInfo.UsuarioModificacionId = Convert.ToInt32(values[indUsuarioModificacionId]);
            //tipoProductoInfo.FechaModificacion = Convert.ToDateTime(values[indFechaModificacion]);
            tipoProductoInfo.NumeroFila = Convert.ToInt32(values[indNumeroFila]);
            tipoProductoInfo.TotalFilas = Convert.ToInt32(values[indTotalFilas]);
            #endregion

            return(tipoProductoInfo);
        }
        protected void GuardarCompraDetalle(object sender, EventArgs e)
        {
            var script      = new StringBuilder();
            var usuarioInfo = ObtenerUsuarioInfo();

            var compraDetalleListaInfo = (List <ComprasDetalleInfo>)Session["CompraDetalle"];

            if (compraDetalleListaInfo == null)
            {
                compraDetalleListaInfo = new List <ComprasDetalleInfo>();
            }

            var compraInfo = new ComprasDetalleInfo();

            compraInfo.ComprasDetalleId = (-1) * (compraDetalleListaInfo.Count + 1);
            compraInfo.CompraId         = Convert.ToInt32(hdnCompraId.Value);
            compraInfo.ProductoId       = Convert.ToInt32(hdnProductoId.Value);
            compraInfo.Cantidad         = Convert.ToDecimal(txtCantidad.Text);
            compraInfo.PrecioUnitario   = Convert.ToDecimal(txtPrecio.Text);
            compraInfo.SubTotal         = Convert.ToDecimal(txtSubTotal.Text.Replace(",", ""));
            compraInfo.Igv               = Convert.ToDecimal(txtIgv.Text.Replace(",", ""));
            compraInfo.Total             = Convert.ToDecimal(txtTotal.Text.Replace(",", ""));
            compraInfo.UsuarioCreacionId = usuarioInfo.UsuarioId;
            compraInfo.AlmacenId         = Convert.ToInt32(ddlAlmacen.SelectedValue);
            compraInfo.Almacen           = ddlAlmacen.SelectedItem.Text;

            compraInfo.Codigo       = Request["txtProductoCodigo"];
            compraInfo.Producto     = Request["txtProductoDescripcion"];
            compraInfo.UnidadMedida = ddlUnidad.SelectedItem.Text;

            compraDetalleListaInfo.Add(compraInfo);

            Session["CompraDetalle"] = compraDetalleListaInfo;

            grvVenta.DataSource = compraDetalleListaInfo;
            grvVenta.DataBind();

            if (compraDetalleListaInfo.Count > 0)
            {
                grvVenta.HeaderRow.Attributes["style"] = "display: none";
                grvVenta.UseAccessibleHeader           = true;
                grvVenta.HeaderRow.TableSection        = TableRowSection.TableHeader;
            }

            script.Append("CalcularMontoFinal();LimpiarProductoDetalle();");

            RegistrarScript(script.ToString(), "GuardarCompra");
        }
Ejemplo n.º 3
0
        public int ActualizarCompraDetalle(ComprasDetalleInfo ventaInfo)
        {
            int resultado = 0;

            try
            {
                resultado = _ventaAccesoDatos.ActualizarCompraDetalle(ventaInfo);
            }
            catch (Exception ex)
            {
                bool rethrow = ExceptionPolicy.HandleException(ex, Constantes.ExcepcionPoliticaLogicaNegocio);
                if (rethrow)
                {
                    throw;
                }
            }
            return(resultado);
        }
        public int ActualizarCompraDetalle(ComprasDetalleInfo compraDetalleInfo)
        {
            int resultado = 0;

            try
            {
                using (var oConnection = new SqlConnection(HelperAccesoDatos.GetCadenaConexion()))
                {
                    var sqlComando = new SqlCommand {
                        Connection = oConnection, CommandText = "ActualizarComprasDetalle", CommandType = CommandType.StoredProcedure
                    };

                    sqlComando.Parameters.Add("ComprasDetalleId", SqlDbType.Int).Value   = compraDetalleInfo.ComprasDetalleId;
                    sqlComando.Parameters.Add("CompraId", SqlDbType.Int).Value           = compraDetalleInfo.CompraId;
                    sqlComando.Parameters.Add("ProductoId", SqlDbType.Int).Value         = compraDetalleInfo.ProductoId;
                    sqlComando.Parameters.Add("Cantidad", SqlDbType.Decimal).Value       = compraDetalleInfo.Cantidad;
                    sqlComando.Parameters.Add("PrecioUnitario", SqlDbType.Decimal).Value = compraDetalleInfo.PrecioUnitario;

                    sqlComando.Parameters.Add("SubTotal", SqlDbType.Decimal).Value          = compraDetalleInfo.SubTotal;
                    sqlComando.Parameters.Add("Igv", SqlDbType.Decimal).Value               = compraDetalleInfo.Igv;
                    sqlComando.Parameters.Add("Total", SqlDbType.Decimal).Value             = compraDetalleInfo.Total;
                    sqlComando.Parameters.Add("UsuarioModificacionId", SqlDbType.Int).Value = compraDetalleInfo.UsuarioModificacionId;

                    oConnection.Open();
                    resultado = Convert.ToInt32(sqlComando.ExecuteScalar());

                    oConnection.Close();
                }
            }
            catch (Exception ex)
            {
                bool rethrow = ExceptionPolicy.HandleException(ex, Constantes.ExcepcionPoliticaAccesoDatos);
                if (rethrow)
                {
                    throw ex;
                }
            }
            return(resultado);
        }
        public int InsertarCompraDetalle(ComprasDetalleInfo ventaInfo)
        {
            int resultado;

            try
            {
                using (var oConnection = new SqlConnection(HelperAccesoDatos.GetCadenaConexion()))
                {
                    var sqlComando = new SqlCommand {
                        Connection = oConnection, CommandText = "InsertarComprasDetalle", CommandType = CommandType.StoredProcedure
                    };

                    //sqlComando.Parameters.Add("ComprasDetalleId", SqlDbType.Int).Value = ventaInfo.ComprasDetalleId;
                    sqlComando.Parameters.Add("CompraId", SqlDbType.Int).Value           = ventaInfo.CompraId;
                    sqlComando.Parameters.Add("ProductoId", SqlDbType.Int).Value         = ventaInfo.ProductoId;
                    sqlComando.Parameters.Add("Cantidad", SqlDbType.Decimal).Value       = ventaInfo.Cantidad;
                    sqlComando.Parameters.Add("PrecioUnitario", SqlDbType.Decimal).Value = ventaInfo.PrecioUnitario;

                    sqlComando.Parameters.Add("SubTotal", SqlDbType.Decimal).Value = ventaInfo.SubTotal;
                    sqlComando.Parameters.Add("Igv", SqlDbType.Decimal).Value      = ventaInfo.Igv;
                    sqlComando.Parameters.Add("Total", SqlDbType.Decimal).Value    = ventaInfo.Total;

                    sqlComando.Parameters.Add("AlmacenId", SqlDbType.Int).Value = ventaInfo.AlmacenId;
                    //sqlComando.Parameters.Add("Activo", SqlDbType.Int).Value = ventaInfo.Activo;
                    sqlComando.Parameters.Add("UsuarioCreacionId", SqlDbType.Int).Value = ventaInfo.UsuarioCreacionId;

                    oConnection.Open();
                    resultado = Convert.ToInt32(sqlComando.ExecuteScalar());

                    oConnection.Close();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(resultado);
        }
        public static string GenerarComprobante(int compraId, int proveedorId, string tipoComprobanteId, string serie, string numeroComprobante, string fechaEmision,
                                                int monedaId, decimal montoCompra, decimal montoIgv, decimal montoTotal, string glosa, int motivoIngresoId)
        {
            var mensaje = String.Empty;

            try
            {
                var usuarioInfo = ObtenerUsuarioInfo();

                #region Compra
                var compraInfo = new CompraInfo();

                compraInfo.CompraId            = compraId;
                compraInfo.ProveedorId         = proveedorId;
                compraInfo.UsuarioCreacionId   = usuarioInfo.UsuarioId;
                compraInfo.TipoDocumentoId     = Convert.ToInt32(tipoComprobanteId);
                compraInfo.NumeroComprobante   = numeroComprobante;
                compraInfo.NumeroSerie         = serie;
                compraInfo.Glosa               = glosa;
                compraInfo.FechaEmision        = DateTime.ParseExact(fechaEmision, "dd/MM/yyyy", null);
                compraInfo.EstadoComprobanteId = Constantes.EstadoComprobanteCompraIngresado;
                compraInfo.SubTotal            = montoCompra;
                compraInfo.Igv             = montoIgv;
                compraInfo.Total           = montoTotal;
                compraInfo.MotivoIngresoId = motivoIngresoId;
                compraInfo.TipoNegocioId   = usuarioInfo.TipoNegocioId;
                compraInfo.MonedaId        = monedaId;

                #endregion
                if (compraId > 0)
                {
                    var compraDetalleListaInfo = (List <ComprasDetalleInfo>)HttpContext.Current.Session["CompraDetalle"];  //detalle compra modificado
                    var compraDetalleOriginal  = new Negocio.Compra().ListarComprasDetalle(0, compraId);                   //detalle compra original

                    var listaIncrementaInventario = new List <ComprasDetalleInfo>();
                    var listaReduceInventario     = new List <ComprasDetalleInfo>();
                    var listaEliminados           = new List <ComprasDetalleInfo>();

                    //var ventaDetalleListaInfo = (List<VentaDetalleInfo>)grvItem.DataSource;
                    foreach (var cdModificada in compraDetalleListaInfo)
                    {
                        var detOriginal = (from cdOriginal in compraDetalleOriginal where cdOriginal.ComprasDetalleId == cdModificada.ComprasDetalleId select cdOriginal);
                        if (detOriginal.Count() > 0)
                        {
                            if (cdModificada.AlmacenId == detOriginal.First().AlmacenId)
                            {
                                if (cdModificada.ProductoId == detOriginal.First().ProductoId)
                                {
                                    if (cdModificada.Cantidad > detOriginal.First().Cantidad)                                    //Incremento de inventario
                                    {
                                        var diferencia = cdModificada.Cantidad - detOriginal.First().Cantidad;
                                        detOriginal.First().Cantidad = diferencia;
                                        listaIncrementaInventario.Add(detOriginal.First());
                                    }
                                    else if (cdModificada.Cantidad < detOriginal.First().Cantidad)                                    //reduccion de inventario
                                    {
                                        var diferencia = cdModificada.Cantidad - detOriginal.First().Cantidad;
                                        detOriginal.First().Cantidad = Math.Abs(diferencia);
                                        listaReduceInventario.Add(detOriginal.First());
                                    }
                                }
                                else
                                {
                                    //Al ser un producto distinto, el inventario original debe de reducirse y el modificado debe de agregarse
                                    listaIncrementaInventario.Add(cdModificada);
                                    listaReduceInventario.Add(detOriginal.First());
                                }
                            }
                            else
                            {
                                //Al ser un alamcen distinto, no importa el producto, el inventario original debe de reducirse y el modificado debe de agregarse
                                listaIncrementaInventario.Add(cdModificada);
                                listaReduceInventario.Add(detOriginal.First());
                            }
                        }
                        else
                        {
                            listaIncrementaInventario.Add(cdModificada);
                            //detOriginal.First().Eliminado = 1;
                            //listaReduceInventario.Add(detOriginal.First());
                            //listaEliminados.Add(detOriginal.First());
                        }
                    }

                    //buscamos los items eliminados de la lista original para reducir inventario y eliminar del detalle
                    var codigosDetalleCompra = compraDetalleListaInfo.Where(p => p.ComprasDetalleId > 0).Select(x => x.ComprasDetalleId).ToArray();

                    listaEliminados.AddRange(compraDetalleOriginal.Where(p => !codigosDetalleCompra.Contains(p.ComprasDetalleId)));
                    listaReduceInventario.AddRange(compraDetalleOriginal.Where(p => !codigosDetalleCompra.Contains(p.ComprasDetalleId)));

                    var tieneSaldoInventario = true;

                    var almacenRevisar = listaReduceInventario.Select(p => p.AlmacenId).Distinct();
                    foreach (var almacen in almacenRevisar)
                    {
                        var productosAlmacen = listaReduceInventario.Where(p => p.AlmacenId == almacen).Select(grp => grp.ProductoId).Distinct();
                        foreach (var producto in productosAlmacen)
                        {
                            var inventarioReducir = listaReduceInventario.Where(p => p.AlmacenId == almacen && p.ProductoId == producto).Sum(x => x.Cantidad);

                            //Se consulta a BD si hay saldo
                            var saldoActual = new Negocio.Inventario().Listar(almacen, producto, usuarioInfo.TipoNegocioId);
                            if (saldoActual.Count() > 0 && !((saldoActual.First().InventarioActual - inventarioReducir) > 0))
                            {
                                tieneSaldoInventario = false;
                                break;
                            }
                        }
                        if (!tieneSaldoInventario)
                        {
                            break;
                        }
                    }

                    if (tieneSaldoInventario)
                    {
                        new Negocio.Compra().ActualizarCompra(compraInfo);

                        #region Actualizacion Compra Detalle
                        //Actualizacion de detalle de compra
                        foreach (var compraDetalle in compraDetalleListaInfo)
                        {
                            if (compraDetalle.Eliminado == 0)
                            {
                                var compraDetalleInfo = new ComprasDetalleInfo();
                                compraDetalleInfo.CompraId         = compraId;
                                compraDetalleInfo.ComprasDetalleId = compraDetalle.ComprasDetalleId;
                                compraDetalleInfo.ProductoId       = compraDetalle.ProductoId;
                                compraDetalleInfo.Cantidad         = compraDetalle.Cantidad;
                                compraDetalleInfo.PrecioUnitario   = compraDetalle.PrecioUnitario;
                                compraDetalleInfo.SubTotal         = compraDetalle.SubTotal;
                                compraDetalleInfo.Igv       = compraDetalle.Igv;
                                compraDetalleInfo.Total     = compraDetalle.Total;
                                compraDetalleInfo.AlmacenId = compraDetalle.AlmacenId;

                                if (compraDetalle.ComprasDetalleId > 0)
                                {
                                    compraDetalleInfo.UsuarioModificacionId = usuarioInfo.UsuarioId;
                                    new Negocio.Compra().ActualizarCompraDetalle(compraDetalleInfo);
                                }
                                else
                                {
                                    compraDetalleInfo.UsuarioCreacionId = usuarioInfo.UsuarioId;
                                    new Negocio.Compra().InsertarCompraDetalle(compraDetalleInfo);
                                }
                            }
                        }
                        //Eliminacion de registros de compra detalle
                        foreach (var compraDetalle in listaEliminados)
                        {
                            new Negocio.Compra().EliminarCompraDetalle(compraDetalle.ComprasDetalleId);
                        }

                        #endregion

                        #region Actualizacion Almacen
                        //Incremento de Inventario
                        var almacenesAsignados = listaIncrementaInventario.Select(p => p.AlmacenId).Distinct();
                        foreach (var almacen in almacenesAsignados)
                        {
                            var productosAlmacen = listaIncrementaInventario.Where(p => p.AlmacenId == almacen).Select(grp => grp.ProductoId).Distinct();
                            foreach (var producto in productosAlmacen)
                            {
                                var inventarioInfo = new InventarioInfo();
                                inventarioInfo.AlmacenId         = almacen;
                                inventarioInfo.ProductoId        = producto;
                                inventarioInfo.InventarioActual  = listaIncrementaInventario.Where(p => p.AlmacenId == almacen && p.ProductoId == producto).Sum(x => x.Cantidad);
                                inventarioInfo.UsuarioCreacionId = usuarioInfo.UsuarioId;
                                inventarioInfo.TipoNegocioId     = usuarioInfo.TipoNegocioId;
                                //Se crea el registro en la tabla inventario
                                new Negocio.Inventario().Insertar(inventarioInfo);
                            }
                        }

                        //Reduccion de Inventario
                        almacenesAsignados = listaReduceInventario.Select(p => p.AlmacenId).Distinct();
                        foreach (var almacen in almacenesAsignados)
                        {
                            var productosAlmacen = listaReduceInventario.Where(p => p.AlmacenId == almacen).Select(grp => grp.ProductoId).Distinct();
                            foreach (var producto in productosAlmacen)
                            {
                                var inventarioInfo = new InventarioInfo();
                                inventarioInfo.AlmacenId             = almacen;
                                inventarioInfo.ProductoId            = producto;
                                inventarioInfo.InventarioActual      = (-1) * listaReduceInventario.Where(p => p.AlmacenId == almacen && p.ProductoId == producto).Sum(x => x.Cantidad);
                                inventarioInfo.UsuarioModificacionId = usuarioInfo.UsuarioId;
                                inventarioInfo.TipoNegocioId         = usuarioInfo.TipoNegocioId;
                                //Se crea el registro en la tabla inventario
                                new Negocio.Inventario().Actualizar(inventarioInfo);
                            }
                        }

                        #endregion

                        mensaje = compraId + "@" + "El Comprobante se actualizó correctamente.";
                    }
                    else
                    {
                        mensaje = "-2" + "@" + "No hay saldo disponible en el Inventario.";
                    }
                }
                else
                {
                    compraId = new Negocio.Compra().InsertarCompra(compraInfo);

                    #region Compra Detalle
                    var compraDetalleListaInfo = (List <ComprasDetalleInfo>)HttpContext.Current.Session["CompraDetalle"];
                    //var ventaDetalleListaInfo = (List<VentaDetalleInfo>)grvItem.DataSource;
                    foreach (var vd in compraDetalleListaInfo)
                    {
                        var compraDetalleInfo = new ComprasDetalleInfo();
                        compraDetalleInfo.CompraId       = compraId;
                        compraDetalleInfo.ProductoId     = vd.ProductoId;
                        compraDetalleInfo.Cantidad       = vd.Cantidad;
                        compraDetalleInfo.PrecioUnitario = vd.PrecioUnitario;
                        compraDetalleInfo.SubTotal       = vd.SubTotal;
                        compraDetalleInfo.Igv            = vd.Igv;
                        compraDetalleInfo.Total          = vd.Total;
                        //compraDetalleInfo.AsignacionAlmacen = 1;//por defecto estan asignados
                        compraDetalleInfo.AlmacenId         = vd.AlmacenId;
                        compraDetalleInfo.UsuarioCreacionId = usuarioInfo.UsuarioId;

                        new Negocio.Compra().InsertarCompraDetalle(compraDetalleInfo);
                    }
                    #endregion

                    #region Asignacion Almacen
                    var almacenesAsignados = compraDetalleListaInfo.Select(p => p.AlmacenId).Distinct();
                    foreach (var almacen in almacenesAsignados)
                    {
                        var productosAlmacen = compraDetalleListaInfo.Where(p => p.AlmacenId == almacen).Select(grp => grp.ProductoId).Distinct();
                        foreach (var producto in productosAlmacen)
                        {
                            var inventarioInfo = new InventarioInfo();
                            inventarioInfo.AlmacenId         = almacen;
                            inventarioInfo.ProductoId        = producto;
                            inventarioInfo.InventarioActual  = compraDetalleListaInfo.Where(p => p.AlmacenId == almacen && p.ProductoId == producto).Sum(x => x.Cantidad);
                            inventarioInfo.UsuarioCreacionId = usuarioInfo.UsuarioId;
                            inventarioInfo.TipoNegocioId     = usuarioInfo.TipoNegocioId;
                            //Se crea el registro en la tabla inventario
                            new Negocio.Inventario().Insertar(inventarioInfo);
                        }
                    }

                    #endregion

                    #region Tabla Movimientos

                    var movimientosInfo = new MovimientosInfo();
                    movimientosInfo.OperacionId       = compraId;
                    movimientosInfo.TipoMovimientoId  = Constantes.TipoMovimientoCompra;
                    movimientosInfo.FechaOperacion    = DateTime.Now;
                    movimientosInfo.Glosa             = String.Empty;
                    movimientosInfo.UsuarioCreacionId = usuarioInfo.UsuarioId;

                    new Negocio.Movimientos().InsertarMovimientos(movimientosInfo);

                    #endregion

                    mensaje = compraId + "@" + "El Comprobante se registró correctamente.";
                }
            }
            catch (Exception ex)
            {
                bool rethrow = ExceptionPolicy.HandleException(ex, Constantes.ExcepcionPoliticaPresentacion);
                mensaje = "-1";
                mensaje = mensaje + "@" + (rethrow ? ex.Message : Constantes.ExcepcionPoliticaPresentacion);
            }
            return(mensaje);
        }