/// <summary>
            /// Efectua la cancelación de la orden de compra
            /// </summary>
            public void CancelarOrdenCompra()
            {
                Entities.OrdenesComprasCanceladas occ = new Entities.OrdenesComprasCanceladas();
                occ.Comentarios    = this.Comentarios;
                occ.Fecha          = DB.GetDate();
                occ.OrdenCompra_ID = this.OrdenCompra_ID;
                occ.Usuario_ID     = Sesion.Usuario_ID;
                occ.Create();

                Entities.OrdenesCompras oc = Entities.OrdenesCompras.Read(this.OrdenCompra_ID);
                oc.EstatusOrdenCompra_ID = 2;
                oc.Update();
            }
        private void RegistrarMovimiento()
        {
            DoValidate();

            int PorSurtir = 0;

            foreach (Entities.Vista_ComprasAlmacen vistaCompra in VistaCompras)
            {
                PorSurtir += vistaCompra.Entrada;
            }

            if (PorSurtir == 0)
            {
                AppHelper.ThrowException(
                    "La orden de compra {0} esta completamente surtida",
                    this.OrdenCompra.OrdenCompra_ID);
            }

            NotaAlmacen          = new Entities.NotasAlmacen();
            MovimientoInventario = new Entities.MovimientosInventario();

            //  Insertar Nota Almacen
            NotaAlmacen.Fecha          = DB.GetDate();
            NotaAlmacen.OrdenCompra_ID = OrdenCompra.OrdenCompra_ID;
            NotaAlmacen.TipoMovimientoInventario_ID = 2; // Compra
            NotaAlmacen.Usuario_ID  = Sesion.Usuario_ID;
            NotaAlmacen.Empresa_ID  = Sesion.Empresa_ID.Value;
            NotaAlmacen.Estacion_ID = Sesion.Estacion_ID.Value;
            NotaAlmacen.Factura     = FacturaTextBox.Text;
            NotaAlmacen.Create();

            //  Insertar Movimientos Inventario
            foreach (Entities.Vista_ComprasAlmacen compra in VistaCompras)
            {
                if (compra.Entrada > 0)
                {
                    MovimientoInventario.Cantidad       = compra.Entrada;
                    MovimientoInventario.CantidadPost   = MovimientoInventario.CantidadPrev + compra.Entrada;
                    MovimientoInventario.CostoUnitario  = compra.CostoUnitario;
                    MovimientoInventario.Fecha          = NotaAlmacen.Fecha;
                    MovimientoInventario.NotaAlmacen_ID = NotaAlmacen.NotaAlmacen_ID;
                    MovimientoInventario.OrdenCompra_ID = NotaAlmacen.OrdenCompra_ID;
                    MovimientoInventario.Refaccion_ID   = compra.Refaccion_ID;
                    MovimientoInventario.TipoMovimientoInventario_ID = NotaAlmacen.TipoMovimientoInventario_ID;
                    MovimientoInventario.Usuario_ID  = NotaAlmacen.Usuario_ID;
                    MovimientoInventario.Valor       = compra.Entrada * compra.CostoUnitario;
                    MovimientoInventario.Empresa_ID  = Sesion.Empresa_ID.Value;
                    MovimientoInventario.Estacion_ID = Sesion.Estacion_ID.Value;
                    MovimientoInventario.Calculate();
                    MovimientoInventario.Create();

                    //  Actualizar refaccion
                    MovimientoInventario.UpdateRefaccion(true);
                }
            }

            //  Actualizar compra y sacar totale de Orden de Compra
            decimal subtotal = 0;

            foreach (Entities.Vista_ComprasAlmacen vistaCompra in VistaCompras)
            {
                Entities.Compras compra = Entities.Compras.Read(vistaCompra.Compra_ID);
                if (vistaCompra.Entrada > 0)
                {
                    compra.RefaccionesSurtidas += vistaCompra.Entrada;
                    compra.CostoUnitario        = vistaCompra.CostoUnitario;
                    compra.Update();
                    subtotal += vistaCompra.CostoUnitario * compra.Cantidad;
                }
                else
                {
                    subtotal += compra.CostoUnitario * compra.Cantidad;
                }
            }

            // Actualizar Factura y Totales de Orden de Compra
            if (String.IsNullOrEmpty(OrdenCompra.Factura))
            {
                OrdenCompra.Factura = FacturaTextBox.Text.ToUpper().Trim();
            }
            else
            {
                OrdenCompra.Factura = OrdenCompra.Factura.Trim() + ", " + FacturaTextBox.Text.ToUpper().Trim();
            }
            OrdenCompra.Subtotal = subtotal;
            OrdenCompra.IVA      = OrdenCompra.Subtotal * (decimal)0.16;
            OrdenCompra.Total    = OrdenCompra.Subtotal + OrdenCompra.IVA;
            OrdenCompra.Update();
            OrdenCompra                 = null;
            this.label4.Visible         = false;
            this.FacturaTextBox.Visible = false;
        }