public void Actualizar(OrdenCompraLineaDTO obj)
        {
            Database db = DatabaseFactory.CreateDatabase("ApplicationConnectionString");
              DbCommand dbCommand = db.GetStoredProcCommand(C_ACTUALIZAR);
              db.AddInParameter(dbCommand, "@id_orden_compra", DbType.Int32, obj.IdOrdenCompra);
              db.AddInParameter(dbCommand, "@id_orden_compra_linea", DbType.Int32, obj.IdOrdenCompraLinea);
              db.AddInParameter(dbCommand, "@numero_linea", DbType.Int32, obj.NumeroLinea);
              db.AddInParameter(dbCommand, "@id_articulo", DbType.Int32, obj.IdArticulo);
              db.AddInParameter(dbCommand, "@id_unidad_medida", DbType.Int32, obj.IdUnidadMedida);
              db.AddInParameter(dbCommand, "@descripcion_linea", DbType.String, obj.DescripcionLinea);

            if (obj.Precio > 0)
                db.AddInParameter(dbCommand, "@precio", DbType.Decimal, obj.Precio);
            else
                db.AddInParameter(dbCommand, "@precio", DbType.Decimal, null);

            if (obj.Cantidad > 0)
                db.AddInParameter(dbCommand, "@cantidad", DbType.Decimal, obj.Cantidad);
            else
                db.AddInParameter(dbCommand, "@cantidad", DbType.Decimal, null);

            if (obj.Importe > 0)
                db.AddInParameter(dbCommand, "@importe", DbType.Decimal, obj.Importe);
            else
                db.AddInParameter(dbCommand, "@importe", DbType.Decimal, null);

              db.AddInParameter(dbCommand, "@id_cotizacion_linea", DbType.Int32, obj.IdCotizacionLinea);
              db.AddInParameter(dbCommand, "@id_pedido_linea", DbType.Int32, obj.IdPedidoLinea);

              if (obj.FechaPactada.Year == 1)
                db.AddInParameter(dbCommand, "@fecha_pactada", DbType.DateTime, null );
              else
                db.AddInParameter(dbCommand, "@fecha_pactada", DbType.DateTime, obj.FechaPactada);

              if (obj.CantidadRecibida > 0)
              db.AddInParameter(dbCommand, "@cantidad_recibida", DbType.Decimal, obj.CantidadRecibida);
              else
              db.AddInParameter(dbCommand, "@cantidad_recibida", DbType.Decimal, null);

              db.AddInParameter(dbCommand, "@estado_cotrol", DbType.String, obj.EstadoControl);

              if (obj.FechaCreacion.Year == 1)
               db.AddInParameter(dbCommand, "@fecha_creacion", DbType.DateTime, null);
              else
               db.AddInParameter(dbCommand, "@fecha_creacion", DbType.DateTime, obj.FechaCreacion);

              db.AddInParameter(dbCommand, "@id_usuario_creacion", DbType.Int32, obj.IdUsuarioCreacion);

              if (obj.FechaModificacion.Year == 1)
                db.AddInParameter(dbCommand, "@fecha_modificacion", DbType.DateTime, null);
              else
               db.AddInParameter(dbCommand, "@fecha_modificacion", DbType.DateTime, obj.FechaModificacion);

              db.AddInParameter(dbCommand, "@id_usuario_modificacion", DbType.Int32, obj.IdUsuarioModificacion);

              db.ExecuteNonQuery(dbCommand);
        }
        protected void btnRecepcionar_Click(object sender, EventArgs e)
        {
            UsuarioDTO objUsuarioDTO = objUsuarioDAO.ListarPorLogin(HttpContext.Current.User.Identity.Name);
            Boolean hayRecepcion = false;
            Boolean Validacion = false;

            this.lblMensaje.Text = "";

            foreach (GridViewRow row in this.gvLista.Rows)
            {
                DataKey dKey = gvLista.DataKeys[row.RowIndex];
                CheckBox chkSeleccion = (CheckBox)row.Cells[0].FindControl("chkSeleccion");

                if (chkSeleccion.Checked ) {
                    hayRecepcion = true;
                    TextBox txtCantidadRecepcion = (TextBox)row.Cells[0].FindControl("txtCantidadRecepcion");
                    if (txtCantidadRecepcion.Text != "")
                    {
                        decimal cantidad = Convert.ToDecimal(txtCantidadRecepcion.Text);
                        decimal cantidad_orden_compra = Convert.ToDecimal(row.Cells[5].Text);
                        decimal cantidad_recibida = Convert.ToDecimal(row.Cells[8].Text);
                        decimal cantidad_pendiente = cantidad_orden_compra - cantidad_recibida;
                        if (cantidad > 0)
                        {
                            if (cantidad <= cantidad_pendiente)
                            {
                                Validacion = true;
                            }
                            else
                            {
                                this.lblMensaje.Text = "Cantidad de recepcion es mayor a la cantidad pendiente de recepcionar";
                            }
                        }
                        else
                        {
                            this.lblMensaje.Text = "Cantidad de recepcion debe ser un valor positivo";
                        }

                    }
                    else
                    {
                        this.lblMensaje.Text = "Indique cantida a recepcionar";
                    }
                }
            }

            if (!hayRecepcion)
            {
                this.lblMensaje.Text = "Seleccione una linea he indique cantida a recepcionar";
            }

            if (Validacion)
            {

                OrdenCompraDTO objOrdenCompra = new OrdenCompraDTO();
                RecepcionDTO objRecepcion = new RecepcionDTO();

                objOrdenCompra = objOrdenCompraDAO.ListarPorClave(Convert.ToInt32(this.txtIdOrdenCompra.Text));

                objRecepcion.IdProveedor = objOrdenCompra.IdProveedor;
                objRecepcion.FechaRecepcion = AppUtilidad.stringToDateTime(this.txtFechaRecepcion.Text, "DD/MM/YYYY");
                objRecepcion.NumeroRecibo = this.txtGuiaRemision.Text;
                objRecepcion.IdOrdenCompra = objOrdenCompra.IdOrdenCompra;
                objRecepcion.Anotaciones = this.txtObservaciones.Text;
                objRecepcion.TipoRecepcion = "COMPRA";
                objRecepcion.IdSede = objOrdenCompra.IdSede;
                objRecepcion.IdProyecto = objOrdenCompra.IdProyecto;

                objRecepcion.FechaCreacion = DateTime.Now;
                objRecepcion.IdUsuarioCreacion = objUsuarioDTO.IdUsuario;

                int IdRecepcion = objRecepcionDAO.Agregar(objRecepcion);

                foreach (GridViewRow row in this.gvLista.Rows)
                {
                    DataKey dKey = gvLista.DataKeys[row.RowIndex];
                    int IdOrdenCompraLinea = Convert.ToInt32 (dKey[0].ToString());

                    TextBox txtCantidadRecepcion = (TextBox)row.Cells[0].FindControl("txtCantidadRecepcion");
                    decimal cantidad = Convert.ToDecimal(txtCantidadRecepcion.Text);
                    decimal cantidad_orden_compra = Convert.ToDecimal(row.Cells[5].Text);
                    decimal cantidad_recibida = Convert.ToDecimal(row.Cells[8].Text);
                    decimal cantidad_pendiente = cantidad_orden_compra - cantidad_recibida;

                    OrdenCompraLineaDTO objOrdenCompraLinea = new OrdenCompraLineaDTO();
                    RecepcionLineaDTO objRecepcionLinea = new RecepcionLineaDTO();

                    objOrdenCompraLinea = objOrdenCompraLineaDAO.ListarPorClave(objOrdenCompra.IdOrdenCompra, IdOrdenCompraLinea);

                    objRecepcionLinea.IdRecepcion = IdRecepcion;
                    objRecepcionLinea.IdOrdenCompra = objOrdenCompraLinea.IdOrdenCompra;
                    objRecepcionLinea.IdOrdenCompraLinea = objOrdenCompraLinea.IdOrdenCompraLinea;
                    objRecepcionLinea.IdArticulo = objOrdenCompraLinea.IdArticulo;
                    objRecepcionLinea.CantidadRecepcionada = cantidad;
                    objRecepcionLinea.Anotaciones = "";
                    objRecepcionLinea.FechaCreacion = DateTime.Now;
                    objRecepcionLinea.IdUsuarioCreacion = objUsuarioDTO.IdUsuario;
                    objRecepcionLinea.Estado = AppConstantes.ESTADO_RECEPCION_INGRESO_OC;

                    objRecepcionLineaDAO.Agregar(objRecepcionLinea);

                }

                CotizacionDTO objCotizacionDTO = objCotizacionDAO.ListarPorClave(objOrdenCompra.IdCotizacion);
                PedidoDTO objPedidoDTO = objPedidoDAO.ListarPorClave(objCotizacionDTO.IdPedido);
                objPedidoDTO.EstadoControl = AppConstantes.PEDIDO_ESTADO_CONTROL_OC_CON_RECEPCION;
                objPedidoDAO.Actualizar(objPedidoDTO);

                this.lblMensajeRecepcion.Text = "Se genero la Recepción " + IdRecepcion.ToString();
                this.panRecepcion.Visible = false;

            }
        }
        public OrdenCompraLineaDTO ListarPorClave(int IdOrdenCompra, int IdOrdenCompraLinea)
        {
            OrdenCompraLineaDTO obj = null;
              Database db = DatabaseFactory.CreateDatabase("ApplicationConnectionString");
              DbCommand dbCommand = db.GetStoredProcCommand(C_LISTAR_POR_CLAVE);
              db.AddInParameter(dbCommand, "@id_orden_compra", DbType.Int32, IdOrdenCompra);
              db.AddInParameter(dbCommand, "@id_orden_compra_linea", DbType.Int32, IdOrdenCompraLinea);

              using (IDataReader dr = db.ExecuteReader(dbCommand))
              {
              if (dr.Read())
              {
                  obj = new OrdenCompraLineaDTO();

                  if (dr["id_orden_compra"] != System.DBNull.Value)
                      obj.IdOrdenCompra = (int)dr["id_orden_compra"];
                  if (dr["id_orden_compra_linea"] != System.DBNull.Value)
                      obj.IdOrdenCompraLinea = (int)dr["id_orden_compra_linea"];
                  if (dr["numero_linea"] != System.DBNull.Value)
                      obj.NumeroLinea = (int)dr["numero_linea"];
                  if (dr["id_articulo"] != System.DBNull.Value)
                      obj.IdArticulo = (int)dr["id_articulo"];
                  if (dr["id_unidad_medida"] != System.DBNull.Value)
                      obj.IdUnidadMedida = (int)dr["id_unidad_medida"];
                  if (dr["descripcion_linea"] != System.DBNull.Value)
                      obj.DescripcionLinea = (string)dr["descripcion_linea"];
                  if (dr["precio"] != System.DBNull.Value)
                      obj.Precio = (Decimal)dr["precio"];
                  if (dr["cantidad"] != System.DBNull.Value)
                      obj.Cantidad = (Decimal)dr["cantidad"];
                  if (dr["importe"] != System.DBNull.Value)
                      obj.Importe = (Decimal)dr["importe"];
                  if (dr["id_cotizacion_linea"] != System.DBNull.Value)
                      obj.IdCotizacionLinea = (int)dr["id_cotizacion_linea"];
                  if (dr["id_pedido_linea"] != System.DBNull.Value)
                      obj.IdPedidoLinea = (int)dr["id_pedido_linea"];
                  if (dr["fecha_pactada"] != System.DBNull.Value)
                      obj.FechaPactada = (DateTime)dr["fecha_pactada"];
                  if (dr["fecha_creacion"] != System.DBNull.Value)
                      obj.FechaCreacion = (DateTime)dr["fecha_creacion"];
                  if (dr["id_usuario_creacion"] != System.DBNull.Value)
                      obj.IdUsuarioCreacion = (int)dr["id_usuario_creacion"];
                  if (dr["fecha_modificacion"] != System.DBNull.Value)
                      obj.FechaModificacion = (DateTime)dr["fecha_modificacion"];
                  if (dr["id_usuario_modificacion"] != System.DBNull.Value)
                      obj.IdUsuarioModificacion = (int)dr["id_usuario_modificacion"];

                  if (dr["descripcion_articulo"] != System.DBNull.Value)
                      obj.DescripcionArticulo = (string)dr["descripcion_articulo"];

                  if (dr["nombre_unidad_medida"] != System.DBNull.Value)
                      obj.NombreUnidadMedida = (string)dr["nombre_unidad_medida"];

              }
              }
              return obj;
        }
        public List<OrdenCompraLineaDTO> ListarPendienteRecepcion(int IdOrdenCompra)
        {
            List<OrdenCompraLineaDTO> Lista = new List<OrdenCompraLineaDTO>();
              Database db = DatabaseFactory.CreateDatabase("ApplicationConnectionString");
              DbCommand dbCommand = db.GetStoredProcCommand(C_LISTAR_PENDIENTE_RECEPCION);
              db.AddInParameter(dbCommand, "@id_orden_compra", DbType.Int32, IdOrdenCompra);

              using (IDataReader dr = db.ExecuteReader(dbCommand))
              {
              while (dr.Read())
              {
                  OrdenCompraLineaDTO obj = new OrdenCompraLineaDTO();
                  if (dr["id_orden_compra"] != System.DBNull.Value)
                      obj.IdOrdenCompra = (int)dr["id_orden_compra"];
                  if (dr["id_orden_compra_linea"] != System.DBNull.Value)
                      obj.IdOrdenCompraLinea = (int)dr["id_orden_compra_linea"];
                  if (dr["numero_linea"] != System.DBNull.Value)
                      obj.NumeroLinea = (int)dr["numero_linea"];
                  if (dr["id_articulo"] != System.DBNull.Value)
                      obj.IdArticulo = (int)dr["id_articulo"];
                  if (dr["id_unidad_medida"] != System.DBNull.Value)
                      obj.IdUnidadMedida = (int)dr["id_unidad_medida"];
                  if (dr["descripcion_linea"] != System.DBNull.Value)
                      obj.DescripcionLinea = (string)dr["descripcion_linea"];
                  if (dr["precio"] != System.DBNull.Value)
                      obj.Precio = (Decimal)dr["precio"];
                  if (dr["cantidad"] != System.DBNull.Value)
                      obj.Cantidad = (Decimal)dr["cantidad"];
                  if (dr["importe"] != System.DBNull.Value)
                      obj.Importe = (Decimal)dr["importe"];
                  if (dr["id_cotizacion_linea"] != System.DBNull.Value)
                      obj.IdCotizacionLinea = (int)dr["id_cotizacion_linea"];
                  if (dr["id_pedido_linea"] != System.DBNull.Value)
                      obj.IdPedidoLinea = (int)dr["id_pedido_linea"];
                  if (dr["fecha_pactada"] != System.DBNull.Value)
                      obj.FechaPactada = (DateTime)dr["fecha_pactada"];
                  if (dr["fecha_creacion"] != System.DBNull.Value)
                      obj.FechaCreacion = (DateTime)dr["fecha_creacion"];
                  if (dr["id_usuario_creacion"] != System.DBNull.Value)
                      obj.IdUsuarioCreacion = (int)dr["id_usuario_creacion"];
                  if (dr["fecha_modificacion"] != System.DBNull.Value)
                      obj.FechaModificacion = (DateTime)dr["fecha_modificacion"];
                  if (dr["id_usuario_modificacion"] != System.DBNull.Value)
                      obj.IdUsuarioModificacion = (int)dr["id_usuario_modificacion"];

                  if (dr["codigo_articulo"] != System.DBNull.Value)
                      obj.CodigoArticulo = (string)dr["codigo_articulo"];

                  if (dr["descripcion_articulo"] != System.DBNull.Value)
                      obj.DescripcionArticulo = (string)dr["descripcion_articulo"];

                  if (dr["nombre_unidad_medida"] != System.DBNull.Value)
                      obj.NombreUnidadMedida = (string)dr["nombre_unidad_medida"];

                  if (dr["cantidad_recibida"] != System.DBNull.Value)
                      obj.CantidadRecibida = (Decimal)dr["cantidad_recibida"];

                  Lista.Add(obj);
              }
              }
              return Lista;
        }