예제 #1
0
 public void AjouterAnalyseChantier(AnalyseChantier analyseChantier)
 {
     _Achat    += analyseChantier.Achat;
     _HeureQte += analyseChantier.HeureQte;
     _HeureMt  += analyseChantier.HeureMt;
     _Depense  += analyseChantier.Depense;
     ListeAnalyseChantier.Add(analyseChantier);
 }
예제 #2
0
        public Boolean Analyser(DateTime dateDebut, DateTime dateFin)
        {
            _ListeAnalyseChantier = new ListeObservable <AnalyseChantier>();

            if (dateFin <= dateDebut)
            {
                return(false);
            }

            if ((dateFin - dateDebut).TotalDays < 32)
            {
                _DateValeur = String.Format("{0}", dateDebut.ToString("MMM yy")).UpperCaseFirstCharacter();
            }
            else
            {
                _DateValeur = String.Format("de {0} à {1}", dateDebut.ToString("MMM yy"), dateFin.ToString("MMM yy"));
            }

            var format = "yyyy-MM-dd HH:mm:ss";
            var filtre = String.Format("datevaleur >= '{0}' AND datevaleur < '{1}' ",
                                       dateDebut.ToString(format),
                                       dateFin.ToString(format)
                                       );
            var lstAchat = Bdd2.ListeFiltre <Achat>(filtre);
            var lstHeure = Bdd2.ListeFiltre <Heure>(filtre);

            if ((lstAchat.Count + lstHeure.Count) == 0)
            {
                return(false);
            }

            // Permet de précharger les parents et de limiter le nombre de requetes Sql
            var lstPostes = Bdd2.Parents <Poste, Achat>(lstAchat);

            foreach (var poste in Bdd2.Parents <Poste, Heure>(lstHeure))
            {
                lstPostes.Add(poste);
            }

            Bdd2.Parents <Chantier, Poste>(lstPostes);
            // fin du préchargement

            var dicAnalysePoste = new Dictionary <int, AnalysePoste>();

            foreach (var achat in lstAchat)
            {
                var          pst = achat.Poste;
                AnalysePoste ap;

                if (dicAnalysePoste.ContainsKey(pst.Id))
                {
                    ap = dicAnalysePoste[pst.Id];
                }
                else
                {
                    dicAnalysePoste.Add(pst.Id, ap = new AnalysePoste(pst));
                }

                ap.AjouterAchat(achat);
            }

            foreach (var heure in lstHeure)
            {
                var pst = heure.Poste;;

                AnalysePoste ap;

                if (dicAnalysePoste.ContainsKey(pst.Id))
                {
                    ap = dicAnalysePoste[pst.Id];
                }
                else
                {
                    dicAnalysePoste.Add(pst.Id, ap = new AnalysePoste(pst));
                }

                ap.AjouterHeure(heure);
            }

            var dicAnalyseChantier = new Dictionary <int, AnalyseChantier>();

            foreach (var analysePoste in dicAnalysePoste.Values)
            {
                var cht = analysePoste.Poste.Chantier;

                AnalyseChantier ac;

                if (dicAnalyseChantier.ContainsKey(cht.Id))
                {
                    ac = dicAnalyseChantier[cht.Id];
                }
                else
                {
                    dicAnalyseChantier.Add(cht.Id, ac = new AnalyseChantier(cht));
                }

                analysePoste.AnalyseChantier = ac;
                ac.AjouterAnalysePoste(analysePoste);
            }

            foreach (var analyseChantier in dicAnalyseChantier.Values)
            {
                analyseChantier.AnalysePeriode = this;
                this.AjouterAnalyseChantier(analyseChantier);
            }

            return(true);
        }