예제 #1
0
                public Lazaro.Impresion.Comprobantes.Fiscal.Respuesta ImprimirComprobante(int idComprob)
                {
                        try {
                                using (System.Diagnostics.Process Yo = System.Diagnostics.Process.GetCurrentProcess()) {
                                        Yo.PriorityClass = System.Diagnostics.ProcessPriorityClass.AboveNormal;
                                }
                        } catch {
                                // No siempre puedo elevar mi propia prioridad (creo que sólo en Windows XP o en Vista/7 sin UAC)
                        }

                        // *** Inicializar la impresora fiscal
                        Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res = this.Inicializar();

                        if (Res.Error != ErroresFiscales.Ok)
                                return Res;

                        NotificacionEventHandler NotifHandler = Notificacion;
                        if (NotifHandler != null)
                                NotifHandler(this, new ImpresoraEventArgs(ImpresoraEventArgs.EventTypes.InicioImpresion));

                        // *** Obtener datos previos
                        Lbl.Comprobantes.ComprobanteConArticulos Comprob = new Lbl.Comprobantes.ComprobanteConArticulos(DataBase, idComprob);

                        if (Comprob.Impreso)
                                return new Respuesta(ErroresFiscales.Ok);

                        string TipoDocumento = null;
                        string Letra = null;

                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        if (Comprob.Tipo.EsNotaDebito) {
                                                TipoDocumento = "D";
                                        } else if (Comprob.Tipo.EsNotaCredito) {
                                                TipoDocumento = "M";
                                        } else {
                                                TipoDocumento = "T";
                                        }
                                        break;
                                default:

                                        if (Comprob.Tipo.EsNotaDebito) {
                                                TipoDocumento = "D";
                                        } else if (Comprob.Tipo.EsNotaCredito) {
                                                TipoDocumento = "C";
                                        } else if (Comprob.Tipo.EsTicket) {
                                                TipoDocumento = "T";
                                        } else {
                                                TipoDocumento = "F";
                                        }
                                        break;
                        }

                        switch (Comprob.Tipo.Nomenclatura) {
                                case "FM":
                                case "NDM":
                                case "NCM":
                                        Letra = "M";
                                        break;
                                case "FA":
                                case "NDA":
                                        Letra = "A";
                                        break;
                                case "NCA":
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora)
                                                Letra = "R";
                                        else
                                                Letra = "A";
                                        break;

                                case "FB":
                                case "NDB":
                                        Letra = "B";
                                        break;
                                case "NCB":
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora)
                                                Letra = "S";
                                        else
                                                Letra = "B";
                                        break;

                                case "FC":
                                case "NDC":
                                        Letra = "C";
                                        break;
                                case "NCC":
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora)
                                                Letra = "S";
                                        else
                                                Letra = "C";
                                        break;

                                case "FE":
                                case "NDE":
                                case "NCE":
                                        Letra = "E";
                                        break;
                        }

                        string ClienteTipoDoc = "DNI";
                        string ClienteNumDoc = Comprob.Cliente.NumeroDocumento.Replace("-", "").Replace(".", "");

                        if (Comprob.Cliente.TipoDocumento != null) {
                                switch (Comprob.Cliente.TipoDocumento.Id) {
                                        case 1:
                                                ClienteTipoDoc = "DNI";
                                                break;
                                        case 2:
                                                ClienteTipoDoc = "LE";
                                                break;
                                        case 3:
                                                ClienteTipoDoc = "LC";
                                                break;
                                        case 4:
                                                ClienteTipoDoc = "CI";
                                                break;
                                        case 5:
                                                if (ClienteNumDoc.Length > 0)
                                                        ClienteTipoDoc = "CUIL";
                                                break;
                                        case 6:
                                                if (ClienteNumDoc.Length > 0)
                                                        ClienteTipoDoc = "CUIT";
                                                break;
                                        default:
                                                ClienteTipoDoc = "DNI";
                                                break;
                                }
                        }

                        if (Comprob.Cliente.SituacionTributaria != null) {
                                switch (Comprob.Cliente.SituacionTributaria.Id) {
                                        case 1:
                                                ClienteNumDoc = Comprob.Cliente.NumeroDocumento.Replace("-", "").Replace(" ", "").Replace(".", "");
                                                ClienteTipoDoc = "DNI";
                                                break;
                                        case 2:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                        case 3:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                        case 4:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                        case 5:
                                                ClienteTipoDoc = "CUIT";
                                                ClienteNumDoc = Comprob.Cliente.ClaveTributaria.ToString().Replace("-", "");
                                                break;
                                }
                        }

                        Comando ComandoAEnviar;

                        string TextoRemitoLinea1 = "";
                        string TextoRemitoLinea2 = "";

                        if (Comprob.IdRemito == 0) {
                                if (Comprob.Obs == null) {
                                        TextoRemitoLinea1 = "";
                                } else if (Comprob.Obs.Length > 40) {
                                        TextoRemitoLinea1 = Comprob.Obs.Substring(0, 40);
                                        int RestoObs = Comprob.Obs.Length - 40;
                                        if (RestoObs > 40)
                                                RestoObs = 40;
                                        TextoRemitoLinea2 = Comprob.Obs.Substring(40, RestoObs);
                                } else {
                                        TextoRemitoLinea1 = Comprob.Obs;
                                }
                        } else {
                                TextoRemitoLinea1 = "Remito(s) " + Comprob.IdRemito.ToString();
                        }

                        string Domicilio = Comprob.Cliente.Domicilio;
                        string ClienteLocalidad = "";
                        if (Comprob.Cliente.Localidad != null)
                                ClienteLocalidad = Comprob.Cliente.Localidad.ToString();

                        //si hay un documento abierto (fiscal, no fiscal o no fiscal homologado) lo cancelo
                        Res = ObtenerEstadoImpresora();
                        if (Res.EstadoFiscal.DocumentoAbierto) {
                                Res = CancelarDocumentoFiscal();
                                System.Threading.Thread.Sleep(500);
                        }
                        // *** Abrir Documento
                        if (NotifHandler != null)
                                NotifHandler(this, new ImpresoraEventArgs("Abrir documento fiscal"));

                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                case Lbl.Impresion.ModelosFiscales.Emulacion:
                                        string ClienteLinea1 = "";
                                        string ClienteLinea2 = "";

                                        if (Comprob.Cliente.ToString().Length > 40) {
                                                ClienteLinea1 = Comprob.Cliente.ToString().Substring(0, 40);
                                                ClienteLinea2 = Comprob.Cliente.ToString().Substring(40, Comprob.Cliente.ToString().Length - 40);
                                        } else {
                                                ClienteLinea1 = Comprob.Cliente.ToString();
                                                ClienteLinea2 = "";
                                        }

                                        if (Domicilio.Length > 40)
                                                Domicilio = Domicilio.Substring(0, 40);

                                        if (ClienteLocalidad.Length > 40)
                                                ClienteLocalidad = ClienteLocalidad.Substring(0, 40);

                                        string ClienteSituacionEpson = "";
                                        switch (Comprob.Cliente.SituacionTributaria.Id) {
                                                case 1:
                                                        ClienteSituacionEpson = "F";
                                                        break;
                                                case 2:
                                                        ClienteSituacionEpson = "I";
                                                        break;
                                                case 3:
                                                        ClienteSituacionEpson = "R";
                                                        break;
                                                case 4:
                                                        ClienteSituacionEpson = "M";
                                                        break;
                                                case 5:
                                                        ClienteSituacionEpson = "E";
                                                        break;
                                                default:
                                                        ClienteSituacionEpson = "S";
                                                        break;
                                        }
                                        if (Modelo == Lbl.Impresion.ModelosFiscales.EpsonTiquedora) {
                                                // La impresora epson TMU220 no acepta vacios por eso cambio por un punto.
                                                string Vacio=".";
                                                        if (TextoRemitoLinea1=="")
                                                        TextoRemitoLinea1 = ".";
                                                        if (TextoRemitoLinea2 == "")
                                                        TextoRemitoLinea2 = ".";
                                                
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalAbrir,
                                                         TipoDocumento,
                                                         "C",
                                                         Letra,
                                                         "1",
                                                         "P",
                                                         "10",
                                                         "I",
                                                        FiscalizarTexto(ClienteSituacionEpson),
                                                        FiscalizarTexto(ClienteLinea1),
                                                        FiscalizarTexto(ClienteLinea2),
                                                        FiscalizarTexto(ClienteTipoDoc),
                                                        FiscalizarTexto(ClienteNumDoc),
                                                        "N",
                                                        FiscalizarTexto(Domicilio),
                                                        FiscalizarTexto(ClienteLocalidad),
                                                        Vacio,
                                                        FiscalizarTexto(TextoRemitoLinea1),
                                                        FiscalizarTexto(TextoRemitoLinea2),
                                                        "C");
                                        } else {
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalAbrir,
                                                        TipoDocumento,
                                                        "C",
                                                        Letra,
                                                        "1",
                                                        "F",
                                                        "12",
                                                        "I",
                                                        FiscalizarTexto(ClienteSituacionEpson),
                                                        FiscalizarTexto(ClienteLinea1),
                                                        FiscalizarTexto(ClienteLinea2),
                                                        FiscalizarTexto(ClienteTipoDoc),
                                                        FiscalizarTexto(ClienteNumDoc),
                                                        "N",
                                                        FiscalizarTexto(Domicilio),
                                                        FiscalizarTexto(ClienteLocalidad),
                                                        "",
                                                        FiscalizarTexto(TextoRemitoLinea1),
                                                        FiscalizarTexto(TextoRemitoLinea2),
                                                        "C");
                                        }
                                                Res = Enviar(ComandoAEnviar);
                                        
                                        break;

                                case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                        if (Comprob.Cliente.Id != 999) {
                                                //Sólo envío comando SetCustomerData (HasarDocumentoSetDatosCliente)
                                                //si el cliente NO es consumidor final
                                                string ClienteSituacionHasar = "";
                                                switch (Comprob.Cliente.SituacionTributaria.Id) {
                                                        case 1:
                                                                ClienteSituacionHasar = "C";
                                                                break;
                                                        case 2:
                                                                ClienteSituacionHasar = "I";
                                                                break;
                                                        case 3:
                                                                // No existente en los modelos SMH/P- 715F, SMH/P-PR5F, SMH/P-441F y SMH/P-451F 
                                                                ClienteSituacionHasar = "N";
                                                                break;
                                                        case 4:
                                                                // No existente en el modelo SMH/P-PR4F
                                                                ClienteSituacionHasar = "M";
                                                                break;
                                                        case 5:
                                                                ClienteSituacionHasar = "E";
                                                                break;
                                                        case 6:
                                                                ClienteSituacionHasar = "A";
                                                                break;
                                                        case 7:
                                                                ClienteSituacionHasar = "T";
                                                                break;
                                                }

                                                string TipoDocumentoClienteHasar = " ";
                                                switch (ClienteTipoDoc) {
                                                        case "CUIT":
                                                                TipoDocumentoClienteHasar = "C";
                                                                break;
                                                        case "CUIL":
                                                                TipoDocumentoClienteHasar = "L";
                                                                break;
                                                        case "LE":
                                                                TipoDocumentoClienteHasar = "0";
                                                                break;
                                                        case "LC":
                                                                TipoDocumentoClienteHasar = "1";
                                                                break;
                                                        case "DNI":
                                                                TipoDocumentoClienteHasar = "2";
                                                                break;
                                                        case "PP":
                                                                TipoDocumentoClienteHasar = "3";
                                                                break;
                                                        case "CI":
                                                                TipoDocumentoClienteHasar = "4";
                                                                break;
                                                        default:
                                                                TipoDocumentoClienteHasar = " ";// Sin clasificador
                                                                break;
                                                }

                                                string NombreClienteHasar = Comprob.Cliente.ToString();
                                                // Comando  SetCustomerData (Manual Comandos Hasar)
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoSetDatosCliente,
                                                        FiscalizarTexto(NombreClienteHasar, 30),
                                                        ClienteNumDoc,
                                                        ClienteSituacionHasar,
                                                        TipoDocumentoClienteHasar,
                                                        FiscalizarTexto(Domicilio, 40));
                                                Res = Enviar(ComandoAEnviar);
                                        }

                                        //Abrir documento   

                                        string TipoDocumentoHasar = "B";
                                        if (TipoDocumento == "D" && Letra == "A")
                                                TipoDocumentoHasar = "D";	//ND A
                                        else if (TipoDocumento == "D")
                                                TipoDocumentoHasar = "E";	//ND B Y C
                                        else if (TipoDocumento == "F" && Letra == "A")
                                                TipoDocumentoHasar = "A";	//Fac A
                                        else if (TipoDocumento == "F")
                                                TipoDocumentoHasar = "B";	//Fac B y C
                                        else if (TipoDocumento == "T")
                                                TipoDocumentoHasar = "T";	//Ticket


                                        if (Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) {
                                                string NombreFantasiaHasar = Lbl.Sys.Config.Empresa.Nombre.ToUpper();
                                                int EspaciosParaCentrado = NombreFantasiaHasar.Length;
                                                int EspaciosAIncertar;
                                                Comando EstablecerTituloTiquet;
                                                if (NombreFantasiaHasar.Length <= 20) {
                                                        if (NombreFantasiaHasar.Length >= 19) {
                                                                // El caracter especial ô indica que la imprecion debe ser con doble ancho, en dicho caso La cantidad maxima de caracteres se reduce de 40 a 20 
                                                                EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia,
                                                                "2",
                                                                'ô' + NombreFantasiaHasar);
                                                                Res = Enviar(EstablecerTituloTiquet);
                                                        }
                                                        if (NombreFantasiaHasar.Length < 19) {
                                                                EspaciosParaCentrado = (20 - NombreFantasiaHasar.Length) / 2;
                                                                EspaciosAIncertar = NombreFantasiaHasar.Length + EspaciosParaCentrado;
                                                                NombreFantasiaHasar = NombreFantasiaHasar.PadLeft(EspaciosAIncertar, ' ');
                                                                // El caracter especial ô indica que la imprecion debe ser con doble ancho, en dicho caso La cantidad maxima de caracteres se reduce de 40 a 20 
                                                                EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia,
                                                                "2",
                                                                'ô' + NombreFantasiaHasar);
                                                                Res = Enviar(EstablecerTituloTiquet);
                                                        }


                                                } else {
                                                        EstablecerTituloTiquet = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalNombreFantasia,
                                                                        "2",
                                                                        NombreFantasiaHasar);
                                                        Res = Enviar(EstablecerTituloTiquet);

                                                }


                                                //N° de línea de encabezamiento (1-10) o cola (11-20)
                                                //0: borra encabezamiento y cola,  -1: borra encabezamiento,  -2: borra cola. 
                                                Comando EstablecerEncabezadoCola = new Comando(CodigosComandosFiscales.HasarDocumentoEstablecerEncabezadoCola,
                                                                "12",
                                                                "        Muchas gracias por su compra");
                                                Res = Enviar(EstablecerEncabezadoCola);
                                        }

                                        if (Letra == "S" || Letra == "R") {
                                                // Para notas de Crédito primero tengo que acentar los datos del comprobante original y luego abrir el documento 
                                                string ComprobanteOriginal = Comprob.ComprobanteOriginal.Nombre;
                                                string[] partes = ComprobanteOriginal.Split(new char[] { '-' });
                                                ComprobanteOriginal = partes[1];
                                                // El segundo parámetro corresponde al numero de línea donde se va a imprimir la información del comprobante original 
                                                // 0: Borra ambas líneas
                                                Comando ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCargarComprobanteOriginal, "1",
                                                          ComprobanteOriginal);
                                                Res = Enviar(ComandoEnviar);

                                                ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoNoFiscalHomologadoAbrir, Letra, "T"
                                                        );
                                                Res = Enviar(ComandoEnviar);


                                        } else {
                                                // El segundo parámetro corresponde al numero de línea donde se va a imprimir la información del comprobante original 
                                                // 0: Borra ambas líneas
                                                // Borro cualquier línea que haya quedado de una nota de crédito anterior 
                                                Comando ComandoEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCargarComprobanteOriginal, "0",
                                                          "1234");
                                                Res = Enviar(ComandoEnviar);
                                                // Comando OpenFiscalReceipt (Manual de comandos Hasar) 
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalAbrir,
                                                        TipoDocumentoHasar,
                                                        "T");
                                                Res = Enviar(ComandoAEnviar);
                                        }
                                        break;
                        }

                        if (Res.Error != ErroresFiscales.Ok) {
                                Res.Lugar = "DocumentoFiscalAbrir";
                                return Res;
                        }

                        // *** Imprimir Detalles
                        foreach (Lbl.Comprobantes.DetalleArticulo Detalle in Comprob.Articulos) {
                                string StrCodigo = Lfx.Workspace.Master.CurrentConfig.Productos.CodigoPredeterminado();

                                if (Detalle.Articulo != null) {
                                        if (StrCodigo == "id_articulo")
                                                StrCodigo = Detalle.Articulo.Id.ToString();
                                        else
                                                StrCodigo = DataBase.FieldString("SELECT " + StrCodigo + " FROM articulos WHERE id_articulo=" + Detalle.Articulo.Id.ToString());
                                }

                                if (StrCodigo.Length > 0)
                                        StrCodigo = "(" + StrCodigo + ") ";

                                decimal Cantidad = Detalle.Cantidad;
                                decimal Unitario = Detalle.UnitarioAImprimir;

                                //Si es cantidad negativa, pongo precio negativo y cantidad positiva
                                if (Cantidad < 0) {
                                        Cantidad = -Cantidad;
                                        Unitario = -Unitario;
                                }

                                string ItemNombre = Detalle.Nombre;
                                string ParametroSumaResta;
                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                                ParametroSumaResta = "M";
                                                if (Unitario < 0)
                                                        ParametroSumaResta = "R";
                                                
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalItem,
                                                        FiscalizarTexto(ItemNombre,18),
                                                        FormatearNumeroEpson(Cantidad, 3).PadLeft(8, '0'),
                                                        FormatearNumeroEpson(Math.Abs(Unitario), 2).PadLeft(9, '0'),
                                                        "0000",
                                                        ParametroSumaResta,
                                                        "00001",
                                                        "00000000",
                                                        "",
                                                        "",
                                                        "",
                                                        "0000",
                                                        "000000000000000");
                                                Res = Enviar(ComandoAEnviar);
                                                Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalSubtotal, "P", ""));
                                                break;
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ParametroSumaResta = "M";
                                                if (Unitario < 0)
                                                        ParametroSumaResta = "R";

                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalItem,
                                                        FiscalizarTexto(ItemNombre).PadRight(54).Substring(0, 54),
                                                        FormatearNumeroEpson(Cantidad, 3).PadLeft(8, '0'),
                                                        FormatearNumeroEpson(Math.Abs(Unitario), 2).PadLeft(9, '0'),
                                                        "0000",
                                                        ParametroSumaResta,
                                                        "00001",
                                                        "00000000",
                                                        "",
                                                        "",
                                                        "",
                                                        "0000",
                                                        "000000000000000");
                                                Res = Enviar(ComandoAEnviar);
                                                
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                if (Detalle.DatosSeguimiento != null && Detalle.DatosSeguimiento.Count > 0) {
                                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalTexto,
                                                                FiscalizarTexto(Detalle.DatosSeguimiento.ToString(), 50),
                                                                "0"
                                                                );
                                                        Res = Enviar(ComandoAEnviar);
                                                        if (Res.Error != ErroresFiscales.Ok) {
                                                                Res.Lugar = "DocumentoFiscalText";
                                                                return Res;
                                                        }
                                                }

                                                if (Unitario < 0) {
                                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral,
                                                                FiscalizarTexto(ItemNombre, 50),
                                                                FormatearNumeroHasar(Math.Abs(Unitario), 2),
                                                                "m",
                                                                "0",
                                                                "T");
                                                } else {
                                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalItem,
                                                                FiscalizarTexto(ItemNombre, 50),
                                                                FormatearNumeroHasar(Cantidad, 2),
                                                                FormatearNumeroHasar(Unitario, 2),
                                                                "0.0", /* IVA */
                                                                "M",
                                                                "0.0", /* Impuestos Interno s */
                                                                "0", /* Campo Display */
                                                                "B" /* Precio total o base */
                                                                );
                                                }
                                                Res = Enviar(ComandoAEnviar);
                                                break;
                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        Res.Lugar = "DocumentoFiscalItem";
                                        return Res;
                                }
                        }

                        // Calculo el total real, tomando en cuenta el redondeo y los decimales
                        if (Comprob.Descuento > 0) {
                                decimal MontoDescuento = Comprob.SubTotal * (Comprob.Descuento / 100);

                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                        "Descuento " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Descuento, 2) + "%",
                                                        FormatearNumeroEpson(MontoDescuento, 2).PadLeft(12, '0'),
                                                        "D");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral,
                                                        "Descuento " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Descuento, 2) + "%",
                                                        FormatearNumeroHasar(MontoDescuento, 2),
                                                        "m",
                                                        "0",
                                                        "T");
                                                Res = Enviar(ComandoAEnviar);
                                                break;
                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        Res.Lugar = "DocumentoFiscalPagosYDescuentos:Descuento";
                                        return Res;
                                }
                        }

                        if (Math.Abs(Comprob.TotalSinRedondeo - Comprob.Total) >= 0.001m) {
                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                        "Ajustes por Redondeo",
                                                        FormatearNumeroEpson((Comprob.Total - Comprob.TotalSinRedondeo), 2).PadLeft(12, '0'),
                                                        "D");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDescuentoGeneral,
                                                        "Ajustes por Redondeo",
                                                        FormatearNumeroHasar((Comprob.Total - Comprob.TotalSinRedondeo), 2),
                                                        "m",
                                                        "0",
                                                        "T");
                                                Res = Enviar(ComandoAEnviar);
                                                break;
                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        // Error, pero continúo
                                        // Res.Lugar = "DocumentoFiscalPagosYDescuentos:Redondeo"
                                        // If Not (OFormFiscalEstado Is Nothing) Then OFormFiscalEstado.Listo()
                                        // Return Res
                                }
                        }

                        //Recargos
                        if (Comprob.Recargo > 0) {
                                switch (Modelo) {
                                        case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                        case Lbl.Impresion.ModelosFiscales.Emulacion:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                        "Recargo " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Recargo, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesCosto) + "%",
                                                        FormatearNumeroEpson(Comprob.SubTotal * (Comprob.Recargo / 100), 2).PadLeft(12, '0'),
                                                        "R");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                        case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                        case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                                ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalDevolucionesYRecargos,
                                                        "Recargo " + Lfx.Types.Formatting.FormatCurrencyForPrint(Comprob.Recargo, Lfx.Workspace.Master.CurrentConfig.Moneda.DecimalesCosto) + "%",
                                                        FormatearNumeroHasar(Comprob.SubTotal * (Comprob.Recargo / 100), 2).PadLeft(10, '0'),
                                                        "M",
                                                        "00000000000",
                                                        "0",
                                                        "T",
                                                        "B");
                                                Res = Enviar(ComandoAEnviar);
                                                break;

                                }

                                if (Res.Error != ErroresFiscales.Ok) {
                                        Res.Lugar = "DocumentoFiscalPagosYDescuentos:Interes";
                                        return Res;
                                }
                        }

                        // Pago
                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                case Lbl.Impresion.ModelosFiscales.Emulacion:
                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalPagosYDescuentos,
                                                FiscalizarTexto(Comprob.FormaDePago.ToString(), 50),
                                                FormatearNumeroEpson(Comprob.Total, 2).PadLeft(12, '0'),
                                                "T");
                                        Res = Enviar(ComandoAEnviar);
                                        break;

                                case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                        ComandoAEnviar = new Comando(CodigosComandosFiscales.HasarDocumentoFiscalPago,
                                                FiscalizarTexto(Comprob.FormaDePago.ToString(), 50),
                                                FormatearNumeroHasar(Comprob.Total, 2),
                                                "T",
                                                "0");
                                        Res = Enviar(ComandoAEnviar);
                                        break;
                        }


                        if (Res.Error != ErroresFiscales.Ok) {
                                Res.Lugar = "DocumentoFiscalPagosYDescuentos:Pago";
                                return Res;
                        }

                        // *** Cerrar Documento
                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.EpsonTiquedora:
                                        Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalCerrar, TipoDocumento, Letra, ""));
                                        break;
                                case Lbl.Impresion.ModelosFiscales.EpsonGenerico:
                                case Lbl.Impresion.ModelosFiscales.Emulacion:
                                        Res = Enviar(new Comando(CodigosComandosFiscales.EpsonDocumentoFiscalCerrar, TipoDocumento, Letra, "Final"));
                                        break;

                                case Lbl.Impresion.ModelosFiscales.HasarTiquedora:
                                case Lbl.Impresion.ModelosFiscales.HasarGenerico:
                                        if (Letra == "S" || Letra == "R") {
                                                // Si es nota de credito cierro dicha nota 
                                                Res = Enviar(new Comando(CodigosComandosFiscales.HasarDocumentoNoFiscalHomologadoCerrar, "1", ""));
                                        } else {

                                                // Comando CloseFiscalReceipt (Manual de comandos hasar)
                                                Res = Enviar(new Comando(CodigosComandosFiscales.HasarDocumentoFiscalCerrar, "1"));

                                        }
                                        break;

                        }

                        if (Res.Error != ErroresFiscales.Ok) {
                                Res.Lugar = "DocumentoFiscalCerrar";
                                return Res;
                        } else {
                                if (NotifHandler != null)
                                        NotifHandler(this, new ImpresoraEventArgs("Asentando el movimiento"));

                                IDbTransaction Trans = null;
                                try {
                                        Trans = Comprob.Connection.BeginTransaction(IsolationLevel.Serializable);

                                        // Marco la factura como impresa y numerada
                                        Comprob.Numerar(Res.NumeroComprobante, true);

                                        // Mover stock si corresponde
                                        Comprob.MoverExistencias(false);

                                        // Asentar pagos si corresponde
                                        Comprob.AsentarPago(false);

                                        Trans.Commit();
                                } catch (Exception ex) {
                                        Res = new Respuesta(ErroresFiscales.Error);
                                        Res.Mensaje = ex.ToString();
                                        if (Trans != null)
                                                Trans.Rollback();
                                }

                                if (NotifHandler != null)
                                        NotifHandler(this, new ImpresoraEventArgs("Se imprimió el comprobante"));
                                return Res;
                        }
                }
