1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
public List<DateTimeCustom> getNextRdvs(int duracy)
{
List<DateTimeCustom> results = new List<DateTimeCustom>();
//define search start hour
DateTime now = DateTime.Now;
//begin the search one hour after now
DateTime start = now.AddMinutes(60);
start = start.AddMinutes(-start.Minute % 10);
start = start.AddSeconds(-start.Second);
start = start.AddMilliseconds(-start.Millisecond);
DateTime start1 = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second);
//cette fonction convertit un DayOfWeek en un entier
int currDay = convertDowToNum(start1.DayOfWeek);
DateTime currStartHour = start1;
DateTime currEndHour = currStartHour.AddMinutes(duracy);
//initialize the step
short step=0;
switch (calendar1.TimeScale)
{
case CalendarTimeScale.SixtyMinutes:
step = 60;
break;
case CalendarTimeScale.ThirtyMinutes:
step = 30;
break;
case CalendarTimeScale.FifteenMinutes:
step = 15;
break;
case CalendarTimeScale.TenMinutes:
step = 10;
break;
case CalendarTimeScale.FiveMinutes:
step = 5;
break;
}
short searchInterval = Properties.Settings.Default.searchInterval;
while (currStartHour <= start1.AddDays(searchInterval))
{
if (currStartHour.TimeOfDay < new TimeSpan(23, 00, 00))
{
//verifier que les heures de début et de
//fins sont comprises dans les heures de travail de la journée
if (currStartHour.TimeOfDay >= calendar1.HighlightRanges[currDay].StartTime && currStartHour.AddMinutes(duracy).TimeOfDay <= calendar1.HighlightRanges[currDay].EndTime)
{
//verifier que l'intervalle demandé ne chevauche pas avec
// un rdv déjà existant
//je pense que le problème vient de cet appel(à checkAvailable)
bool intervalGood = checkAvailable(currStartHour, duracy);
//si l'intervalle est bon,l'ajouter aux possibilités
if (intervalGood)
{
results.Add(new DateTimeCustom(currStartHour));
}
}
}
//initialiser les valeur pour la recherche du prochain
currStartHour = currStartHour.AddMinutes(step);
currEndHour = currEndHour.AddMinutes(step);
currDay = convertDowToNum(currStartHour.DayOfWeek);
}
return results;
}
public bool checkAvailable(DateTime start, int duracy)
{
//we suppose that the specified interval is between the ranges
DateTime beginInterval = start;
DateTime endInterval = start.AddMinutes(duracy);
//accés à la base de données pour récupérer des Rdv
List<Rdv> existRdv = DataAccess.DataAccess.getExistRdvByRange(start.AddHours(-29), start.AddDays(29));
foreach (Rdv rdv in existRdv)
{
//if may be a problem
if (!(rdv.RDV_DATE >= start.AddMinutes(duracy) || rdv.RDV_DATE <= start.AddMinutes(-60)))
{
//fonction qui vérifie s'il y a intersection entre deux dates(simplecomparaison)
if (DateIntersects(beginInterval, endInterval, rdv.RDV_DATE.Value, rdv.RDV_DATE.Value.AddMinutes(rdv.DURACY_RDV)))
return false;
}
}
//if available
return true;
} |
Partager