internal ScrutinModel(Scrutin rawScrutin) { this.Uid = rawScrutin.Uid; this.Numero = (int)rawScrutin.Numero; this.Titre = rawScrutin.Titre; this.Demandeur = rawScrutin.Demandeur.Texte; this.Date = rawScrutin.DateScrutin.GetValueOrDefault(); this.Annonce = rawScrutin.SyntheseVote.Annonce; this.Results = new List <GroupeResult>(); this.TotalExprimes = (int)rawScrutin.SyntheseVote.SuffragesExprimes; foreach (var groupe in rawScrutin.VentilationVotes.OrganeScrutin.Groupes.Groupe) { // forge new gp as it may have changed GroupeParlementaireModel groupeParlementaire = new GroupeParlementaireModel(ObjectStorage <BaseRawData> .Singleton().Get <Organe>(groupe.OrganeRef)); this.Results.Add(new GroupeResult { Abstentions = ParseVotants(groupeParlementaire, groupe.Vote.DecompteNominatif.Abstentions?.Votant), NonVotants = ParseVotants(groupeParlementaire, groupe.Vote.DecompteNominatif.NonVotants?.Votant), Pour = ParseVotants(groupeParlementaire, groupe.Vote.DecompteNominatif.Pours?.Votant), Contre = ParseVotants(groupeParlementaire, groupe.Vote.DecompteNominatif.Contres?.Votant), Groupe = groupeParlementaire }); } _modelStorage.Register(this.Uid, this); }
public IEnumerable <OrganeModel> Organes(string parentDir) { var tmp = RawOrgane.FromDirectory(Path.Combine(parentDir, "organe")); var result = new List <OrganeModel>(); foreach (var rawOrgane in tmp) { OrganeModel model; if (rawOrgane.CodeType == TypeOrgane.Gp) { model = new GroupeParlementaireModel(rawOrgane); } else { model = new OrganeModel(rawOrgane); } if (rawOrgane.OrganeParent != null && _modelStorage.Contains <OrganeModel>(rawOrgane.OrganeParent)) { model.Parent = _modelStorage.Get <OrganeModel>(rawOrgane.OrganeParent); } result.Add(model); } return(result); }
private void ParseMandats(Acteur rawActeur) { Mandats = new HashSet <MandatModel>(); for (int i = 0; i < rawActeur.Mandats.Mandat.Length; ++i) { var m = rawActeur.Mandats.Mandat[i]; if (m.ActeurRef != rawActeur.Uid) { throw new InvalidDataException("le mandat ne correspond pas à l'acteur"); } var mandalModel = new MandatModel { Debut = m.DateDebut.Value, Fin = m.DateFin, Uid = m.Uid, Libelle = m.Libelle, Qualite = m.InfosQualite.CodeQualite, Organes = m.Organes.OrganeRef.Select(o => _modelStorage.Get <OrganeModel>(o)).ToArray() }; if (mandalModel.Libelle == null && m.Organes.OrganeRef.Count() == 1) { mandalModel.Libelle = _modelStorage.Get <OrganeModel>(m.Organes.OrganeRef.First()).Nom; } Mandats.Add(mandalModel); if (m.TypeOrgane == TypeOrgane.Gp) { if (m.Organes.OrganeRef.Count() > 1) { throw new NotImplementedException("groupe parlementaire avec plus d'un organe associé"); } // attention les groupes parlementaires perdent des membres et ne sont pas recréés... var groupeParlementaire = _modelStorage.Get <GroupeParlementaireModel>(m.Organes.OrganeRef.First()); if (m.DateFin != default && m.DateFin.HasValue && m.DateFin.Value < DateTimeOffset.Now) { continue; } groupeParlementaire.Deputes.Add(this); GroupeParlementaire = groupeParlementaire; } } }
private HashSet <VoteDepute> ParseVotants(GroupeParlementaireModel gp, IEnumerable <Votant> votants) { if (votants == null) { return(new HashSet <VoteDepute>()); } return(new HashSet <VoteDepute>(votants .Where(v => _modelStorage.Contains <DeputeModel>(v.ActeurRef)) // somehow unknown acteurRef appears here : to be reported to questeur .Select(v => { var depute = _modelStorage.Get <DeputeModel>(v.ActeurRef); gp.Deputes.Add(depute); return new VoteDepute { Depute = depute, ParDelegation = v.ParDelegation.HasValue ? v.ParDelegation.Value : false, CausePositionVote = v.CausePositionVote }; }))); }