public Balanca ObterBalanca(int IDBalanca)
        {
            using Database conn = ConnectionString;
            QueryResult result = conn.Query("SELECT IdBalanza, Nombre, Dir_IP, BalanzaTradicional, DireccionLogica, PuertoEnvio_Tx FROM dat_balanza Where IdBalanza=" + IDBalanca + " Order by DireccionLogica");

            result.Read();

            Balanca res = new Balanca()
            {
                IdBalanca     = result["IdBalanza"],
                NomeBalanca   = result["Nombre"],
                Dir_IP        = result["Dir_IP"],
                DirecaoLogica = result["DireccionLogica"],
                PortaTX       = result.reader.IsDBNull(5) ? 0 : result["PuertoEnvio_Tx"],
                IDTipoBalanca = result["BalanzaTradicional"]
            };

            conn.Connection.Close();

            res.DefinirTipo();

            DateTime UltimaAtualizacaoSucesso = new DateTime();

            conn.Connection.Open();
            result = conn.Query("SELECT Fecha FROM sys_transacciones.dat_transacciones Where Dir_IPDestino='" + res.Dir_IP + "' AND Enviado = 1 ORDER BY Fecha DESC LIMIT 1;");
            result.Read();
            if (result.reader.HasRows)
            {
                DateTime.TryParse(result["Fecha"], out UltimaAtualizacaoSucesso);
            }
            conn.Connection.Close();

            res.TransacoesPendentesArtigos = ObterCount("SELECT COUNT(*) FROM sys_transacciones.dat_transacciones where Dir_IPDestino='" + res.Dir_IP + "' AND Enviado = 0 AND SentenciaInsert like '" + res.DirecaoLogica + res.RegistoArtigo + "%';");
            res.TransacoesPendentesOfertas = ObterCount("SELECT COUNT(*) FROM sys_transacciones.dat_transacciones where Dir_IPDestino='" + res.Dir_IP + "' AND Enviado = 0 AND SentenciaInsert like '" + res.DirecaoLogica + res.RegistoOferta + "%';");
            res.TransacoesPendentes        = ObterCount("SELECT COUNT(*) FROM sys_transacciones.dat_transacciones where Dir_IPDestino='" + res.Dir_IP + "' AND Enviado = 0;");
            res.TransacoesErro             = ObterCount("SELECT COUNT(*) FROM sys_transacciones.dat_transacciones where Dir_IPDestino='" + res.Dir_IP + "' AND NIntentos > 0 AND Enviado=0;");
            res.UltimaAtualizacaoSucesso   = UltimaAtualizacaoSucesso;
            res.DefinirEstado();

            return(res);
        }
        public List <Artigo> ObterListaArtigosBalanca(int IdBalanca, string Nome, string PLU)
        {
            List <Artigo> LstArtigos = new List <Artigo>();

            Balanca balanca = ObterBalanca(IdBalanca);

            if (Directory.Exists(ComunicacionesLogs))
            {
                DirectoryInfo info  = new DirectoryInfo(ComunicacionesLogs);
                FileInfo[]    files = info.GetFiles().OrderBy(p => p.CreationTime).ToArray();

                foreach (FileInfo file in files)
                {
                    if (!file.Name.Contains("commL"))
                    {
                        string[] linhas   = File.ReadAllLines(file.FullName);
                        bool     lerLinha = false;
                        foreach (var linha in linhas)
                        {
                            if (lerLinha && linha.Length == 177 && (linha.ToString().Substring(47, 4) == balanca.DirecaoLogica + balanca.RegistoArtigo) && (linha.ToString().Substring(53, 1) != "B"))
                            {
                                int.TryParse(linha.ToString().Substring(54, 6), out int IdArtigo);
                                double.TryParse(linha.ToString().Substring(135, 6) + "," + linha.ToString().Substring(141, 2), out double preco);
                                double.TryParse(linha.ToString().Substring(143, 6) + "," + linha.ToString().Substring(149, 2), out double precoPromocao);

                                string Data = linha.Substring(0, 10) + " " + linha.Substring(12, 8);
                                DateTime.TryParse(Data, out DateTime dataAtualizacao);

                                Artigo artigo = new Artigo
                                {
                                    IdArtigo          = IdArtigo,
                                    NomeArtigo        = linha.Substring(63, 48),
                                    UltimaAtualizacao = dataAtualizacao
                                };
                                if (precoPromocao == 0)
                                {
                                    artigo.Preco = preco;
                                }
                                else
                                {
                                    artigo.Preco = precoPromocao;
                                }

                                if (IdArtigo.ToString().Contains(PLU) && artigo.NomeArtigo.Contains(Nome, StringComparison.CurrentCultureIgnoreCase))
                                {
                                    int index = LstArtigos.IndexOf(LstArtigos.Where(a => a.IdArtigo == IdArtigo).FirstOrDefault());

                                    if (index >= 0)
                                    {
                                        LstArtigos[index] = artigo;
                                    }
                                    else
                                    {
                                        LstArtigos.Add(artigo);
                                    }
                                }
                            }

                            if (linha.ToString().Contains("Socket cliente abierto correctamente. IP Balanza:"))
                            {
                                lerLinha = (ObterIPString(linha.ToString()) == balanca.Dir_IP);
                            }
                        }
                    }
                }
            }

            return(LstArtigos.OrderByDescending(o => o.UltimaAtualizacao).ToList());
        }