Ejemplo n.º 1
0
        public static string Generar_Impresion_Cierre(DateTime fecha_c)
        {
            try
            {
                Dat_Cierre_Venta dat_cierre = new Dat_Cierre_Venta();
                Ent_Cierre_Venta get_cierre = dat_cierre.leer_data_cierre(fecha_c);
                if (get_cierre != null)
                {
                    string      _almacen       = "ALMACEN           :" + Ent_Global._pvt_nombre.ToString().PadLeft(21);
                    string      _maquina       = "SERIE DE IMPRESORA:" + Ent_Global._serie_imp.PadLeft(21);
                    string      _fecha         = "FECHA             :" + get_cierre.fecha_venta.ToString("dd-MM-yyyy").PadLeft(21);
                    string      _total_venta   = "TOTAL DE VENTA    :" + string.Format("{0:C2}", get_cierre.total_venta).PadLeft(21);
                    string      _fectivoletr   = "EFECTIVO           ";
                    string      _efectivo      = "EFECTIVO          :" + string.Format("{0:C2}", get_cierre.efectivo).PadLeft(21);
                    string      _vuelto        = "VUELTO            :" + string.Format("{0:C2}", get_cierre.vuelto).PadLeft(21);
                    string      _neto          = "TOTAL EFECTIVO    :" + string.Format("{0:C2}", get_cierre.total_efectivo).PadLeft(21);
                    string      _total_tarjeta = "TOTAL TARJETA     :" + string.Format("{0:C2}", get_cierre.total_tarjeta).PadLeft(21);
                    string      _netoefe       = "         NETO     :" + string.Format("{0:C2}", get_cierre.total_efectivo).PadLeft(21);
                    string      _fondocaja     = "Fondo de Caja  (+):" + string.Format("{0:C2}", get_cierre.inicio_caja).PadLeft(21);
                    string      _tcaja         = "TOTAL DE CAJA     :" + string.Format("{0:C2}", get_cierre.total_caja).PadLeft(21);
                    CrearTicket tk             = new CrearTicket();
                    tk.TextoCentro("CIERRE TOTAL DEL DIA");
                    tk.lineasIgual();
                    tk.TextoIzquierda(_almacen);
                    tk.TextoIzquierda(_maquina);
                    tk.TextoIzquierda(_fecha);
                    tk.lineasGuio();
                    tk.TextoCentro("RESUMEN DE VENTAS");
                    tk.TextoIzquierda(_total_venta);
                    tk.lineasGuio();
                    tk.TextoCentro("VENTAS POR TIPO DE PAGO");
                    //tk.TextoIzquierda(_fectivoletr);
                    tk.TextoIzquierda(_efectivo);
                    tk.TextoIzquierda(_vuelto);
                    tk.TextoDerecha("========");
                    tk.TextoIzquierda(_neto);
                    tk.TextoIzquierda("");
                    tk.TextoIzquierda(_total_tarjeta);
                    tk.lineasGuio();
                    tk.TextoCentro("ARQUEO DE CAJA");
                    tk.TextoIzquierda(_fectivoletr);
                    tk.TextoIzquierda(_netoefe);
                    tk.TextoIzquierda(_fondocaja);
                    tk.TextoDerecha("========");
                    tk.TextoIzquierda(_tcaja);
                    tk.lineasGuio();

                    if (get_cierre.banco_des.Length > 0)
                    {
                        //string _fondocaja = "Fondo de Caja  (+):" + string.Format("{0:C2}", get_cierre.inicio_caja).PadLeft(21);
                        string _banco       = "BANCO             :" + get_cierre.banco_des.PadLeft(21);
                        string _operacion   = "NRO. OPERACION    :" + get_cierre.nro_operacion.PadLeft(21);
                        string _monto_opera = "MONTO OPERACION   :" + string.Format("{0:C2}", get_cierre.monto_opera).PadLeft(21);
                        tk.TextoCentro("BANCO DE DEPOSITO");
                        tk.TextoIzquierda(_banco);
                        tk.TextoIzquierda(_operacion);
                        tk.TextoIzquierda(_monto_opera);
                        tk.lineasGuio();
                    }

                    tk.CortaTicket();
                    tk.ImprimirTicket(Ent_Global._impresora);


                    if (!CrearTicket._esta_imp)
                    {
                        return(null);
                    }
                }
                return("ok");
            }
            catch
            {
                return(null);
            }
        }