예제 #2
0
 private void Log(Respuesta respuesta)
 {
         Log(respuesta.ToString());
 }
예제 #3
0
                public Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Inicializar()
                {
                        switch (Modelo) {
                                case Lbl.Impresion.ModelosFiscales.Emulacion:
                                        if (m_TextEmulacion == null) {
                                                m_TextEmulacion = new System.Text.StringBuilder("Emulación iniciada" + System.Environment.NewLine);
                                                NotificacionEventHandler NotifHandler = Notificacion;
                                                if (NotifHandler != null)
                                                        NotifHandler(this, new ImpresoraEventArgs(ImpresoraEventArgs.EventTypes.Inicializada));
                                        }
                                        break;
                                default:
                                        if (PuertoSerie.IsOpen == false) {
                                                PuertoSerie.ReadTimeout = 8000;
                                                PuertoSerie.WriteTimeout = 5000;
                                                PuertoSerie.DataBits = 8;
                                                PuertoSerie.StopBits = System.IO.Ports.StopBits.One;
                                                PuertoSerie.Parity = System.IO.Ports.Parity.None;
                                                PuertoSerie.Encoding = DefaultEncoding;
                                                SeqNum = FIRST_SEQ;

                                                if (Modelo != Lbl.Impresion.ModelosFiscales.HasarGenerico && Modelo != Lbl.Impresion.ModelosFiscales.HasarTiquedora) {
                                                        PuertoSerie.Handshake = System.IO.Ports.Handshake.XOnXOff;
                                                        PuertoSerie.RtsEnable = true;
                                                }

                                                try {
                                                        PuertoSerie.Open();
                                                } catch (Exception ex) {
                                                        Respuesta Res = new Respuesta(ErroresFiscales.Error);
                                                        Res.Lugar = "Fiscal.ConexionImpresora.Inicializar()";
                                                        Res.Mensaje = ex.ToString();
                                                        return Res;
                                                }

                                                PuertoSerie.PinChanged += new System.IO.Ports.SerialPinChangedEventHandler(Impresora_PinChanged);
                                                PuertoSerie.ErrorReceived += new System.IO.Ports.SerialErrorReceivedEventHandler(Impresora_ErrorReceived);

                                                if (Modelo == Lbl.Impresion.ModelosFiscales.HasarGenerico || Modelo == Lbl.Impresion.ModelosFiscales.HasarTiquedora) {
                                                        System.Threading.Thread.Sleep(100);
                                                        //Configuración inicial Hasar
                                                        Lazaro.Impresion.Comprobantes.Fiscal.Respuesta Res = ObtenerEstadoImpresora();

                                                        if (Res.EstadoFiscal.DocumentoFiscalAbierto)
                                                                Res = CancelarDocumentoFiscal();
                                                        else if (Res.EstadoFiscal.DocumentoAbierto)
                                                                Res = CancelarDocumentoFiscal();

                                                }

                                                NotificacionEventHandler NotifHandler = Notificacion;
                                                if (NotifHandler != null)
                                                        NotifHandler(this, new ImpresoraEventArgs(ImpresoraEventArgs.EventTypes.Inicializada));
                                        }
                                        break;
                        }

                        return new Respuesta(ErroresFiscales.Ok);
                }
