Esempio n. 1
0
        private bool verificaCodiceCollegamentoRicorsivo(Componente articolo, out string errori)
        {
            errori = string.Empty;
            StringBuilder sbErrori = new StringBuilder();

            bool esito = true;
            List <Componente> componentiFigli = Componenti.Where(x => x.IdPadre == articolo.IdComponente).ToList();

            componentiFigli.ForEach(x => x.CollegamentoDiBa = ExpCicloBusinessCentral.CodiceCollegamentoStandard);
            List <FaseCiclo> fasi = articolo.FasiCiclo.OrderBy(x => x.Operazione).ToList();

            if (!articolo.VerificaCodiciOperazione())
            {
                string msg = string.Format("Verificare i codici operazione per le fasi del componente {0}.", articolo.IdComponente);
                sbErrori.AppendLine(msg);
                esito          = false;
                fasi[0].Errore = msg;
            }

            foreach (FaseCiclo fase in fasi)
            {
                fase.Errore            = string.Empty;
                fase.CollegamentoCiclo = string.Empty;
                fase.CollegamentoDiBa  = string.Empty;
            }

            if (componentiFigli.Count > 0)
            {
                if (fasi.Count > 0)
                {
                    fasi[0].CollegamentoCiclo = ExpCicloBusinessCentral.CodiceCollegamentoStandard;
                    fasi[0].Errore            = string.Empty;
                    //if (!string.IsNullOrEmpty(fasi[0].Anagrafica))
                    //{
                    //    string msg = string.Format("La fase {0} dell'articolo {1} non dovrebbe avere alcuna anagrafica valorizzata. Verificare codice collegamento ciclo.", fasi[0].IdFaseCiclo, articolo.IdComponente);
                    //    sbErrori.AppendLine(msg);
                    //    esito = false;
                    //    fasi[0].Errore = msg;
                    //}
                }
                else
                {
                    string msg = string.Format("Il componente {0} ha dei componenti ma non ha alcuna fase in cui registrarne il consumo. Impossibile registrare il collegamento ciclo.", articolo.IdComponente);
                    sbErrori.AppendLine(msg);
                    esito = false;
                }
                foreach (Componente figlio in componentiFigli)
                {
                    errori = string.Empty;
                    bool verifica = verificaCodiceCollegamentoRicorsivo(figlio, out errori);
                    esito = esito && verifica;
                    sbErrori.AppendLine(errori.Trim());
                }
            }
            bool trovataAnagrafica = false;

            foreach (FaseCiclo fase in fasi)
            {
                if (trovataAnagrafica)
                {
                    fase.CollegamentoCiclo = ExpCicloBusinessCentral.CodiceCollegamentoStandard;
                    trovataAnagrafica      = false;
                }
                if (!string.IsNullOrEmpty(fase.Anagrafica))
                {
                    trovataAnagrafica     = true;
                    fase.CollegamentoDiBa = ExpCicloBusinessCentral.CodiceCollegamentoStandard;
                }
            }

            if (fasi.Count > 0 && !string.IsNullOrEmpty(fasi[fasi.Count - 1].Anagrafica))
            {
                string msg = string.Format("La fase {0} dell'articolo {1} non dovrebbe avere alcuna anagrafica valorizzata. Verificare codice collegamento ciclo e diba.", fasi[fasi.Count - 1].IdFaseCiclo, articolo.IdComponente);
                sbErrori.AppendLine(msg);
                esito = false;
                fasi[fasi.Count - 1].Errore = msg;
            }

            errori = sbErrori.ToString();
            return(esito);
        }
Esempio n. 2
0
        private bool creaListaEsportaRicorsiva(List <ExpDistintaBusinessCentral> distinteExport, List <ExpCicloBusinessCentral> cicliExport, Componente articolo, out string errori)
        {
            bool esito = true;

            errori = string.Empty;
            string errore = string.Empty;

            StringBuilder sb                    = new StringBuilder();
            string        codiceDistinta        = articolo.Anagrafica;
            ExpDistintaBusinessCentral distinta = new ExpDistintaBusinessCentral(codiceDistinta, articolo.Descrizione);
            ExpCicloBusinessCentral    ciclo    = new ExpCicloBusinessCentral(codiceDistinta);

            if (!articolo.VerificaCodiciOperazione())
            {
                string msg = string.Format("Il componente {0} ha dei componenti ma non ha alcuna fase in cui registrarne il consumo. Impossibile registrare il collegamento ciclo.", articolo.IdComponente);
                sb.AppendLine(msg);
                esito = false;
            }

            foreach (FaseCiclo faseCiclo in articolo.FasiCiclo.OrderByDescending(x => x.Operazione))
            {
                if (string.IsNullOrEmpty(faseCiclo.Anagrafica))
                {
                    errore = string.Empty;
                    if (!ciclo.AggiungiFase(faseCiclo, out errore))
                    {
                        esito = false;
                        sb.AppendLine(errore);
                    }
                }
                else
                {
                    ExpComponenteDistintaBusinessCentral componente = new ExpComponenteDistintaBusinessCentral(faseCiclo.Anagrafica, faseCiclo.Quantita, faseCiclo.CollegamentoDiBa, faseCiclo.UMQuantita, faseCiclo.IdFaseCiclo, articolo.Anagrafica, faseCiclo.Descrizione);
                    distinta.Componenti.Add(componente);
                    distinteExport.Add(distinta);
                    if (ciclo.Fasi.Count > 0)
                    {
                        cicliExport.Add(ciclo);
                    }
                    codiceDistinta = componente.Anagrafica;
                    distinta       = new ExpDistintaBusinessCentral(codiceDistinta, componente.Descrizione);
                    ciclo          = new ExpCicloBusinessCentral(codiceDistinta);
                    errore         = string.Empty;

                    if (!ciclo.AggiungiFase(faseCiclo, out errore))
                    {
                        esito = false;
                        sb.AppendLine(errore);
                    }
                }
            }
            List <Componente> componentiArticolo = Componenti.Where(x => x.IdPadre == articolo.IdComponente).ToList();

            foreach (Componente componenteArticolo in componentiArticolo)
            {
                ExpComponenteDistintaBusinessCentral componente = new ExpComponenteDistintaBusinessCentral(componenteArticolo.Anagrafica, componenteArticolo.Quantita, componenteArticolo.CollegamentoDiBa, componenteArticolo.UMQuantita, componenteArticolo.IdComponente, codiceDistinta, componenteArticolo.Descrizione);
                distinta.Componenti.Add(componente);
            }
            distinteExport.Add(distinta);
            if (ciclo.Fasi.Count > 0)
            {
                cicliExport.Add(ciclo);
            }

            foreach (Componente componenteArticolo in componentiArticolo)
            {
                errore = string.Empty;
                esito  = esito && creaListaEsportaRicorsiva(distinteExport, cicliExport, componenteArticolo, out errore);
                sb.AppendLine(errore);
            }
            errori = sb.ToString();
            return(esito);
        }