//------------------------------------------------------------------- public override CResultAErreur VerifieDonnees(CObjetDonnee objet) { CResultAErreur result = CResultAErreur.True; try { CCalendrier_JourParticulier jourParticulier = (CCalendrier_JourParticulier)objet; // Vérificaton de la cohérence des tranches horaires // Pas de recouvrement entre les tranches foreach (CHoraireJournalier_Tranche tranche1 in jourParticulier.TranchesHorairesListe) { foreach (CHoraireJournalier_Tranche tranche2 in jourParticulier.TranchesHorairesListe) { if (tranche1 != tranche2) { if (tranche2.HeureDebut <= tranche1.HeureDebut && tranche2.Durée > (tranche1.HeureDebut - tranche2.HeureDebut)) { result.EmpileErreur(I.T("Two time slots are overlapping|165")); } } } } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }
//Retourne toutes les clés concernant une date donnée dans l'ordre de priorité public static string[] GetAllKeysConcernant(DateTime dt) { return(new string[] { CCalendrier_JourParticulier.GetKeyForJourMoisAnnee(dt.Day, dt.Month, dt.Year), CCalendrier_JourParticulier.GetKeyForJourMois(dt.Day, dt.Month), CCalendrier_JourParticulier.GetKeyForJourDuMois(dt.Day), CCalendrier_JourParticulier.GetKeyJoursDeSemaine(CUtilDate.GetJourBinaireFor(dt.DayOfWeek)) }); }
//---------------------------------------------------------------------------------------- /// <summary> /// Retourne tous les jours particuliers /// </summary> /// <param name="date"></param> /// <returns></returns> private CCalendrier_JourParticulier GetJourParticulierAvecHeritageOptim(DateTime date, Dictionary <string, CCalendrier_JourParticulier> dicJoursParticuliers) { CCalendrier_JourParticulier jourParticulier = new CCalendrier_JourParticulier(this.ContexteDonnee); foreach (string strKey in GetAllKeysConcernant(date)) { if (dicJoursParticuliers.TryGetValue(strKey, out jourParticulier)) { return(jourParticulier); } } return(null); }
//----------------------------------------------------------------------- /// <summary> /// Compare les propriétés d'un jour particlier avec un autre /// </summary> /// <param name="jpAComparer"></param> /// <returns>true si les propriétés sont identiques (définissent une même règle)</returns> public bool HasSameProperties(CCalendrier_JourParticulier jpAComparer) { if (jpAComparer == null) { return(false); } if (jpAComparer.Calendrier != this.Calendrier) { return(false); } if (jpAComparer.HoraireJournalier != this.HoraireJournalier) { return(false); } if (jpAComparer.TypeOccupationHoraire != this.TypeOccupationHoraire) { return(false); } // Compare les tranches horaires CListeObjetsDonnees listeThis = this.TranchesHorairesListe; CListeObjetsDonnees listeAComparer = jpAComparer.TranchesHorairesListe; if (listeThis.Count != listeAComparer.Count) { return(false); } // Trier listeThis.Tri = CHoraireJournalier_Tranche.c_champHeureDebut; listeAComparer.Tri = CHoraireJournalier_Tranche.c_champHeureDebut; for (int i = 0; i < listeThis.Count; i++) { CHoraireJournalier_Tranche t1 = (CHoraireJournalier_Tranche)listeThis[i]; CHoraireJournalier_Tranche t2 = (CHoraireJournalier_Tranche)listeAComparer[i]; if (!t2.HasSameProperties(t1)) { return(false); } } // Toutes les comparaisons sont OK return(true); }
public bool ApplySameProperties(CCalendrier_JourParticulier jpACopier) { if (jpACopier == null) { return(false); } if (jpACopier == this) { return(true); } Calendrier = jpACopier.Calendrier; HoraireJournalier = jpACopier.HoraireJournalier; TypeOccupationHoraire = jpACopier.TypeOccupationHoraire; //Recopie les tranches sur les existantes int nIndex = 0; CListeObjetsDonnees listeMesTranches = TranchesHorairesListe; foreach (CHoraireJournalier_Tranche tranche in jpACopier.TranchesHorairesListe) { CHoraireJournalier_Tranche laTrancheQuiMeVa; if (nIndex >= listeMesTranches.Count) { laTrancheQuiMeVa = new CHoraireJournalier_Tranche(this.ContexteDonnee); laTrancheQuiMeVa.CreateNewInCurrentContexte(); } else { laTrancheQuiMeVa = (CHoraireJournalier_Tranche)listeMesTranches[nIndex]; } laTrancheQuiMeVa.JourParticulier = this; laTrancheQuiMeVa.HeureDebut = tranche.HeureDebut; laTrancheQuiMeVa.HeureFin = tranche.HeureFin; laTrancheQuiMeVa.TypeOccupationHoraire = tranche.TypeOccupationHoraire; nIndex++; } for (nIndex = jpACopier.TranchesHorairesListe.Count; nIndex < listeMesTranches.Count; nIndex++) { if (!((CObjetDonnee)listeMesTranches[nIndex]).Delete()) { return(false); } } return(true); }
//---------------------------------------------------------------------------------------- /// <summary> /// Retourne tous les jours particuliers /// </summary> /// <param name="date"></param> /// <returns></returns> private CCalendrier_JourParticulier GetJourParticulierAvecHeritage(DateTime date, bool bAutoriseLectureEnBase) { CCalendrier_JourParticulier jourParticulier = new CCalendrier_JourParticulier(this.ContexteDonnee); CCalendrier_JourParticulier jourParticulierHerite = new CCalendrier_JourParticulier(this.ContexteDonnee); if (this.CalendrierDeBase != null) { jourParticulierHerite = this.CalendrierDeBase.GetJourParticulierAvecHeritage(date, bAutoriseLectureEnBase); } else { jourParticulierHerite = null; } // Vérifie s'il existe une exception "jour/mois/année" sur le jour du calendrier sélectionné if (jourParticulier.ReadIfExists(new CFiltreData( CCalendrier_JourParticulier.c_champAnnee + "=@1 and " + CCalendrier_JourParticulier.c_champMois + "=@2 and " + CCalendrier_JourParticulier.c_champJour + "=@3 and " + CCalendrier.c_champId + "=@4", date.Year, date.Month, date.Day, this.Id), bAutoriseLectureEnBase)) { return(jourParticulier); } // Vérifie s'il existe une exception "jour/mois/année" sur le jour du calendrier de base if (jourParticulierHerite != null && jourParticulierHerite.Annee != null) { return(jourParticulierHerite); } // Vérifie s'il existe une exception "jour/mois" sur le jour du calendrier sélectionné if (jourParticulier.ReadIfExists(new CFiltreData( CCalendrier_JourParticulier.c_champAnnee + " is null and " + CCalendrier_JourParticulier.c_champMois + "=@1 and " + CCalendrier_JourParticulier.c_champJour + "=@2 and " + CCalendrier.c_champId + "=@3", date.Month, date.Day, this.Id), bAutoriseLectureEnBase)) { return(jourParticulier); } // Vérifie s'il existe une exception "jour/mois" sur le jour du calendrier de base if (jourParticulierHerite != null && jourParticulierHerite.Mois != null) { return(jourParticulierHerite); } // Vérifie s'il existe une exception "jour du mois" sur le jour du calendrier sélectionné if (jourParticulier.ReadIfExists(new CFiltreData( CCalendrier_JourParticulier.c_champAnnee + " is null and " + CCalendrier_JourParticulier.c_champMois + " is null and " + CCalendrier_JourParticulier.c_champJour + "=@1 and " + CCalendrier.c_champId + "=@2", date.Day, this.Id), bAutoriseLectureEnBase)) { return(jourParticulier); } // Vérifie s'il existe une exception "jour" sur le jour du calendrier de base if (jourParticulierHerite != null && jourParticulierHerite.Jour != null) { return(jourParticulierHerite); } // Vérifie s'il existe une exception "jour de semaine" sur le jour du calendrier sélectionné if (jourParticulier.ReadIfExists(new CFiltreData( CCalendrier_JourParticulier.c_champAnnee + " is null and " + CCalendrier_JourParticulier.c_champMois + " is null and " + CCalendrier_JourParticulier.c_champJour + " is null and " + CCalendrier_JourParticulier.c_champJourSemaine + "=@1 and " + CCalendrier.c_champId + "=@2", (int)CUtilDate.GetJourBinaireFor(date.DayOfWeek), this.Id), bAutoriseLectureEnBase)) { return(jourParticulier); } // Vérifie s'il existe une exception "jour de semaine" sur le jour du calendrier de base if (jourParticulierHerite != null && jourParticulierHerite.JourSemaine != 0) { return(jourParticulierHerite); } return(null); }