Ejemplo n.º 2
0
        public static string Generar_Impresion(string _tipo, string _numero_doc)
        {
            try
            {
                #region <IMPRESION DE FACTURAS Y BOLETAS>
                if (_tipo == "F" || _tipo == "B")
                {
                    DataSet ds = Dat_Venta.leer_venta_tk(_numero_doc);
                    if (ds != null)
                    {
                        DataTable dt = ds.Tables[0];

                        if (dt != null)
                        {
                            if (dt.Rows.Count > 0)
                            {
                                #region <VARIABLES DE EMPRESA TICKETS>

                                decimal _costo_envio = 0;
                                string  _OPG         = "";
                                if (Ent_Global._canal_venta == "BA")
                                {
                                    _costo_envio = Convert.ToDecimal(dt.Rows[0]["ven_costo_e"]);
                                    _OPG         = "N";
                                }
                                else
                                {
                                    _OPG = dt.Rows[0]["OPG"].ToString();
                                    if (_OPG == "2")
                                    {
                                        _OPG = "N";
                                    }
                                }


                                string _marca_emp        = dt.Rows[0]["Alm_Descripcion"].ToString();
                                string _direccion_emp    = dt.Rows[0]["Alm_Direccion"].ToString();
                                string _Telefono_emp     = dt.Rows[0]["Alm_Telefono"].ToString();
                                string _razon_social_emp = dt.Rows[0]["Emp_Razon"].ToString();
                                string _ruc_emp          = dt.Rows[0]["Emp_Ruc"].ToString();
                                String _nota             = dt.Rows[0]["nota"].ToString();
                                string _impresora        = dt.Rows[0]["impresora"].ToString();
                                #endregion
                                #region <VARIABLES DE IMPRESORA>
                                string _autoriacion_imp = "Autorizacion : " + dt.Rows[0]["Emp_Autorizacion"].ToString();
                                string _serie_imp       = "Impresora : " + dt.Rows[0]["serie_impresora"].ToString();

                                Decimal _monto_efe = Convert.ToDecimal(dt.Rows[0]["montoefe"]);
                                Decimal _monto_tar = Convert.ToDecimal(dt.Rows[0]["montotar"]);
                                Decimal _monto_vue = Convert.ToDecimal(dt.Rows[0]["montovuel"]);

                                #endregion
                                #region <TIPO DE DOCUMENTO>
                                string   _numero         = dt.Rows[0]["nrodoc"].ToString();
                                string   _tipo_numero    = ((_numero.Substring(0, 1).ToString() == "F") ? "FACTURA: " : "BOLETA: ") + _numero;
                                DateTime _fecha_doc      = Convert.ToDateTime(dt.Rows[0]["Ven_Fecha"]);
                                string   _fecha_doc_text = "Fecha : " + _fecha_doc.ToString("dd/MM/yyyy") + " , " + _fecha_doc.ToString("hh:mm tt");
                                decimal  _igv            = Convert.ToDecimal(dt.Rows[0]["Ven_Igv_Porc"].ToString());

                                decimal _percepcionp   = Convert.ToDecimal(dt.Rows[0]["Ven_PercepcionP"].ToString());
                                decimal _percepcionm   = Convert.ToDecimal(dt.Rows[0]["Ven_PercepcionM"].ToString());
                                string  _cod_hash      = dt.Rows[0]["cod_hash"].ToString();
                                String  _estadook      = dt.Rows[0]["EstadoOk"].ToString();
                                Decimal _monto_nc      = Convert.ToDecimal(dt.Rows[0]["monto_nc"].ToString());
                                string  _referencia_nc = dt.Rows[0]["referencia_nc"].ToString();
                                string  _ven_pst_ref   = "";
                                if (Ent_Global._canal_venta == "BA")
                                {
                                    _ven_pst_ref = dt.Rows[0]["ven_pst_ref"].ToString();
                                }

                                #endregion
                                #region <VARIABLES DE CLIENTES>
                                string _cliente_nom     = dt.Rows[0]["nombres"].ToString();
                                string _cliente_dni_ruc = dt.Rows[0]["Bas_Documento"].ToString();
                                #endregion
                                #region <FORMATO DE IMPRESION FACTURA O BOLETA>
                                CrearTicket tk = new CrearTicket();
                                tk.TextoCentro(_marca_emp);
                                tk.TextoCentro(_direccion_emp);
                                tk.TextoCentro("Telefono " + _Telefono_emp);
                                tk.TextoCentro(_razon_social_emp);
                                tk.TextoCentro(_ruc_emp);
                                tk.TextoIzquierda(_autoriacion_imp);
                                tk.TextoIzquierda(_serie_imp);
                                tk.TextoIzquierda(_tipo_numero);

                                if (Ent_Global._canal_venta == "BA")
                                {
                                    tk.TextoIzquierda("Ref.Pedido " + _ven_pst_ref);
                                }

                                tk.TextoIzquierda("");
                                tk.TextoCentro("DETALLE DE COMPRA");
                                tk.TextoIzquierda("");
                                tk.lineasGuio();
                                tk.TextoIzquierda("Cliente : ");
                                tk.TextoIzquierda(_cliente_nom);
                                tk.TextoIzquierda(((_numero.Substring(0, 1).ToString() == "F") ? "R.U.C : " : "DNI :  ") + _cliente_dni_ruc);
                                tk.TextoIzquierda(_fecha_doc_text);
                                tk.TextoIzquierda("");
                                tk.EncabezadoVenta("CODIGO  | DESCR.         | CNT | PRECIO ");
                                tk.lineasIgual();
                                //items del tickets
                                decimal dSubtotal = 0;
                                decimal descuento = 0;
                                for (Int32 i = 0; i < dt.Rows.Count; ++i)
                                {
                                    string  _iarticulo      = dt.Rows[i]["Art_Id"].ToString();
                                    string  _articulonombre = dt.Rows[i]["Art_Descripcion"].ToString();
                                    string  _des_largo      = TruncateAt(dt.Rows[i]["Art_Descripcion"].ToString().PadRight(40), 40);
                                    string  _talla          = dt.Rows[i]["Ven_Det_TalId"].ToString();
                                    decimal _cantidad       = Convert.ToInt32(dt.Rows[i]["Ven_Det_Cantidad"]);
                                    Decimal _articulo_total = Convert.ToDecimal(dt.Rows[i]["articulo_total"].ToString());
                                    decimal _comision       = Convert.ToDecimal(dt.Rows[i]["Ven_Det_ComisionM"].ToString());

                                    //string _codigo_descripcion = TruncateAt(_iarticulo.PadRight(10), 10) +
                                    //TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt(((_OPG == "1")?0: _articulo_total).ToString("#0.00").PadLeft(9), 9);

                                    string _codigo_descripcion = "";/* TruncateAt(_iarticulo.PadRight(10), 10) +
                                                                     * TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt(((_OPG == "1") ? 0 : _articulo_total).ToString("#0.00").PadLeft(9), 9);*/

                                    switch (_OPG)
                                    {
                                    /*muestra*/
                                    case "1":
                                    case "3":
                                        _codigo_descripcion = TruncateAt(_iarticulo.PadRight(10), 10) +
                                                              TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt((0).ToString("#0.00").PadLeft(9), 9);
                                        break;

                                    /*regalos*/
                                    case "2":
                                        _codigo_descripcion = TruncateAt(_iarticulo.PadRight(10), 10) +
                                                              TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt(((_OPG == "1") ? 0 : _articulo_total).ToString("#0.00").PadLeft(9), 9);
                                        break;

                                    /*ninguna*/
                                    case "N":
                                        _codigo_descripcion = TruncateAt(_iarticulo.PadRight(10), 10) +
                                                              TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt((_articulo_total).ToString("#0.00").PadLeft(9), 9);
                                        break;
                                    }
                                    tk.AgregarItems(_codigo_descripcion);
                                    tk.AgregarItems(_des_largo);
                                    dSubtotal += _articulo_total;
                                    descuento += _comision;
                                }

                                //dSubtotal += _costo_envio;
                                double mtoigv = 0;
                                if (Ent_Global._canal_venta == "BA")
                                {
                                    /*
                                     * decimal _igv_monto = Convert.ToDecimal(dt.Rows[0]["ven_igv"].ToString());
                                     * dSubtotal = Math.Round(dSubtotal, 2, MidpointRounding.AwayFromZero);
                                     * //mtoigv = Math.Round(((Double.Parse(dSubtotal.ToString()) - Convert.ToDouble(descuento)) + Convert.ToDouble(_costo_envio) ) * double.Parse(_igv.ToString()), 1, MidpointRounding.AwayFromZero);
                                     * mtoigv = Math.Round(Double.Parse(_igv_monto.ToString()), 2, MidpointRounding.AwayFromZero);
                                     */
                                    mtoigv = Math.Round((Double.Parse(dSubtotal.ToString()) - Convert.ToDouble(descuento)) * double.Parse(_igv.ToString()), 2, MidpointRounding.AwayFromZero);
                                }
                                else
                                {
                                    mtoigv = Math.Round((Double.Parse(dSubtotal.ToString()) - Convert.ToDouble(descuento)) * double.Parse(_igv.ToString()), 2, MidpointRounding.AwayFromZero);
                                }
                                Int32   porcigv    = Convert.ToInt32((_igv * 100));
                                decimal totalpagar = ((dSubtotal - descuento) + Convert.ToDecimal(mtoigv)) + _percepcionm;

                                tk.lineasGuio();

                                if (Ent_Global._canal_venta == "AQ")
                                {
                                    switch (_OPG)
                                    {
                                    case "1":
                                    case "3":
                                        tk.AgregarFooter("     " + TruncateAt("OP. GRATUITA".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                        dSubtotal = 0;
                                        tk.AgregarFooter("     " + TruncateAt("SUB-TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                        break;

                                    case "2":
                                        break;

                                    case "N":
                                        tk.AgregarFooter("     " + TruncateAt("SUB-TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                        break;
                                    }
                                }
                                else
                                {
                                    tk.AgregarFooter("     " + TruncateAt("SUB-TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                }


                                tk.AgregarFooter("     " + TruncateAt("DESCUENTO(-)".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(descuento.ToString("#0.00").PadLeft(14), 14));

                                //if (Ent_Global._canal_venta == "BA")
                                //{
                                //    tk.AgregarFooter("     " + TruncateAt("COST.ENVI(+)".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_costo_envio.ToString("#0.00").PadLeft(14), 14));
                                //}

                                tk.AgregarFooter("     " + TruncateAt("IGV " + porcigv + "%".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(mtoigv.ToString("#0.00").PadLeft(14), 14));
                                tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));

                                if (_estadook != "2")
                                {
                                    if (Ent_Global._canal_venta == "BA")
                                    {
                                        tk.AgregarFooter("     " + TruncateAt("TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt((((dSubtotal - descuento)) + Convert.ToDecimal(mtoigv)).ToString("#0.00").PadLeft(14), 14));
                                    }
                                    else
                                    {
                                        tk.AgregarFooter("     " + TruncateAt("TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(((dSubtotal - descuento) + Convert.ToDecimal(mtoigv)).ToString("#0.00").PadLeft(14), 14));
                                    }
                                }

                                if (_estadook == "1")
                                {
                                    tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("PERCEPCION " + _percepcionp + "%".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_percepcionm.ToString("#0.00").PadLeft(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("TOTAL A PAGAR".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(totalpagar.ToString("#0.00").PadLeft(14), 14));
                                }

                                if (_estadook == "2")
                                {
                                    Decimal _var_sb = Convert.ToDecimal(((dSubtotal - descuento) + Convert.ToDecimal(mtoigv)));

                                    if (_var_sb < _monto_nc)
                                    {
                                        _monto_nc = _var_sb;
                                    }
                                    decimal _total_nc = _var_sb - _monto_nc;

                                    decimal _total_pagar_nc = (_var_sb - _monto_nc) + Convert.ToDecimal(_percepcionm);

                                    tk.AgregarFooter("     " + TruncateAt("DESC NC  (-)".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_monto_nc.ToString("#0.00").PadLeft(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_total_nc.ToString("#0.00").PadLeft(14), 14));
                                    if (_total_nc != 0)
                                    {
                                        if (Ent_Global._canal_venta != "BA")
                                        {
                                            tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                            tk.AgregarFooter("     " + TruncateAt("PERCEPCION " + _percepcionp + "%".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_percepcionm.ToString("#0.00").PadLeft(14), 14));
                                            tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                            tk.AgregarFooter("     " + TruncateAt("TOTAL A PAGAR".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_total_pagar_nc.ToString("#0.00").PadLeft(14), 14));
                                        }
                                    }
                                    tk.lineasGuio();
                                    tk.TextoIzquierda(_referencia_nc);
                                }

                                #region <REGION DE VENTAS DIRECTA CON PAGO>
                                if (Ent_Global._pvt_almaid != "11")
                                {
                                    tk.lineasGuio();
                                    tk.AgregarFooter(TruncateAt("EFECTIVO".ToString().PadRight(21), 21) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_monto_efe.ToString("#0.00").PadLeft(14), 14));
                                    /*VERIFICAR SI SE PAGA CON TARJETA*/
                                    if (ds.Tables.Count > 1)
                                    {
                                        DataTable dttarjeta = ds.Tables[1];
                                        if (dttarjeta != null)
                                        {
                                            if (dttarjeta.Rows.Count > 0)
                                            {
                                                tk.AgregarFooter(TruncateAt("TARJETA".ToString().PadRight(16), 16));
                                                for (Int32 i = 0; i < dttarjeta.Rows.Count; ++i)
                                                {
                                                    string  nom_tarjeta   = dttarjeta.Rows[i]["bin_des"].ToString();
                                                    string  num_tarjeta   = dttarjeta.Rows[i]["num_tar"].ToString();
                                                    Decimal monto_tarjeta = Convert.ToDecimal(dttarjeta.Rows[i]["monto_tar"]);
                                                    tk.AgregarFooter(TruncateAt(nom_tarjeta.ToString().PadRight(22), 22) + " " + TruncateAt(_monto_efe.ToString(num_tarjeta.ToString()).PadLeft(16), 16));
                                                    tk.AgregarFooter("                     " + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(monto_tarjeta.ToString("#0.00").PadLeft(14), 14));
                                                }
                                            }
                                        }
                                    }
                                    tk.AgregarFooter(TruncateAt("VUELTO".ToString().PadRight(21), 21) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_monto_vue.ToString("#0.00").PadLeft(14), 14));
                                }
                                #endregion

                                tk.lineasGuio();
                                tk.TextoCentro(_cod_hash);
                                tk.lineasGuio();

                                /*en esta linea ponemos el texto para ecommerce*/
                                if (Ent_Global._canal_venta == "BA")
                                {
                                    String _nota_tk = dt.Rows[0]["nota_tk"].ToString();
                                    tk.TextoIzquierda(_nota_tk);
                                    tk.lineasGuio();
                                }


                                tk.TextoIzquierda(_nota);
                                tk.lineasGuio();
                                tk.TextoCentro("*** GRACIAS POR SU COMPRA ***");
                                tk.lineasGuio();
                                tk.ImprimirTicket(_impresora);

                                #region <EN ESTE CASO CAPTURAMOS EL FORMATO DE TXT SUNAT PARA EL QR>
                                DataTable dtformato = ds.Tables[2];

                                string _formato_doc = "";

                                if (dtformato != null)
                                {
                                    if (dtformato.Rows.Count > 0)
                                    {
                                        _formato_doc = dtformato.Rows[0]["formatsunat"].ToString();
                                    }
                                }

                                #endregion

                                Fe_Sunat_Qr fesunat_qr = new Fe_Sunat_Qr();
                                byte[]      codigo_qr  = fesunat_qr.GetQrSunatInvoiceCdp(_formato_doc);

                                Image  im  = byteArrayToImage(codigo_qr);
                                Bitmap bmp = new Bitmap(im, new Size(100, 100));
                                tk.HeaderImage = bmp;
                                tk.PrintQR(_impresora);

                                if (!CrearTicket._esta_imp)
                                {
                                    return(null);
                                }
                                #endregion
                            }
                        }
                    }
                }
                #endregion

                #region <IMPRESION DE NOTA DE CREDITO>
                if (_tipo == "N")
                {
                    DataSet ds = Dat_NotaCredito.leer_NC_tk(_numero_doc);
                    if (ds != null)
                    {
                        DataTable dt = ds.Tables[0];

                        if (dt != null)
                        {
                            if (dt.Rows.Count > 0)
                            {
                                #region <VARIABLES DE EMPRESA TICKETS>

                                string _OPG = "";
                                if (Ent_Global._canal_venta == "AQ")
                                {
                                    _OPG = dt.Rows[0]["OPG"].ToString();

                                    if (_OPG == "2")
                                    {
                                        _OPG = "N";
                                    }
                                }
                                else
                                {
                                    _OPG = "N";
                                }

                                string _marca_emp        = dt.Rows[0]["Alm_Descripcion"].ToString();
                                string _direccion_emp    = dt.Rows[0]["Alm_Direccion"].ToString();
                                string _Telefono_emp     = dt.Rows[0]["Alm_Telefono"].ToString();
                                string _razon_social_emp = dt.Rows[0]["Emp_Razon"].ToString();
                                string _ruc_emp          = dt.Rows[0]["Emp_Ruc"].ToString();
                                String _nota             = dt.Rows[0]["nota"].ToString();
                                string _impresora        = dt.Rows[0]["impresora"].ToString();
                                #endregion
                                #region <VARIABLES DE IMPRESORA>
                                string _autoriacion_imp = "Autorizacion : " + dt.Rows[0]["Emp_Autorizacion"].ToString();
                                string _serie_imp       = "Impresora : " + dt.Rows[0]["serie_impresora"].ToString();
                                #endregion
                                #region <TIPO DE DOCUMENTO>
                                string   _numero         = dt.Rows[0]["nrodoc"].ToString();
                                string   _tipo_numero    = "NOTA DE CREDITO: " + _numero;
                                DateTime _fecha_doc      = Convert.ToDateTime(dt.Rows[0]["Not_Fecha"]);
                                string   _fecha_doc_text = "Fecha : " + _fecha_doc.ToString("dd/MM/yyyy") + " , " + _fecha_doc.ToString("hh:mm tt");
                                decimal  _igv            = Convert.ToDecimal(dt.Rows[0]["Ven_Igv_Porc"].ToString());
                                //decimal _percepcionp = Convert.ToDecimal(dt.Rows[0]["Ven_PercepcionP"].ToString());
                                //decimal _percepcionm = Convert.ToDecimal(dt.Rows[0]["Ven_PercepcionM"].ToString());
                                string _cod_hash = dt.Rows[0]["cod_hash"].ToString();
                                String _estadook = dt.Rows[0]["EstadoOk"].ToString();
                                //Decimal _monto_nc = Convert.ToDecimal(dt.Rows[0]["monto_nc"].ToString());
                                string _referencia_nc = dt.Rows[0]["referencia"].ToString();
                                #endregion
                                #region <VARIABLES DE CLIENTES>
                                string _cliente_nom     = dt.Rows[0]["nombres"].ToString();
                                string _cliente_dni_ruc = dt.Rows[0]["Bas_Documento"].ToString();
                                #endregion
                                #region <FORMATO DE IMPRESION FACTURA O BOLETA>
                                CrearTicket tk = new CrearTicket();
                                tk.TextoCentro(_marca_emp);
                                tk.TextoCentro(_direccion_emp);
                                tk.TextoCentro("Telefono " + _Telefono_emp);
                                tk.TextoCentro(_razon_social_emp);
                                tk.TextoCentro(_ruc_emp);
                                tk.TextoIzquierda(_autoriacion_imp);
                                tk.TextoIzquierda(_serie_imp);
                                tk.TextoIzquierda(_tipo_numero);
                                tk.TextoIzquierda("");
                                tk.TextoCentro("DETALLE DE COMPRA");
                                tk.TextoIzquierda("");
                                tk.lineasGuio();
                                tk.TextoIzquierda("Cliente : ");
                                tk.TextoIzquierda(_cliente_nom);
                                tk.TextoIzquierda(((_numero.Substring(0, 1).ToString() == "F") ? "R.U.C : " : "DNI :  ") + _cliente_dni_ruc);
                                tk.TextoIzquierda(_fecha_doc_text);
                                tk.TextoIzquierda("");
                                tk.EncabezadoVenta("CODIGO  | DESCR.         | CNT | PRECIO ");
                                tk.lineasIgual();
                                //items del tickets
                                decimal dSubtotal = 0;
                                decimal descuento = 0;
                                for (Int32 i = 0; i < dt.Rows.Count; ++i)
                                {
                                    string  _iarticulo          = dt.Rows[i]["Art_Id"].ToString();
                                    string  _articulonombre     = dt.Rows[i]["Art_Descripcion"].ToString();
                                    string  _des_largo          = TruncateAt(dt.Rows[i]["Art_Descripcion"].ToString().PadRight(40), 40);
                                    string  _talla              = dt.Rows[i]["Not_Det_TalId"].ToString();
                                    decimal _cantidad           = Convert.ToInt32(dt.Rows[i]["Not_Det_Cantidad"]);
                                    Decimal _articulo_total     = Convert.ToDecimal(dt.Rows[i]["articulo_total"].ToString());
                                    decimal _comision           = Convert.ToDecimal(dt.Rows[i]["Not_Det_ComisionM"].ToString());
                                    string  _codigo_descripcion = "";/* TruncateAt(_iarticulo.PadRight(10), 10) +
                                                                      * TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt(((_OPG == "1")?0:_articulo_total).ToString("#0.00").PadLeft(9), 9);*/

                                    switch (_OPG)
                                    {
                                    case "1":
                                        _codigo_descripcion = TruncateAt(_iarticulo.PadRight(10), 10) +
                                                              TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt((0).ToString("#0.00").PadLeft(9), 9);
                                        break;

                                    case "2":
                                        _codigo_descripcion = TruncateAt(_iarticulo.PadRight(10), 10) +
                                                              TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt(((_OPG == "1") ? 0 : _articulo_total).ToString("#0.00").PadLeft(9), 9);
                                        break;

                                    case "N":
                                        _codigo_descripcion = TruncateAt(_iarticulo.PadRight(10), 10) +
                                                              TruncateAt(_articulonombre.PadRight(9), 10) + TruncateAt(_talla.PadLeft(4), 4) + TruncateAt(_cantidad.ToString("#0").PadLeft(5), 5) + TruncateAt((_articulo_total).ToString("#0.00").PadLeft(9), 9);
                                        break;
                                    }

                                    tk.AgregarItems(_codigo_descripcion);
                                    tk.AgregarItems(_des_largo);
                                    dSubtotal += _articulo_total;
                                    descuento += _comision;
                                }

                                double mtoigv = 0;

                                mtoigv = Math.Round((Double.Parse(dSubtotal.ToString()) - Convert.ToDouble(descuento)) * double.Parse(_igv.ToString()), 2, MidpointRounding.AwayFromZero);

                                Int32   porcigv    = Convert.ToInt32((_igv * 100));
                                decimal totalpagar = ((dSubtotal - descuento) + Convert.ToDecimal(mtoigv));

                                tk.lineasGuio();

                                switch (_OPG)
                                {
                                case "1":
                                    tk.AgregarFooter("     " + TruncateAt("OP. GRATUITA".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("SUB-TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(0.ToString("#0.00").PadLeft(14), 14));
                                    break;

                                case "2":
                                    break;

                                case "N":
                                    tk.AgregarFooter("     " + TruncateAt("SUB-TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                    break;
                                }

                                //if (_OPG == "1")
                                //{
                                //    tk.AgregarFooter("     " + TruncateAt("OP. GRATUITA".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                //    tk.AgregarFooter("     " + TruncateAt("SUB-TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(0.ToString("#0.00").PadLeft(14), 14));
                                //}
                                //else
                                //{
                                //    tk.AgregarFooter("     " + TruncateAt("SUB-TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(dSubtotal.ToString("#0.00").PadLeft(14), 14));
                                //}
                                tk.AgregarFooter("     " + TruncateAt("DESCUENTO(-)".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(descuento.ToString("#0.00").PadLeft(14), 14));
                                tk.AgregarFooter("     " + TruncateAt("IGV " + porcigv + "%".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(mtoigv.ToString("#0.00").PadLeft(14), 14));
                                tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));

                                if (_estadook != "2")
                                {
                                    switch (_OPG)
                                    {
                                    case "1":
                                        tk.AgregarFooter("     " + TruncateAt("TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(0.ToString("#0.00").PadLeft(14), 14));
                                        break;

                                    case "2":
                                        break;

                                    case "N":
                                        tk.AgregarFooter("     " + TruncateAt("TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(((dSubtotal - descuento) + Convert.ToDecimal(mtoigv)).ToString("#0.00").PadLeft(14), 14));
                                        break;
                                    }
                                }

                                if (_estadook == "1")
                                {
                                    tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    //tk.AgregarFooter("     " + TruncateAt("PERCEPCION " + _percepcionp + "%".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_percepcionm.ToString("#0.00").PadLeft(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    tk.AgregarFooter("     " + TruncateAt("TOTAL A PAGAR".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(totalpagar.ToString("#0.00").PadLeft(14), 14));
                                }

                                if (_estadook == "2")
                                {
                                    Decimal _var_sb = Convert.ToDecimal(((dSubtotal - descuento) + Convert.ToDecimal(mtoigv)));

                                    //if (_var_sb < _monto_nc)
                                    //{
                                    //    _monto_nc = _var_sb;
                                    //}
                                    //decimal _total_nc = _var_sb - _monto_nc;

                                    //decimal _total_pagar_nc = (_var_sb - _monto_nc) ;

                                    //tk.AgregarFooter("     " + TruncateAt("DESC NC  (-)".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_monto_nc.ToString("#0.00").PadLeft(14), 14));
                                    //tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    //tk.AgregarFooter("     " + TruncateAt("TOTAL".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_total_nc.ToString("#0.00").PadLeft(14), 14));
                                    //if (_total_nc != 0)
                                    //{
                                    //    tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    //    //tk.AgregarFooter("     " + TruncateAt("PERCEPCION " + _percepcionp + "%".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_percepcionm.ToString("#0.00").PadLeft(14), 14));
                                    //    tk.AgregarFooter("     " + TruncateAt("------------".ToString().PadRight(14), 14));
                                    //    tk.AgregarFooter("     " + TruncateAt("TOTAL A PAGAR".ToString().PadRight(16), 16) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(_total_pagar_nc.ToString("#0.00").PadLeft(14), 14));
                                    //}
                                    //tk.lineasGuio();
                                    //tk.TextoIzquierda(_referencia_nc);
                                }

                                tk.lineasGuio();
                                tk.TextoIzquierda("FIRMA:");

                                switch (_OPG)
                                {
                                case "1":
                                    tk.AgregarFooter(TruncateAt("EFECTIVO:".ToString().PadRight(21), 21) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(0.ToString("#0.00").PadLeft(14), 14));
                                    break;

                                case "2":
                                    break;

                                case "N":
                                    tk.AgregarFooter(TruncateAt("EFECTIVO:".ToString().PadRight(21), 21) + TruncateAt("S/".ToString().PadRight(3), 3) + TruncateAt(((dSubtotal - descuento) + Convert.ToDecimal(mtoigv)).ToString("#0.00").PadLeft(14), 14));
                                    break;
                                }



                                tk.lineasGuio();
                                tk.TextoIzquierda("REFERENCIA DE N/C: " + _referencia_nc);
                                tk.lineasGuio();
                                tk.TextoCentro(_cod_hash);
                                tk.lineasGuio();
                                tk.TextoIzquierda(_nota);
                                tk.lineasGuio();
                                tk.TextoCentro("*** GRACIAS POR SU COMPRA ***");
                                tk.lineasGuio();
                                tk.ImprimirTicket(_impresora);

                                #region <EN ESTE CASO CAPTURAMOS EL FORMATO DE TXT SUNAT PARA EL QR>
                                DataTable dtformato = ds.Tables[1];

                                string _formato_doc = "";

                                if (dtformato != null)
                                {
                                    if (dtformato.Rows.Count > 0)
                                    {
                                        _formato_doc = dtformato.Rows[0]["formatsunat"].ToString();
                                    }
                                }
                                #endregion
                                Fe_Sunat_Qr fesunat_qr = new Fe_Sunat_Qr();
                                byte[]      codigo_qr  = fesunat_qr.GetQrSunatNoteCdp(_formato_doc);

                                Image  im  = byteArrayToImage(codigo_qr);
                                Bitmap bmp = new Bitmap(im, new Size(100, 100));
                                tk.HeaderImage = bmp;
                                tk.PrintQR(_impresora);

                                //byte[] codigo_qr = null;
                                //Image im = byteArrayToImage(codigo_qr);
                                //Bitmap bmp = new Bitmap(im, new Size(100, 100));
                                //tk.HeaderImage = bmp;
                                //tk.PrintQR(_impresora);

                                //tk.CortaTicket();
                                //tk.ImprimirTicket(_impresora);


                                if (!CrearTicket._esta_imp)
                                {
                                    return(null);
                                }
                                #endregion
                            }
                        }
                    }
                }
                #endregion
                return("ok");
            }
            catch (Exception ex)
            {
                return(null);
            }
        }