void Guardar()
        {
            string rpta    = "";
            bool   guardar = true;

            if (string.IsNullOrWhiteSpace(textDestino.Text))
            {
                guardar = false;
                XtraMessageBox.Show("Debe escribir el destino", "Generando orden de compra");
            }
            //if (string.IsNullOrWhiteSpace(textObservaciones.Text))
            //{
            //    guardar = false;
            //    XtraMessageBox.Show("Debe escribir la observación","Generando orden de compra");
            //}
            if (string.IsNullOrWhiteSpace(textContactoRecibe.Text))
            {
                guardar = false;
                XtraMessageBox.Show("Debe escribir el contacto que recibe", "Generando orden de compra");
            }
            if (gridViewDetalleSubOrden.DataRowCount == 0)
            {
                guardar = false;
                XtraMessageBox.Show("La orden no se puede generar", "Generando orden de compra");
            }
            if (dateEditIngreosBodega.EditValue == null)
            {
                guardar = false;
                XtraMessageBox.Show("Debe especificar la fecha de ingreso", "Generando orden de compra");
            }


            if (guardar)
            {
                int          RowCount     = 0;
                int          CountChecked = 0;
                MOrdenCompra orden        = new MOrdenCompra();
                orden.IdTienda           = Configuraciones.Configuraciones.idtienda;
                orden.IdUsuario          = Configuraciones.Configuraciones.idusuario;
                orden.Serie              = "A";
                orden.Destino            = textDestino.Text;
                orden.Observaciones      = string.IsNullOrWhiteSpace(textObservaciones.Text) == true ? "" : textObservaciones.Text;
                orden.QuienRecibe        = textContactoRecibe.Text;
                orden.FechaIngresoBodega = Convert.ToDateTime(dateEditIngreosBodega.EditValue);
                orden.Idsuborden         = idsuborden;



                RowCount = gridViewDetalleSubOrden.DataRowCount;
                for (int i = 0; i < RowCount; i++)
                {
                    if (Convert.ToBoolean(gridViewDetalleSubOrden.GetRowCellValue(i, "verificado")))
                    {
                        CountChecked++;
                    }
                }

                if (CountChecked == RowCount)
                {
                    orden.Id_estado_orden_de_compra = 2;
                }
                if (CountChecked != RowCount)
                {
                    orden.Id_estado_orden_de_compra = 3;
                }
                if (CountChecked == 0)
                {
                    orden.Id_estado_orden_de_compra = 1;
                }


                List <MOrdenCompraDetalle> ordenDetalleInsercion = new List <MOrdenCompraDetalle>();
                for (int i = 0; i < gridViewDetalleSubOrden.DataRowCount; i++)
                {
                    MOrdenCompraDetalle ordenDet = new MOrdenCompraDetalle();
                    ordenDet.IdTienda          = Configuraciones.Configuraciones.idtienda;
                    ordenDet.IdSubOrdenDetalle = Convert.ToInt32(gridViewDetalleSubOrden.GetRowCellValue(i, "idsubordendetalle"));
                    ordenDet.Idproducto        = Convert.ToInt32(gridViewDetalleSubOrden.GetRowCellValue(i, "idproducto"));
                    ordenDet.Cantidad          = Convert.ToInt32(gridViewDetalleSubOrden.GetRowCellValue(i, "cantidad_autorizada"));
                    ordenDet.Verificado        = Convert.ToBoolean(gridViewDetalleSubOrden.GetRowCellValue(i, "verificado"));
                    ordenDetalleInsercion.Add(ordenDet);
                }

                List <MHistorialPreciosCostos> HistorialInsert = new List <MHistorialPreciosCostos>();
                for (int i = 0; i < gridViewDetalleSubOrden.DataRowCount; i++)
                {
                    if (Convert.ToBoolean(gridViewDetalleSubOrden.GetRowCellValue(i, "verificado")))
                    {
                        MHistorialPreciosCostos Historial = new MHistorialPreciosCostos();
                        Historial.IdTienda             = Configuraciones.Configuraciones.idtienda;
                        Historial.IdUsuarioCreacion    = Configuraciones.Configuraciones.idusuario;
                        Historial.IdOrigenMontoPrecios = 1;
                        Historial.IdSubOrden           = idsuborden;
                        Historial.IdProducto           = Convert.ToInt32(gridViewDetalleSubOrden.GetRowCellValue(i, "idproducto"));
                        Historial.Costo       = Convert.ToDecimal(gridViewDetalleSubOrden.GetRowCellValue(i, "ultimo_costo"));
                        Historial.PrecioVenta = Convert.ToDecimal(gridViewDetalleSubOrden.GetRowCellValue(i, "precioa"));
                        HistorialInsert.Add(Historial);
                    }
                }

                rpta = ControllerGenerarOrdenCompra.GenerarOrdenDeCompra(orden, ordenDetalleInsercion, HistorialInsert);

                if (rpta == "OK")
                {
                    //DOUCUMENTO GENERAL
                    MSalidaEnc salida = new MSalidaEnc();
                    salida.IdTienda  = Configuraciones.Configuraciones.idtienda;
                    salida.IdUsuario = Configuraciones.Configuraciones.idusuario;
                    salida.IdDocumentoDeInventrio = 1007;
                    salida.IdSerie         = 1;
                    salida.IdDestino       = 0;
                    salida.IdBodegaDestino = 0;
                    salida.Observaciones   = string.IsNullOrWhiteSpace(textObservaciones.Text) == true ? "" : textObservaciones.Text;
                    salida.Descripcion     = "PROOVEEDOR DESTINO: " + textProveedor.Text;
                    salida.Origen          = "TIENDA ORIGEN: " + Configuraciones.Configuraciones.tienda;
                    salida.Destino         = "PROVEEDOR DESTINO:" + textProveedor.Text;
                    salida.FechaDeIngreso  = Convert.ToDateTime(dateEditIngreosBodega.EditValue);
                    salida.Serie           = "A";
                    salida.SeraIngresado   = true;
                    salida.TipoSalida      = 3;
                    salida.IdSubTraslado   = 0;
                    salida.NumeroEnvio     = 0;
                    salida.Ingresado       = false;


                    List <MSalidaDetalle> DetalleInserccion = new List <MSalidaDetalle>();
                    for (int i = 0; i < gridViewDetalleSubOrden.DataRowCount; i++)
                    {
                        MSalidaDetalle SalidaDetalle = new MSalidaDetalle();
                        SalidaDetalle.IdTienda             = Configuraciones.Configuraciones.idtienda;
                        SalidaDetalle.IdSubTrasladoDetalle = 0;
                        SalidaDetalle.IdProducto           = Convert.ToInt32(gridViewDetalleSubOrden.GetRowCellValue(i, "idproducto"));
                        SalidaDetalle.Cantidad             = Convert.ToInt32(gridViewDetalleSubOrden.GetRowCellValue(i, "cantidad_autorizada"));
                        SalidaDetalle.IdExistenciaDetalle  = 0;
                        SalidaDetalle.IdBodega             = 0;
                        SalidaDetalle.EsVenta = 1; //es ventoa u otra salida
                        DetalleInserccion.Add(SalidaDetalle);
                    }
                    List <MSerieProducto> IngresoDetalleInsercionSeriesProducto = new List <MSerieProducto>();

                    rpta = ControllerSalidas.Salidas(salida, DetalleInserccion, IngresoDetalleInsercionSeriesProducto);

                    if (rpta == "OK")
                    {
                        FormImprimirOrdenCompra modalImprimir = new FormImprimirOrdenCompra();
                        modalImprimir.IdTienda = Configuraciones.Configuraciones.idtienda;
                        modalImprimir.IdOrden  = ControllerGenerarOrdenCompra.IdOrdenDeCompra;
                        modalImprimir.ShowDialog();
                        textProveedor.Text      = string.Empty;
                        textDestino.Text        = string.Empty;
                        textObservaciones.Text  = string.Empty;
                        textContactoRecibe.Text = string.Empty;
                        idsuborden = 0;
                        dtDetalleSubOrdenInsercion.Rows.Clear();

                        EsBotonOTecla = true;

                        this.Close();
                    }
                    else
                    {
                        XtraMessageBox.Show("Ocurrio un error al crear el traslado, profavor consulte a su administrador de datos " + rpta, "Error al crear traslado");
                    }
                }
                else
                {
                    XtraMessageBox.Show("Ocurrio un error al generar la orden, porfavor consulte a su administrador de datos: " + rpta, "Generando orden de compra");
                }
            }
        }
        void Save()
        {
            bool   recibido         = true;
            string rpta             = "";
            int    count_autorizado = 0;
            int    count_filas      = 0;

            count_filas = gridViewDetalleOrdenCompra.DataRowCount;

            if (gridViewDetalleOrdenCompra.DataRowCount == 0)
            {
                XtraMessageBox.Show("No hay detalle de productos agregados para verificar orden", "Verificando orden de compra", MessageBoxButtons.OK, MessageBoxIcon.Information);
                recibido = false;
            }

            for (int i = 0; i < gridViewDetalleOrdenCompra.DataRowCount; i++)
            {
                if (Convert.ToBoolean(gridViewDetalleOrdenCompra.GetRowCellValue(i, "autorizado")))
                {
                    CountChecked++;
                }
            }

            for (int i = 0; i < gridViewDetalleOrdenCompra.DataRowCount; i++)
            {
                if (Convert.ToBoolean(gridViewDetalleOrdenCompra.GetRowCellValue(i, "autorizado")))
                {
                    if (Convert.ToDecimal(gridViewDetalleOrdenCompra.GetRowCellValue(i, "nuevo_precio")) == 0)
                    {
                        XtraMessageBox.Show("El precio de venta debe ser mayor a 0", "Verificando orden de compra", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        recibido = false;
                        break;
                    }
                }
            }

            if (CountChecked == 0)
            {
                XtraMessageBox.Show("Debe seleccionar uno o mas productos para autorizar su ingreso", "Verificando orden de compra", MessageBoxButtons.OK, MessageBoxIcon.Information);
                recibido = false;
            }



            if (recibido)
            {
                int RowCount = 0;
                CountChecked = 0;

                MOrdenCompra orden = new MOrdenCompra();
                orden.IdTienda = Configuraciones.Configuraciones.idtienda;
                orden.IdGenorDenCompraEncabezado = idorden;


                RowCount = gridViewDetalleOrdenCompra.DataRowCount;
                for (int i = 0; i < RowCount; i++)
                {
                    if (Convert.ToBoolean(gridViewDetalleOrdenCompra.GetRowCellValue(i, "autorizado")))
                    {
                        CountChecked++;
                    }
                }

                if (CountChecked == RowCount)
                {
                    orden.Id_estado_orden_de_compra = 2;
                }
                if (CountChecked != RowCount)
                {
                    orden.Id_estado_orden_de_compra = 3;
                }
                if (CountChecked == 0)
                {
                    orden.Id_estado_orden_de_compra = id_estado_orden_de_compra;
                }

                List <MOrdenCompraDetalle> detalleInsercionPreciosCostos = new List <MOrdenCompraDetalle>();
                for (int i = 0; i < gridViewDetalleOrdenCompra.DataRowCount; i++)
                {
                    if (Convert.ToBoolean(gridViewDetalleOrdenCompra.GetRowCellValue(i, "autorizado")))
                    {
                        MOrdenCompraDetalle detalleOrden = new MOrdenCompraDetalle();
                        detalleOrden.Idproducto              = Convert.ToInt32(gridViewDetalleOrdenCompra.GetRowCellValue(i, "idproducto"));
                        detalleOrden.NuevoCosto              = Convert.ToDecimal(gridViewDetalleOrdenCompra.GetRowCellValue(i, "nuevo_costo"));
                        detalleOrden.NuevoPrecio             = Convert.ToDecimal(gridViewDetalleOrdenCompra.GetRowCellValue(i, "nuevo_precio"));
                        detalleOrden.Recibidos               = Convert.ToInt32(gridViewDetalleOrdenCompra.GetRowCellValue(i, "cantidad"));
                        detalleOrden.IdGenorDenCompraDetalle = Convert.ToInt32(gridViewDetalleOrdenCompra.GetRowCellValue(i, "idgenordencompradetalle"));
                        detalleOrden.IdTienda = Configuraciones.Configuraciones.idtienda;
                        detalleInsercionPreciosCostos.Add(detalleOrden);
                    }
                }

                List <MHistorialPreciosCostos> HistorialInsert = new List <MHistorialPreciosCostos>();
                for (int i = 0; i < gridViewDetalleOrdenCompra.DataRowCount; i++)
                {
                    if (Convert.ToBoolean(gridViewDetalleOrdenCompra.GetRowCellValue(i, "autorizado")))
                    {
                        MHistorialPreciosCostos Historial = new MHistorialPreciosCostos();
                        Historial.IdTienda             = Configuraciones.Configuraciones.idtienda;
                        Historial.IdUsuarioCreacion    = Configuraciones.Configuraciones.idusuario;
                        Historial.IdOrigenMontoPrecios = 3;
                        Historial.IdSubOrden           = Convert.ToInt32(gridViewDetalleOrdenCompra.GetRowCellValue(i, "idsuborden"));
                        Historial.IdProducto           = Convert.ToInt32(gridViewDetalleOrdenCompra.GetRowCellValue(i, "idproducto"));
                        Historial.Costo       = Convert.ToDecimal(gridViewDetalleOrdenCompra.GetRowCellValue(i, "nuevo_costo"));
                        Historial.PrecioVenta = Convert.ToDecimal(gridViewDetalleOrdenCompra.GetRowCellValue(i, "nuevo_precio"));
                        HistorialInsert.Add(Historial);
                    }
                }



                rpta = ControllerVerificacion.ActulizarDetalleOCPreciosCostos(orden, detalleInsercionPreciosCostos, HistorialInsert);

                if (rpta == "OK")
                {
                    XtraMessageBox.Show("El detalle de la orden se actualizo de forma correcta", "Verificando orden de compra", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    DataTable dt = new DataTable();
                    dt = ControllerVerificacion.MostrarDetalleOrdenCompra(idorden, Configuraciones.Configuraciones.idtienda);
                    if (dt.Rows.Count > 0)
                    {
                        txtProveedor.Text     = dt.Rows[0]["proveedor"].ToString();
                        txtObservaciones.Text = dt.Rows[0]["observaciones"].ToString();
                        txtQuienRecibe.Text   = dt.Rows[0]["quien_recibe_orden"].ToString();
                        txtCodigo.Text        = dt.Rows[0]["correlativo"].ToString();
                        txtEstado.Text        = dt.Rows[0]["estado_orden"].ToString();
                        idorden = Convert.ToInt32(dt.Rows[0]["idgenordencompraencabezado"]);

                        gridControlDetalleOrdenCompra.DataSource = dt;
                        gridControlDetalleOrdenCompra.ForceInitialize();
                        gridViewDetalleOrdenCompra.BestFitColumns();

                        if (txtEstado.Text.Equals("Completo"))
                        {
                            layoutControlItemBtnRecibido.Enabled = false;
                        }
                        else
                        {
                            layoutControlItemBtnRecibido.Enabled = true;
                        }
                    }
                    else
                    {
                        txtProveedor.Text     = string.Empty;
                        txtObservaciones.Text = string.Empty;
                        txtQuienRecibe.Text   = string.Empty;
                        txtCodigo.Text        = string.Empty;
                        txtEstado.Text        = string.Empty;
                        idorden = 0;

                        gridControlDetalleOrdenCompra.DataSource = dt;
                        gridControlDetalleOrdenCompra.ForceInitialize();
                        gridViewDetalleOrdenCompra.BestFitColumns();
                    }
                }
                else
                {
                    XtraMessageBox.Show("Ocurrio un error al actualizar el detalle, por favor consulte a su administrador de datos " + rpta, "Verificando orden de compra", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }