/// <summary>
        /// Compara a estrutura nas duas listas
        /// </summary>
        /// <param name="pObjetosLista1"></param>
        /// <param name="pObjetosLista2"></param>
        /// <param name="pEstrutura"></param>
        /// <returns></returns>
        public EstruturaComparacao ComparaEstruturas(List <ObjetoComparacaoLista> pObjetosLista1, List <ObjetoComparacaoLista> pObjetosLista2, string pEstrutura)
        {
            EstruturaComparacao saida = new EstruturaComparacao();

            saida.NomeEstruturaSaida = FuncoesUteis.NomeEstruturaMaiusculo(pEstrutura);

            saida.PosicoesSomenteListaOriginal = pObjetosLista1.Where(x => !pObjetosLista2.Any(y => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, y.NumeracaoComMaterial))).Select(x => x.NumeracaoComMaterial).ToList();

            saida.PosicoesSomenteListaNova = pObjetosLista2.Where(x => !pObjetosLista1.Any(y => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, y.NumeracaoComMaterial))).Select(x => x.NumeracaoComMaterial).ToList();

            List <string> posicoesNasDuas = pObjetosLista1.Where(x => pObjetosLista2.Any(y => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, y.NumeracaoComMaterial))).Select(x => x.NumeracaoComMaterial).ToList();

            if (posicoesNasDuas.Count > 0)
            {
                foreach (string posicao in posicoesNasDuas)
                {
                    ObjetoComparacaoLista objetoLista1 = pObjetosLista1.FirstOrDefault(x => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, posicao));
                    ObjetoComparacaoLista objetoLista2 = pObjetosLista2.FirstOrDefault(x => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, posicao));

                    List <ErroPosicao> divergencias = objetoLista1.CompararComObjeto(objetoLista2);

                    if (divergencias.Count > 0)
                    {
                        saida.ListaPosicoesComErros.Add(new PosicaoComparacao(divergencias, posicao));
                    }
                }
            }

            return(saida);
        }
        /// <summary>
        /// Compara a estrutura nas duas listas
        /// </summary>
        /// <param name="pObjetosLista1"></param>
        /// <param name="pObjetosLista2"></param>
        /// <param name="pQualLista"></param>
        /// <returns></returns>
        public List <DivergenciaEntreEstruturaLista> ComparaEstruturasUmaLista(Dictionary <string, List <ObjetoComparacaoLista> > pEstruturasLista, string pQualLista)
        {
            List <DivergenciaEntreEstruturaLista> saida = new List <DivergenciaEntreEstruturaLista>();

            for (int i = 0; i < pEstruturasLista.Count; i++)
            {
                string nomeEstrutura = pEstruturasLista.Keys.ToList()[i];
                List <ObjetoComparacaoLista> estrutura1 = pEstruturasLista[nomeEstrutura];

                foreach (ObjetoComparacaoLista objetoEstrutura1 in estrutura1)
                {
                    DivergenciaEntreEstruturaLista jaEncontrouErro = saida.FirstOrDefault(x => x.Posicao.Equals(objetoEstrutura1.NumeracaoComMaterial));

                    if (jaEncontrouErro != null)
                    {
                        jaEncontrouErro.EstruturasQueContem.Add(nomeEstrutura);
                    }
                    else
                    {
                        for (int k = i + 1; k < pEstruturasLista.Count; k++)
                        {
                            string nomeEstrutura2 = pEstruturasLista.Keys.ToList()[k];
                            List <ObjetoComparacaoLista> estrutura2 = pEstruturasLista[nomeEstrutura2];

                            ObjetoComparacaoLista objetoEstrutura2 = estrutura2.FirstOrDefault(x => FuncoesUteis.ComparaPosicoes(x.NumeracaoComMaterial, objetoEstrutura1.NumeracaoComMaterial));

                            if (objetoEstrutura2 != null)
                            {
                                List <ErroPosicao> divergencias = objetoEstrutura1.CompararComObjeto(objetoEstrutura2);

                                if (divergencias.Count > 0)
                                {
                                    if (divergencias.Count == 1 && divergencias[0].TipoErroEnum.Equals(EnumErrosPosicao.Quantidade))
                                    {
                                        continue;
                                    }

                                    saida.Add(new DivergenciaEntreEstruturaLista(new List <string> {
                                        nomeEstrutura
                                    }, pQualLista, objetoEstrutura1.NumeracaoComMaterial));
                                }
                            }
                        }
                    }
                }
            }

            return(saida);
        }
