public DateTime CalendarHoliday(string datefull, DateTime date) { double dateholiday = 0; string fetchxml_holiday = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='bsd_calendarholiday'> <attribute name='bsd_calendarholidayid' /> <attribute name='bsd_name' /> <attribute name='createdon' /> <attribute name='bsd_startdate' /> <attribute name='bsd_enddate' /> <order attribute='bsd_name' descending='false' /> <filter type='and'> <condition attribute='bsd_startdate' operator='on-or-before' value='" + datefull + @"' /> <condition attribute='bsd_enddate' operator='on-or-after' value='" + datefull + @"' /> </filter> </entity> </fetch>"; EntityCollection etccalendarholiday = service.RetrieveMultiple(new FetchExpression(fetchxml_holiday)); if (etccalendarholiday.Entities.Any()) { foreach (var calendarholiday in etccalendarholiday.Entities) { DateTime enddate = DateTime.Now; if (calendarholiday.HasValue("bsd_enddate")) { enddate = (DateTime)calendarholiday["bsd_enddate"]; } enddate = EnityUtilities.RetrieveLocalTimeFromUTCTime(enddate, service).Date; DateTime datechange = EnityUtilities.RetrieveLocalTimeFromUTCTime(date, service).Date; TimeSpan countdate = enddate - datechange; dateholiday += countdate.TotalDays; } dateholiday += 1; } date = date.AddDays(dateholiday); return(date); }
public void CheckDate(Entity suborder) { double time_closing = getConfigTimeClosing(); DateTime date = DateTime.Now.AddDays(10000); date = (DateTime)suborder["bsd_date"]; date = EnityUtilities.RetrieveLocalTimeFromUTCTime(date, service); DateTime datedistributor = date; date = date.AddHours(time_closing); //throw new Exception("time_closing: " + time_closing +"date: "+date.ToLocalTime() ); // date = date.AddDays(1) //lay calendar holiday string datefull = date.ToString("yyyy-MM-dd"); date = CalendarHoliday(datefull, date); var dayOfWeek = date.DayOfWeek; EntityCollection etccalendarworking = RetrieveZeroCondition("bsd_calendarworking", service); if (etccalendarworking.Entities.Any()) { Entity calendarworking = etccalendarworking.Entities.First(); bool monday, tuesday, wednesday, thursday, friday, saturday, sunday; monday = tuesday = wednesday = thursday = friday = saturday = sunday = false; if (calendarworking.HasValue("bsd_monday")) { monday = (bool)calendarworking["bsd_monday"]; } if (calendarworking.HasValue("bsd_tuesday")) { tuesday = (bool)calendarworking["bsd_tuesday"]; } if (calendarworking.HasValue("bsd_wednesday")) { wednesday = (bool)calendarworking["bsd_wednesday"]; } if (calendarworking.HasValue("bsd_thursday")) { thursday = (bool)calendarworking["bsd_thursday"]; } if (calendarworking.HasValue("bsd_friday")) { friday = (bool)calendarworking["bsd_friday"]; } if (calendarworking.HasValue("bsd_saturday")) { saturday = (bool)calendarworking["bsd_saturday"]; } if (calendarworking.HasValue("bsd_sunday")) { sunday = (bool)calendarworking["bsd_sunday"]; } datefull = date.ToString("yyyy-MM-dd"); string fetchxml_holiday_again = string.Format(@"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='bsd_calendarholiday'> <attribute name='bsd_calendarholidayid' /> <attribute name='bsd_name' /> <attribute name='createdon' /> <attribute name='bsd_startdate' /> <attribute name='bsd_enddate' /> <order attribute='bsd_name' descending='false' /> <filter type='and'> <condition attribute='bsd_startdate' operator='on-or-before' value='{0}' /> <condition attribute='bsd_enddate' operator='on-or-after' value='{1}' /> <condition attribute='statecode' operator='eq' value='0' /> </filter> </entity> </fetch>", datefull, datefull); EntityCollection etccalendarholiday_again = service.RetrieveMultiple(new FetchExpression(fetchxml_holiday_again)); if (!etccalendarholiday_again.Entities.Any()) { while (true) { bool dowork = CheckDate(date, dayOfWeek, sunday, monday, tuesday, wednesday, thursday, friday, saturday); if (dowork) { break; } else if (!dowork) { date = date.AddDays(1); } } } } DateTime nowdate = EnityUtilities.RetrieveLocalTimeFromUTCTime(DateTime.Now, service); Entity newdistributorshipping = new Entity(suborder.LogicalName, suborder.Id); newdistributorshipping["bsd_dateworkflow"] = date; service.Update(newdistributorshipping); }