예제 #4
0
                private Lazaro.Impresion.Comprobantes.Fiscal.Respuesta EnviarAEmulacion(Comando comando)
                {
                        Respuesta Res = new Respuesta(ErroresFiscales.Ok);

                        Res.CodigoComando = comando.CodigoComando;
                        Res.Secuencia = comando.Secuencia;

                        Res.Campos = new List<string>();
                        Res.Campos.Add("0080");		//Estado Impresora
                        Res.Campos.Add("0600");		//Estado Fiscal

                        m_TextEmulacion.AppendLine("CMD " + comando.CodigoComando.ToString() + System.Environment.NewLine);

                        System.Threading.Thread.Sleep(200);

                        switch (comando.CodigoComando) {
                                case CodigosComandosFiscales.EpsonDocumentoFiscalCerrar:
                                        int LastComprob = Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting<int>("ServidorFiscal.UltimoComprobEmulacionPV" + this.PuntoDeVenta.Numero.ToString(), 0) + 1;
                                        Res.Campos.Add(LastComprob.ToString("00000000"));
                                        Lfx.Workspace.Master.CurrentConfig.WriteGlobalSetting("ServidorFiscal", "UltimoComprobEmulacionPV" + this.PuntoDeVenta.Numero.ToString(), LastComprob.ToString());
                                        System.Console.WriteLine(m_TextEmulacion.ToString());
                                        m_TextEmulacion = new System.Text.StringBuilder();
                                        break;
                        }

                        Log(Res);
                        return Res;
                }