Example #3
0
        /// <summary>
        /// A partir das listas de string que representam cada linha da lista de material em Excel, cria os objetosComparacaoLista para cada estrutura
        /// </summary>
        /// <param name="pListaLinhasListaMateriais"></param>
        /// <returns></returns>
        public static Dictionary <string, List <ObjetoComparacaoLista> > CriaObjetosComparacaoListaByTxt(List <string> pListaLinhasListaMateriais)
        {
            string estruturaVigenteLista = "";

            Dictionary <string, List <ObjetoComparacaoLista> > dicObjetosPorEstrutura = new Dictionary <string, List <ObjetoComparacaoLista> >();

            for (int i = 0; i < pListaLinhasListaMateriais.Count; i++)
            {
                string objetoLista = pListaLinhasListaMateriais[i];

                if (objetoLista.Count() < 2)
                {
                    continue;
                }

                if (VerificaLinhaTXTEstrutura(objetoLista))
                {
                    estruturaVigenteLista = objetoLista.Split(new string[] { " - " }, StringSplitOptions.RemoveEmptyEntries).Last();
                    continue;
                }

                ObjetoComparacaoLista objetoCriado = null;

                //CHAPA
                if (objetoLista.Substring(14, 24).Replace(" ", "").Contains("C"))
                {
                    objetoCriado = new ChapaComparacaoLista(objetoLista, estruturaVigenteLista);
                }
                //CANTONEIRA
                else
                {
                    objetoCriado = new CantoneiraComparacaoLista(objetoLista, estruturaVigenteLista);
                }

                if (!dicObjetosPorEstrutura.ContainsKey(estruturaVigenteLista))
                {
                    dicObjetosPorEstrutura.Add(estruturaVigenteLista, new List <ObjetoComparacaoLista>());
                }

                dicObjetosPorEstrutura[estruturaVigenteLista].Add(objetoCriado);
            }

            return(dicObjetosPorEstrutura);
        }
Example #4
0
        /// <summary>
        /// A partir das listas de string que representam cada linha da lista de material em Excel, cria os objetosComparacaoLista para cada estrutura
        /// </summary>
        /// <param name="pListaLinhasListaMateriais"></param>
        /// <returns></returns>
        public static Dictionary <string, List <ObjetoComparacaoLista> > CriaObjetosComparacaoListaByExcel(List <List <string> > pListaLinhasListaMateriais)
        {
            string estruturaVigenteLista = "";

            Dictionary <string, List <ObjetoComparacaoLista> > dicObjetosPorEstrutura = new Dictionary <string, List <ObjetoComparacaoLista> >();

            for (int i = 0; i < pListaLinhasListaMateriais.Count; i++)
            {
                List <string> objetoLista = pListaLinhasListaMateriais[i];

                if (i > 10 && pListaLinhasListaMateriais[i - 4][0].Equals("L I S T A   D E   M A T E R I A I S") && pListaLinhasListaMateriais[i + 1][0].Contains("Conj. Soldado"))
                {
                    estruturaVigenteLista = objetoLista[0];
                }

                bool eCalota = objetoLista[4].ToLower().Contains("calota") || (objetoLista[4].Contains("d") && objetoLista[4].Contains("r"));

                if (objetoLista.Count < 9 || string.IsNullOrEmpty(objetoLista[1]) || string.IsNullOrEmpty(objetoLista[4]) || (!eCalota && string.IsNullOrEmpty(objetoLista[6])) || string.IsNullOrEmpty(objetoLista[7]) || string.IsNullOrEmpty(objetoLista[8]))
                {
                    continue;
                }

                string posicao = objetoLista[1].ToString().Split(new string[] { ".0" }, StringSplitOptions.RemoveEmptyEntries).First().Split(new string[] { ",0" }, StringSplitOptions.RemoveEmptyEntries).First().Replace(" ", "");


                string posicaoSemMaterial = posicao.Last().Equals('H') || posicao.Last().Equals('G') || posicao.Last().Equals('h') || posicao.Last().Equals('g') ? posicao.Remove(posicao.Count() - 1) : posicao;

                //posicaoStringNumero so serve pra testar converter pra double no try e garantir que é uma linha de uma peça na lista
                string posicaoStringNumero = posicaoSemMaterial;
                if (Char.IsLetter(posicaoSemMaterial.Last()))
                {
                    posicaoStringNumero = posicaoStringNumero.Remove(posicaoStringNumero.Count() - 1);
                }
                if (Char.IsLetter(posicaoSemMaterial.First()))
                {
                    posicaoStringNumero = posicaoStringNumero.Remove(0, 1);
                }
                try
                {
                    System.Convert.ToDouble(posicaoStringNumero);
                }

                catch
                {
                    continue;
                }

                ObjetoComparacaoLista objetoCriado = null;

                //CHAPA
                if (objetoLista[4].Contains("C"))
                {
                    objetoCriado = new ChapaComparacaoLista(objetoLista, estruturaVigenteLista);
                }
                //CANTONEIRA
                else
                {
                    objetoCriado = new CantoneiraComparacaoLista(objetoLista, estruturaVigenteLista);
                }

                if (!dicObjetosPorEstrutura.ContainsKey(estruturaVigenteLista))
                {
                    dicObjetosPorEstrutura.Add(estruturaVigenteLista, new List <ObjetoComparacaoLista>());
                }

                dicObjetosPorEstrutura[estruturaVigenteLista].Add(objetoCriado);
            }

            return(dicObjetosPorEstrutura);
        }