Пример #1
0
        /*
         * Mandamos a imprimir los datos del parte
         */
        public async void Imprimir(Boolean imprimir)
        {
            try
            {
                lblLoadingText.Text = "Imprimiendo ticket...";

                RepositorySatApp BBDD = new RepositorySatApp();
                var empresa           = BBDD.Get <Generales>(1);
                var Nombre            = empresa.Empresa;
                var nif       = empresa.NIF;
                var direc     = empresa.Direccion;
                var telf      = empresa.Telefono1;
                var comercial = empresa.N_Comercial;

                //Obtenemos y guardamos en objetos la información que deseamos imprimir
                //Transformamos los datos en Bytes antes de enviarlos a la impresora

                var parte        = Variables.DatosParte;
                var masDatos     = BBDD.GetSat(parte.N_Parte);
                var masCliente   = BBDD.Get <Cliente>(masDatos.Cliente);
                var masProvincia = BBDD.GetProvincias(masCliente.Provincia);
                var lineasParte  = BBDD.GetAllLineasParte(Variables.DatosParte.N_Parte.ToString());

                //Obtiene nombre comercial. De momento cliente no la quiere
                var codempresa = BBDD.Get <Generales>(0);

                //Hay que traerse la tabla comercialcliente
                // string masComercial = BBDD.GetComercialCliente(codempresa.Codigo, parte.CodigoCliente);

                string masPersonal = BBDD.GetNombreTecnico(masDatos.Realizado_Por);


                //Esta es la copia buena 28/01/2020
                BBDD.CerrarConexion();

                // Convertimos los strings a bytes y los imprimimos
                byte[] negrita      = new byte[] { 0x1B, 0x21, 0x08 };
                byte[] normal       = new byte[] { 0x1B, 0x21, 0x00 };
                byte[] negritamedia = new byte[] { 0x1B, 0x21, 0x20 };

                byte[] N_Parte      = Encoding.ASCII.GetBytes("Numero Parte:       " + parte.N_Parte);
                byte[] Fecha        = Encoding.ASCII.GetBytes("Fecha aviso:        " + parte.Fecha.ToShortDateString());
                byte[] HoraAviso    = Encoding.ASCII.GetBytes("Hora aviso:         " + masDatos.Hora_Entrada.ToShortTimeString());
                byte[] FechaCerrado = Encoding.ASCII.GetBytes("Fecha realizado:    " + Convert.ToDateTime(masDatos.Fecha_Realizado.ToString()).ToShortDateString());
                var    horainicio   = masDatos.HoraInicioTarea.AddHours(1);
                var    horafin      = masDatos.HoraFinTarea.AddHours(1);


                byte[] Cliente      = Encoding.ASCII.GetBytes("Cliente:           " + parte.NombreCliente);
                byte[] nifCli       = Encoding.ASCII.GetBytes("DNI / NIF:          " + masCliente.NIF);
                byte[] Direccion    = Encoding.ASCII.GetBytes("Direccion:          " + parte.DireccionParte);
                byte[] Poblacion    = Encoding.ASCII.GetBytes("C.P / Poblacion:    " + masCliente.C_P);
                byte[] Provincia    = Encoding.ASCII.GetBytes("Provincia:          " + masProvincia.Provincia);
                byte[] nomcomercial = Encoding.ASCII.GetBytes("Tecnico:            " + masPersonal);

                byte[] Anomalia = Encoding.ASCII.GetBytes("Anomalia:\n " + parte.AnomaliaParte);
                //byte[] Telefono = Encoding.ASCII.GetBytes("Telefono: " + parte.TelefonoCliente);
                byte[] Solucion = Encoding.ASCII.GetBytes("Trabajo efectuado:\n " + parte.Solucion);
                // byte[] Observaciones = Encoding.ASCII.GetBytes("Observaciones adicionales:\n " + parte.Observaciones);
                byte[] Pago     = Encoding.ASCII.GetBytes("Forma de Pago: " + parte.FormaPago);
                byte[] Base     = Encoding.ASCII.GetBytes("          Base imponible:         " + parte.Base_Total.ToString("N2"));
                byte[] valorIva = Encoding.ASCII.GetBytes("          IVA:                    " + parte.Iva_Total.ToString("N2"));
                byte[] Total    = Encoding.ASCII.GetBytes("          Total:                  " + parte.Total.ToString("N2"));


                byte[] estrellitas         = Encoding.ASCII.GetBytes("===============================================\n");
                byte[] separacontinua      = Encoding.ASCII.GetBytes("_______________________________________________\n");
                byte[] separacion          = Encoding.ASCII.GetBytes("------------------------------------------------\n");
                byte[] separaverticalFirma = Encoding.ASCII.GetBytes("Firma Trabajador:     |   Firma Cliente:\n");
                byte[] separavertical      = Encoding.ASCII.GetBytes("                      | \n");
                byte[] salto    = Encoding.ASCII.GetBytes("\n");
                byte[] firma1   = Encoding.ASCII.GetBytes("Firma Trabajador:");
                byte[] firma2   = Encoding.ASCII.GetBytes("Firma Cliente:");
                byte[] ArtServ  = Encoding.ASCII.GetBytes("             Articulos y servicio:");
                byte[] Cabecera = Encoding.ASCII.GetBytes("Referencia   Precio   Cantidad   Importe    Iva\n");

                byte[] N_empresa        = Encoding.ASCII.GetBytes("          " + Nombre + "\n");
                byte[] dic_empresa      = Encoding.ASCII.GetBytes("          " + direc + "\n");
                byte[] telf_empresa     = Encoding.ASCII.GetBytes("               Telf: " + telf + "\n");
                byte[] nif_empresa      = Encoding.ASCII.GetBytes("               N.I.F: " + nif + "\n");
                byte[] Nombre_Comercial = Encoding.ASCII.GetBytes("       " + comercial);
                byte[] CabLineas        = Encoding.ASCII.GetBytes("                PARTE TRABAJO\n");
                byte[] Cabdesg          = Encoding.ASCII.GetBytes("        Desglose categorias impositivas\n");
                byte[] desglose         = Encoding.ASCII.GetBytes("            Base     Iva    Importe\n");
                byte[] valordesglose    = Encoding.ASCII.GetBytes("            " + parte.Base_Total + "      " + parte.TantoIva1 + "     " + parte.Iva_Total);
                byte[] CabTotales       = Encoding.ASCII.GetBytes("               Totales finales:\n");
                byte[] gracias          = Encoding.ASCII.GetBytes("    Le damos las gracias por su confianza\n");
                byte[] docvista         = Encoding.ASCII.GetBytes("Este documento solo es una vista preliminar y no reemplaza al documento de facturación\n");


                var servicios = await dispositivo.GetServicesAsync();


                foreach (var l in servicios)
                {
                    if (l.Name == "Unknown Service") //Obtiene el servicio del que depende la caracteristica que nos permite enviar datos a la impresora
                    {
                        var server         = l as IService;
                        var caracteristica = await server.GetCharacteristicsAsync();


                        foreach (var m in caracteristica)
                        {
                            if (m.Name == "Unknown characteristic") //Localiza la caracteristica que se usa para enviar datos a la impresora
                            {
                                var carac = m as ICharacteristic;

                                //Cabecera ticket
                                if (carac.CanWrite && imprimir)  // Este if comprueba si el proximo caracter es imprimible y si el booleano es true o false
                                {                                // SIN ESTE IF NO IMPRIME
                                    await carac.WriteAsync(negrita);

                                    await carac.WriteAsync(N_empresa);

                                    await carac.WriteAsync(dic_empresa);

                                    await carac.WriteAsync(telf_empresa);

                                    await carac.WriteAsync(nif_empresa);//fin cabecera ticket

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    //Datos parte
                                    await carac.WriteAsync(normal);

                                    await carac.WriteAsync(N_Parte);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Fecha);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(HoraAviso);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(FechaCerrado);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    //Datos cliente
                                    await carac.WriteAsync(Cliente);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(nifCli);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Direccion);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Poblacion);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Provincia);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(nomcomercial);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    //Incidencia
                                    await carac.WriteAsync(Anomalia);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Solucion);

                                    await carac.WriteAsync(salto);

                                    // await carac.WriteAsync(Observaciones);
                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    //Cabecera lineas tarea
                                    await carac.WriteAsync(estrellitas);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(CabLineas);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(ArtServ); //Articulos y servicios

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Cabecera); //Cabecera lineasSat

                                    await carac.WriteAsync(separacontinua);

                                    await carac.WriteAsync(salto);

                                    foreach (var h in lineasParte) //Lineas partesat
                                    {
                                        var    precio  = Math.Round(h.Precio, 2);
                                        var    importe = Math.Round(h.Importe, 2);
                                        byte[] desc    = Encoding.ASCII.GetBytes(h.Descripcion + "\n");
                                        byte[] refer   = Encoding.ASCII.GetBytes(" " + h.Referencia.ToString());
                                        byte[] espacio = Encoding.ASCII.GetBytes(" ");

                                        byte[] prec = Encoding.ASCII.GetBytes(precio.ToString("N2") + "       ");
                                        byte[] cant = Encoding.ASCII.GetBytes(h.Cantidad.ToString());
                                        byte[] imp  = Encoding.ASCII.GetBytes(importe.ToString("N2") + "        ");
                                        byte[] iva  = Encoding.ASCII.GetBytes(h.Iva.ToString() + "\n");
                                        await carac.WriteAsync(desc);

                                        if (CuentaDigito(h.Referencia) <= 2)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("     ");
                                            await carac.WriteAsync(refer);

                                            await carac.WriteAsync(espacio);
                                        }
                                        else
                                        {
                                            await carac.WriteAsync(refer);
                                        }

                                        if (CuentaDigito(precio) >= 5)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("  ");
                                        }
                                        else if (CuentaDigito(precio) == 4)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("   ");
                                        }
                                        else if (CuentaDigito(precio) == 3)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("    ");
                                        }
                                        else if (CuentaDigito(precio) == 2)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("     ");
                                        }
                                        else if (CuentaDigito(precio) == 1 || CuentaDigito(precio) == 0)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("      ");
                                        }
                                        await carac.WriteAsync(espacio);

                                        await carac.WriteAsync(prec);

                                        await carac.WriteAsync(cant);

                                        if (CuentaDigito(importe) >= 5)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("  ");
                                        }
                                        else if (CuentaDigito(importe) == 4)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("    ");
                                        }
                                        else if (CuentaDigito(importe) == 3)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("     ");
                                        }
                                        else if (CuentaDigito(importe) == 2)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("      ");
                                        }
                                        else if (CuentaDigito(importe) == 1 || CuentaDigito(importe) == 0)
                                        {
                                            espacio = Encoding.ASCII.GetBytes("       ");
                                        }
                                        await carac.WriteAsync(espacio);

                                        await carac.WriteAsync(imp);

                                        await carac.WriteAsync(iva);
                                    }

                                    //Desglose categorias impositivas
                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Cabdesg);

                                    await carac.WriteAsync(desglose);

                                    await carac.WriteAsync(separacontinua);

                                    await carac.WriteAsync(valordesglose);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    //Totales finales
                                    await carac.WriteAsync(CabTotales);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Base);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(valorIva);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(Total);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    //Firmas
                                    await carac.WriteAsync(separacontinua);

                                    await carac.WriteAsync(separaverticalFirma);

                                    await carac.WriteAsync(separavertical);

                                    await carac.WriteAsync(separavertical);

                                    await carac.WriteAsync(separavertical);

                                    await carac.WriteAsync(separavertical);

                                    await carac.WriteAsync(separavertical);

                                    await carac.WriteAsync(separavertical);

                                    await carac.WriteAsync(separacontinua);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(negritamedia);

                                    await carac.WriteAsync(Nombre_Comercial);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(normal);

                                    await carac.WriteAsync(gracias);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(docvista);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    await carac.WriteAsync(salto);

                                    var respuesta = await Application.Current.MainPage.DisplayAlert("Aviso", "Si desea una copia, pulse el botón de imprimir", "Ok", "Cancelar");

                                    if (respuesta == true)  // Si la respuesta es Cancelar, salimos del bucle
                                    {
                                        Imprimir(imprimir);
                                    }
                                    else
                                    {
                                        imprimir = false;
                                        popupLoadingView.IsVisible  = false;
                                        activityIndicator.IsRunning = false;
                                        btnImprimir.IsEnabled       = true;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }


                await adaptador.DisconnectDeviceAsync(dispositivo);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }