public static void ImprimirElementosTotales(XDocument doc, string filePath, MicrosCheckTotales totales, int i) { var document = _documento + "-" + i; var elementoTotales = new XElement("MNTNETO", totales.MntNeto.ToString("####")); doc.Element(_transaccion).Element(document).Element(_totales).Add(elementoTotales); elementoTotales = new XElement("TASAIVA", totales.TasaIva); doc.Element(_transaccion).Element(document).Element(_totales).Add(elementoTotales); elementoTotales = new XElement("IVA", totales.Iva.ToString("####")); doc.Element(_transaccion).Element(document).Element(_totales).Add(elementoTotales); elementoTotales = new XElement("MNTTOTAL", totales.MntTotal.ToString("####")); doc.Element(_transaccion).Element(document).Element(_totales).Add(elementoTotales); doc.Save(filePath); }
public List <MicrosCheck> ReadDb(Configuration configuration, int ultimoCheck, bool manual) { var list = new List <MicrosCheck>(); RsHeader = new OdbcCommand { CommandText = !manual ? $"{_queryEncabezado} > {ultimoCheck} {_orderByEncabezado}" : $"{_queryEncabezado} = {ultimoCheck} {_orderByEncabezado}", Connection = Connection }; RsDetail = new OdbcCommand { Connection = SubConnection }; var reader = RsHeader.ExecuteReader(); while (reader.Read()) { string str; switch (reader[2].ToString()) { case "1": str = "BO"; break; case "2": str = "FA"; break; case "3": str = "GD"; break; case "4": str = "NC"; break; default: str = "BO"; break; } var fechaHora = reader[3].ToString(); var fechaHoraSeparado = fechaHora.Split(' '); var fecha = fechaHoraSeparado[0].Replace('/', '.'); var hora = fechaHoraSeparado[1]; var doc = new IdDoc { Blart = str, Znumd = reader[0].ToString(), Zarri = "", Waers = "CLP", Bldat = $"{fecha}", Zhora = hora.Length > 7 ? hora.Substring(0, 8) : $"0{hora.Substring(0, 7)}", Budat = $"{fecha}", Bupla = configuration.CodigoBUPLA, Zsect = "", Tvorg = "", Mwskz = "C1", Vkont = "" }; var emisor = new Emisor { RutEmisor = configuration.RutEmisor, RznSocEmisor = configuration.RazonSocialEmisor, GiroEmisor = configuration.GiroEmisor.Length > 30 ? configuration.GiroEmisor.Substring(0, 30) : configuration.GiroEmisor, CdgSiiSucur = configuration.CodigoSiiSucursal.Length > 6 ? configuration.CodigoSiiSucursal.Substring(0, 6) : configuration.CodigoSiiSucursal, DirOrigen = configuration.DireccionOrigenEmisor.Length > 15 ? configuration.DireccionOrigenEmisor.Substring(0, 15) : configuration.DireccionOrigenEmisor, CmnaOrigen = configuration.ComunaOrigenEmisor, CiudadOrigen = configuration.CiudadOrigenEmisor }; var receptor = new Receptor { RutRecep = configuration.RutReceptor, RznSocRecep = configuration.RazonSocialReceptor, Contacto = configuration.ContactoReceptor, DirRecep = configuration.DireccionReceptor, CmnaRecep = configuration.ComunaReceptor, CiudadRecep = configuration.CiudadReceptor }; var encabezado = new MicrosCheckEncabezado { IdDoc = doc, Emisor = emisor, Receptor = receptor }; var totales = new MicrosCheckTotales(); try { totales = new MicrosCheckTotales { MntNeto = decimal.Parse(reader[4].ToString()) - decimal.Parse(reader[8].ToString()), TasaIva = 19M, Iva = decimal.Parse(reader[8].ToString()), MntTotal = decimal.Parse(reader[9].ToString()) }; } catch (Exception ex) { Logger.WriteLog($"Error al crear totales: {ex.Message}", _logFilePath); } var global = new MicrosCheckDscrcgGlobal { NroLinDr = 1, TpoMov = "D", GlosaDr = "DESCUENTO", TpoValor = "%", ValorDr = reader[5].ToString() }; var parametros = new MicrosCheckParametros { MontoEscrito = configuration.EnviaMontoEscrito == "1" ? NumToText.Convert(reader[9].ToString()) : string.Empty, Refer = string.Empty, Neto = string.Empty }; var listaDetalle = new List <MicrosCheckDetalle>(); OdbcDataReader subReader; try { RsDetail.CommandText = $"{_queryDetalle} {reader[0]}"; subReader = RsDetail.ExecuteReader(); } catch (Exception ex) { Logger.WriteLog(ex.InnerException != null ? $"Error al ejecutar reader de subquery: {ex.InnerException}" : $"Error al ejecutar reader de subquery: {ex.Message}", _logFilePath); throw; } var i = 1; while (subReader.Read()) { var num3 = int.Parse(subReader[3].ToString()); var str6 = "Categoria"; var str7 = "Subcategoria"; var str8 = "Segmento"; var str9 = "Codigo"; foreach (var mapeo in configuration.SnackRango) { if ((num3 >= mapeo.Desde) && (num3 <= mapeo.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Alimentacion"; str8 = "Snack"; str9 = "12474108"; } } foreach (var mapeo2 in configuration.BarRango) { if ((num3 >= mapeo2.Desde) && (num3 <= mapeo2.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Bebida"; str8 = "Bar"; str9 = "161724"; } } foreach (var mapeo3 in configuration.BuffetRango) { if ((num3 >= mapeo3.Desde) && (num3 <= mapeo3.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Alimentacion"; str8 = "Buffet"; str9 = "122131"; } } foreach (var mapeo4 in configuration.CafeteriaRango) { if ((num3 >= mapeo4.Desde) && (num3 <= mapeo4.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Bebida"; str8 = "Servicios de cafeteria"; str9 = "1673106"; } } foreach (var mapeo5 in configuration.CervezasRango) { if ((num3 >= mapeo5.Desde) && (num3 <= mapeo5.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Bebida"; str8 = "Cervezas"; str9 = "162841"; } } foreach (var mapeo6 in configuration.GaseosasRango) { if ((num3 >= mapeo6.Desde) && (num3 <= mapeo6.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Bebida"; str8 = "Gaseosas"; str9 = "164261"; } } foreach (var mapeo7 in configuration.JugosRango) { if ((num3 >= mapeo7.Desde) && (num3 <= mapeo7.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Bebida"; str8 = "Jugos"; str9 = "164971"; } } foreach (var mapeo8 in configuration.ReposteriaRango) { if ((num3 >= mapeo8.Desde) && (num3 <= mapeo8.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Alimentacion"; str8 = "Reposteria"; str9 = "126999"; } } foreach (var mapeo9 in configuration.ComidaRapidaRango) { if ((num3 >= mapeo9.Desde) && (num3 <= mapeo9.Hasta)) { str6 = "Alimentacion y comida"; str7 = "Alimentacion"; str8 = "Comida Rapida"; str9 = "123147"; } } //Logger.WriteLog(string.Format("Codigo terminal: {0}", configuration.CodigoTerminal), _logFilePath); var item = new CdgItem { ZCant = subReader[5].ToString(), ZCodp = str9, ZCate = str6, ZSubc = str7, ZSegm = str8, CodigoItemMicros = subReader[3].ToString(), ZSubs = subReader[4].ToString(), Betrw = Math.Round(double.Parse(subReader[6].ToString()) / 1.19, 0).ToString(), DescuentoMonto = decimal.Zero, Zimad = configuration.CodigoTerminal }; var detalle = new MicrosCheckDetalle { NroLinDet = i, CdgItem = item }; var itemRepetido = false; //En index almaceno el índice del ítem existente para luego aumentarle ZCANT var index = 0; foreach (var elementoDetalle in listaDetalle) { if (elementoDetalle.CdgItem.CodigoItemMicros == item.CodigoItemMicros) { itemRepetido = true; break; } index++; } if (!itemRepetido) { listaDetalle.Add(detalle); } else { listaDetalle[index].CdgItem.ZCant = (Convert.ToInt32(listaDetalle[index].CdgItem.ZCant) + 1).ToString(); } i++; } subReader.Close(); var check = new MicrosCheck { Encabezado = encabezado, Detalle = listaDetalle, DscrgGlobal = global, Parametros = parametros, Totales = totales }; list.Add(check); } reader.Close(); return(list); }