private async void facturar()
        {
            var metroWindow = this;

            metroWindow.MetroDialogOptions.ColorScheme = MetroDialogOptions.ColorScheme;
            ProgressDialogController ProgressAlert = null;

            try
            {
                Int32 _valida = await valida_facturar();

                if (_valida == 1)
                {
                    return;
                }


                var mySettings = new MetroDialogSettings()
                {
                    AffirmativeButtonText = "Si",
                    NegativeButtonText    = "No",
                    //FirstAuxiliaryButtonText = "Cancelar",
                    ColorScheme = MetroDialogOptions.ColorScheme,
                };

                var okSettings = new MetroDialogSettings()
                {
                    AffirmativeButtonText = "Ok",
                    ColorScheme           = MetroDialogOptions.ColorScheme,
                };


                MessageDialogResult result = await this.ShowMessageAsync(Ent_Msg.msginfomacion, "¿Realmente desea FACTURAR este pedido ? " + _liq_id,
                                                                         MessageDialogStyle.AffirmativeAndNegative, mySettings);


                if (result == MessageDialogResult.Affirmative)
                {
                    string _error_venta = "";
                    //Mouse.OverrideCursor = Cursors.Wait;
                    ProgressAlert = await this.ShowProgressAsync(Ent_Msg.msgcargando, "Generando Facturación Electrónica del pedido N°:" + _liq_id);  //show message

                    ProgressAlert.SetIndeterminate();
                    string grabar_numerodoc = await Task.Run(() => Dat_Venta.insertar_venta(_liq_id, ref _error_venta));

                    //if (grabar_numerodoc == "0")
                    //{
                    //    //string _error = "";
                    //    lblmensaje.Content = "El número de pedido "+ _liq_id + " ya fue facturado posiblemente por tienda , actualice la bandeja de pedidos.";
                    //    return;

                    //}

                    //string grabar_numerodoc = Dat_Venta.insertar_venta(_liq_id);

                    if (grabar_numerodoc != "-1")
                    {
                        lblmensaje.Content = " > Factura generada con exito - Número : " + grabar_numerodoc + ".";
                        ///
                        deshabilita_controles();

                        //aca generamos el codigo hash
                        string _codigo_hash = "";
                        string _error       = "";
                        string _url_pdf     = "";

                        await Task.Run(() => Facturacion_Electronica.ejecutar_factura_electronica(Basico.Left(grabar_numerodoc, 1), grabar_numerodoc, ref _codigo_hash, ref _error, ref _url_pdf));

                        //await Task.Run(() => Facturacion_Electronica.ejecutar_factura_electronica_ws (Basico.Left(grabar_numerodoc, 1), grabar_numerodoc, ref _codigo_hash, ref _error,ref _url_pdf));

                        //*************


                        //****enviar los xml al server

                        if (_codigo_hash.Length == 0 || _codigo_hash == null)
                        {
                            await Task.Run(() => Facturacion_Electronica.ejecutar_factura_electronica(Basico.Left(grabar_numerodoc, 1), grabar_numerodoc, ref _codigo_hash, ref _error, ref _url_pdf));
                        }
                        if (_codigo_hash.Length == 0 || _codigo_hash == null)
                        {
                            _error = "GENERACION DE HASH";
                            await ProgressAlert.CloseAsync();

                            await metroWindow.ShowMessageAsync(Ent_Msg.msginfomacion, "ERROR EN LA GENERACION POR FAVOR CONSULTE CON SISTEMAS..==>> TIPO DE ERROR (" + _error + ")", MessageDialogStyle.Affirmative, metroWindow.MetroDialogOptions);

                            _error = "";
                            //MessageBox.Show("ERROR EN LA GENERACION POR FAVOR CONSULTE CON SISTEMAS..==>> TIPO DE ERROR (" + _error + ")", Ent_Msg.msginfomacion,MessageBoxButton.OK,MessageBoxImage.Error);
                            //return;
                        }

                        if (_error.Length > 0)
                        {
                            await ProgressAlert.CloseAsync();

                            await metroWindow.ShowMessageAsync(Ent_Msg.msginfomacion, "ERROR EN LA GENERACION POR FAVOR CONSULTE CON SISTEMAS..==>> TIPO DE ERROR (" + _error + ")", MessageDialogStyle.Affirmative, metroWindow.MetroDialogOptions);

                            //MessageBox.Show("ERROR EN LA GENERACION POR FAVOR CONSULTE CON SISTEMAS..==>> TIPO DE ERROR (" + _error + ")", Ent_Msg.msginfomacion,MessageBoxButton.OK,MessageBoxImage.Error);
                            return;
                        }

                        //await Task.Run(() => Basico._enviar_webservice_xml()); ==>>SE COMENTO PORQUE YA NO SE TRABAJA CON FACTURACION ELECTRONICA CARVAJAL
                        //EN ESTE PASO VAMOS A GRABAR EL CODIGO HASH
                        if (_codigo_hash.Length > 0)
                        {
                            await Task.Run(() => Dat_Venta.insertar_codigo_hash(grabar_numerodoc, _codigo_hash, "V", _url_pdf));
                        }
                        ///
                        //byte[] img_qr = null;
                        string _genera_tk = await Task.Run(() => Imprimir_Doc.Generar_Impresion("F", grabar_numerodoc) /*Impresora_Epson.Config_Imp.GenerarTicketFact(grabar_numerodoc, 1, _codigo_hash)*/);

                        /*IMPRESION DE ETIQUETAS*/
                        if (Ent_Global._canal_venta == "AQ")
                        {
                            GenerarEtiqueta genera_etiqueta = new GenerarEtiqueta();
                            await Task.Run(() => genera_etiqueta.aq_imp_etiqueta2(grabar_numerodoc));
                        }

                        #region <SOLO PARA E-CCOMMERCE>

                        if (Ent_Global._canal_venta == "BA")
                        {
                            string _cod_urbano = "";
                            //-----INICIO---SB-VTEX2020---20201222_12:57--
                            //await Task.Run(() => Basico.act_presta_urbano(grabar_numerodoc, ref _error, ref _cod_urbano));
                            await Task.Run(() => Basico.act_presta_urbano(grabar_numerodoc, "", ref _error, ref _cod_urbano));

                            //-----FIN---SB-VTEX2020---20201222_12:57--
                            //string mensaje_urb = (_cod_urbano.Trim().Length == 0) ? "" : "Se envío correctamente la solicitud a Urbano, Nro guía obtenida: " + _cod_urbano + "\n\n";
                            await ProgressAlert.CloseAsync();

                            string msj_eccomer = "";

                            /*si el codigo de urbano esta null entonces no va el mensaje*/
                            if (_cod_urbano.Trim().Length > 0)
                            {
                                msj_eccomer = "Se Genero correctamente la factura nro: " + grabar_numerodoc + "\n"
                                              + "Se envío correctamente la solicitud al Courier, Nro guía obtenida: " + _cod_urbano + "\n\n"
                                              + "¿Desea imprimir la etiqueta de este pedido? " + _liq_id;

                                MessageDialogResult resultetiq = await this.ShowMessageAsync(Ent_Msg.msginfomacion, msj_eccomer, MessageDialogStyle.AffirmativeAndNegative, mySettings);

                                if (resultetiq == MessageDialogResult.Affirmative)
                                {
                                    ProgressAlert = await this.ShowProgressAsync(Ent_Msg.msgcargando, "Generando Facturacion Electronica del pedido N°:" + _liq_id);  //show message

                                    ProgressAlert.SetIndeterminate();
                                    /*FALTA PONER LA VALIDACION DE LA ETIQUETA*/
                                    //resultetiq
                                    GenerarEtiqueta genera_etiqueta = new GenerarEtiqueta();
                                    //-----INICIO---SB-VTEX2020---20201222_12:57--
                                    //await Task.Run(() => genera_etiqueta.imp_etiqueta2(grabar_numerodoc));
                                    await Task.Run(() => genera_etiqueta.imp_etiqueta2(grabar_numerodoc, ""));

                                    //-----FIN---SB-VTEX2020---20201222_12:57--
                                }
                                else
                                {
                                    ProgressAlert = await this.ShowProgressAsync(Ent_Msg.msgcargando, "Generando Facturacion Electronica del pedido N°:" + _liq_id);  //show message

                                    ProgressAlert.SetIndeterminate();
                                }
                                // await ProgressAlert.CloseAsync();
                            }
                            else
                            {
                                msj_eccomer = "Se Genero correctamente la factura nro: " + grabar_numerodoc + "\n"
                                              + "No se pudo enviar la solicitud a Courier.\n\n";
                                MessageDialogResult resultetiq = await this.ShowMessageAsync(Ent_Msg.msginfomacion, msj_eccomer, MessageDialogStyle.Affirmative, okSettings);
                            }

                            //await metroWindow.ShowMessageAsync(Ent_Msg.msginfomacion, msj_eccomer, MessageDialogStyle.Affirmative, metroWindow.MetroDialogOptions);
                        }
                        #endregion

                        //string _genera_tk = Impresora_Epson.Config_Imp.GenerarTicketFact(grabar_numerodoc, 1, _codigo_hash);

                        if (_genera_tk == null)
                        {
                            lbltickets.Content = " >> Se producjo un error en la impresion del ticket";
                        }
                        else
                        {
                            lbltickets.Content = " > Ticket Generado con exito";
                        }
                        Reporte_Guia_Remision._idv_invoice = grabar_numerodoc;
                        Reporte_Guia_Remision form = new Reporte_Guia_Remision();
                        form.Show();

                        if (ProgressAlert.IsOpen)
                        {
                            await ProgressAlert.CloseAsync();
                        }
                    }
                    else
                    {
                        deshabilita_controles();
                        lblmensaje.Foreground = Brushes.Maroon;
                        ///
                        //lblmensaje.Content = " > Ha ocurrido un problema y no se ha podido generar la factura.";
                        lblmensaje.Content = _error_venta;
                        ///
                        await ProgressAlert.CloseAsync();

                        await metroWindow.ShowMessageAsync(Ent_Msg.msginfomacion, _error_venta, MessageDialogStyle.Affirmative, metroWindow.MetroDialogOptions);
                    }
                }
            }
            catch (Exception exc)
            {
                deshabilita_controles();
                lblmensaje.Foreground = Brushes.Maroon;
                ///
                lblmensaje.Content = exc.Message;
                ///
                if (ProgressAlert != null)
                {
                    await ProgressAlert.CloseAsync();
                }
                await metroWindow.ShowMessageAsync(Ent_Msg.msginfomacion, exc.Message, MessageDialogStyle.Affirmative, metroWindow.MetroDialogOptions);
            }
            //Mouse.OverrideCursor = null;
        }
        private async void btnreimprimir_Click(object sender, RoutedEventArgs e)
        {
            DataRowView row = (DataRowView)((Button)e.Source).DataContext;

            var mySettings = new MetroDialogSettings()
            {
                AffirmativeButtonText = "Si",
                NegativeButtonText    = "No",
                //FirstAuxiliaryButtonText = "Cancelar",
                ColorScheme = MetroDialogOptions.ColorScheme,
            };

            //string _tipo_r = (string)row["tipodoc"].ToString();// dg1.Rows[e.RowIndex].Cells["tipodoc"].Value.ToString();
            //string _numdoc_r = (string)row["numdoc"].ToString();// dg1.Rows[e.RowIndex].Cells["numdoc"].Value.ToString();
            //string _doc_r = (string)row["ven_id"].ToString();// dg1.Rows[e.RowIndex].Cells["ven_id"].Value.ToString();
            //string _cod_hash = (string)row["cod_hash"].ToString();// dg1.Rows[e.RowIndex].Cells["cod_hash"].Value.ToString();


            string  _codigo_hash = (string)row["Not_Cod_Hash"].ToString(); // dg1.Rows[e.RowIndex].Cells["Not_Cod_Hash"].Value.ToString(); ;
            decimal _not_id_imp  = Convert.ToDecimal(row["Not_Id"]);       // Convert.ToDecimal(dg1.Rows[e.RowIndex].Cells["Not_Id"].Value.ToString());
            string  _numdoc_r    = (string)row["numdoc"].ToString();       // dg1.Rows[e.RowIndex].Cells["numdoc"].Value.ToString(); ;


            MessageDialogResult result = await this.ShowMessageAsync(Ent_Msg.msginfomacion, "¿Realmente desea REIMPRIMIR el documento de tipo : Nota de Credito  con numero : " + _numdoc_r,
                                                                     MessageDialogStyle.AffirmativeAndNegative, mySettings);

            if (result == MessageDialogResult.Affirmative)
            {
                //Mouse.OverrideCursor = Cursors.Wait;
                #region <CODIGO QR FACTURACION ELECTRONICA>
                //string _error = "";
                //byte[] img_qr = null;
                var ProgressAlert = await this.ShowProgressAsync(Ent_Msg.msgcargando, "Imprimiendo Documento");  //show message

                //await Task.Run(() => Facturacion_Electronica.FE_QR("N", _not_id_imp.ToString(), ref img_qr, ref _error));
                #endregion
                //if (_error.Length == 0)
                //{
                ProgressAlert.SetIndeterminate();

                string tickets = await Task.Run(() => Imprimir_Doc.Generar_Impresion("N", _not_id_imp.ToString()) /*Config_Imp_NC.GenerarTicketNC(_not_id_imp.ToString(), 1, _codigo_hash)*/);

                //string tickets = Config_Imp_NC.GenerarTicketNC(_not_id_imp.ToString(), 1, _codigo_hash);
                await ProgressAlert.CloseAsync();

                if (tickets == null)
                {
                    await this.ShowMessageAsync(Ent_Msg.msginfomacion, " >> Se producjo un error en la impresión del ticket");

                    //MessageBox.Show(" >> Se producjo un error en la impresión del ticket", Ent_Msg.msginfomacion, MessageBoxButton.OK, MessageBoxImage.Error);
                    //Mouse.OverrideCursor = null;
                }
                //}
                //else
                //{
                //    await ProgressAlert.CloseAsync();
                //    await this.ShowMessageAsync(Ent_Msg.msginfomacion, _error);
                //}
            }
            //Mouse.OverrideCursor = null;
        }
        private async void btnreimprimir_Click(object sender, RoutedEventArgs e)
        {
            DataRowView row = (DataRowView)((Button)e.Source).DataContext;

            var mySettings = new MetroDialogSettings()
            {
                AffirmativeButtonText = "Si",
                NegativeButtonText    = "No",
                //DefaultText = "Si",
                //DefaultButtonFocus = MessageDialogResult.Negative;
                //FirstAuxiliaryButtonText = "Cancelar",
                ColorScheme = MetroDialogOptions.ColorScheme,
            };

            string _tipo_r   = (string)row["tipodoc"].ToString();  // dg1.Rows[e.RowIndex].Cells["tipodoc"].Value.ToString();
            string _numdoc_r = (string)row["numdoc"].ToString();   // dg1.Rows[e.RowIndex].Cells["numdoc"].Value.ToString();
            string _doc_r    = (string)row["ven_id"].ToString();   // dg1.Rows[e.RowIndex].Cells["ven_id"].Value.ToString();
            string _cod_hash = (string)row["cod_hash"].ToString(); // dg1.Rows[e.RowIndex].Cells["cod_hash"].Value.ToString();



            MessageDialogResult result = await this.ShowMessageAsync(Ent_Msg.msginfomacion, "¿Realmente desea REIMPRIMIR el documento de tipo : " + _tipo_r + " con numero : " + _numdoc_r,
                                                                     MessageDialogStyle.AffirmativeAndNegative, mySettings);

            if (result == MessageDialogResult.Affirmative)
            {
                #region <CODIGO QR FACTURACION ELECTRONICA>
                //string _error = "";
                //byte[] img_qr = null;
                var ProgressAlert = await this.ShowProgressAsync(Ent_Msg.msgcargando, "Imprimiendo Documento N°:" + _numdoc_r);

                //await Task.Run(() => Facturacion_Electronica.FE_QR("F", _doc_r.ToString(), ref img_qr, ref _error));
                #endregion
                //show message
                //if (_error.Length == 0)
                //{
                //Mouse.OverrideCursor = Cursors.Wait;

                ProgressAlert.SetIndeterminate();     //Infinite
                string tickets = await Task.Run(() => Imprimir_Doc.Generar_Impresion("B", _doc_r) /*Config_Imp.GenerarTicketFact(_doc_r, 1, _cod_hash)*/);

                //show info
                await ProgressAlert.CloseAsync();

                //await this.ShowMessageAsync("End", "Succes!");

                //string tickets = ""; //Config_Imp.GenerarTicketFact(_doc_r, 1, _cod_hash);

                if (tickets == null)
                {
                    await this.ShowMessageAsync(Ent_Msg.msginfomacion, " >> Se producjo un error en la impresión del ticket");

                    //MessageBox.Show(" >> Se producjo un error en la impresión del ticket", Ent_Msg.msginfomacion, MessageBoxButton.OK, MessageBoxImage.Error);
                    //Mouse.OverrideCursor = null;
                }
                //}
                //else
                //{
                //    await ProgressAlert.CloseAsync();
                //    await this.ShowMessageAsync(Ent_Msg.msginfomacion, _error);
                //}
            }
            #region <REGION DE EJEMPLO DE SINCRONIZACION ESPERA>

            //var ProgressAlert = await this.ShowProgressAsync("Please wait...", "Sync....");  //show message
            //ProgressAlert.SetIndeterminate(); //Infinite

            //try
            //{
            //    await Task.Run(() => MyMagicCode());

            //    //show info
            //    await ProgressAlert.CloseAsync();
            //    await this.ShowMessageAsync("End", "Succes!");
            //}
            //catch
            //{
            //    await ProgressAlert.CloseAsync();
            //    await this.ShowMessageAsync("Error!", "Contact with support");
            //}
            #endregion
            //Mouse.OverrideCursor = null;
        }