/* * 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); } }