public static BusinessDaysCalculator Load(string filename) { BusinessDaysCalculator loaded = null; if (File.Exists(filename)) { using (FileStream fs = new FileStream(filename, FileMode.Open)) { XmlSerializer xser = new XmlSerializer(typeof(BusinessDaysCalculator)); loaded = (BusinessDaysCalculator)xser.Deserialize(fs); fs.Close(); } } else { loaded = new BusinessDaysCalculator(); } return(loaded); }
private void LoadAll() { CurrentOptions = Options.Load("config.xml"); GlobalBusinessDaysCalculator = BusinessDaysCalculator.Load("business.xml"); GlobalAddressBook = AddressBook.LoadXML("addresses.xml"); }
private NextTripTicket GenerateTimeAndDate(List <POI> poi) { int i = 1; NextTripTicket ntt = null; BusinessDaysCalculator businessDays = MainWindow.Instance.GlobalBusinessDaysCalculator; // Стартовая дата в чеке DateTime startTime = receiptDate; //Определяем конец рабочего дня (попросту добавляем к указанной дате время) DateTime endDT = new DateTime(startTime.Year, startTime.Month, startTime.Day, endOfWorkDay.Hours, endOfWorkDay.Minutes, 0); foreach (POI p in poi) { if (i > 1) { startTime = startTime.AddMinutes(p.prev.toNextPOI.TotalMinutes); } if (p.next == null) { break; } //ПРЕДСТАВЛЕНИЕ ДАТЫ //Конвертация даты в строку и запись в объект. (Можно делать это уже при выгрузки в XLSX p.Date = startTime.ToShortDateString(); p.FullDate = startTime; startTime = startTime.AddMinutes(random.Next(0, pause + 1)); //Добавляем задержку в точке назначения p.timeDeparture = startTime; p.timeArrive = startTime.Add(p.toNextPOI); //Проверяем укладываемся ли в рабочий день if (p.next != null) { //Если ехать в следующую точку, то надо проверить а хватит ли потом времени в рамках рабочего дня if ((startTime.AddMinutes(p.next.toNextPOI.TotalMinutes * 2) > endDT) && !p.address.IsBase) { DateTime checkDay; //Если не хватит то переключаем день на следующий do { //Меняем день до тех пор пока он не станет следующим РАБОЧИМ днем startTime = startTime.AddDays(1); checkDay = new DateTime(startTime.Year, startTime.Month, startTime.Day); } while (((startTime.DayOfWeek == DayOfWeek.Saturday || startTime.DayOfWeek == DayOfWeek.Sunday) && (businessDays.IsBusinessDay(checkDay) != 1)) || // если это выходной и не является принудительно рабочим businessDays.IsBusinessDay(checkDay) == 2); // если это любой другой день, но он объявлен нерабочим //Переводим стартовое время на начало рабочего дня startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startOfWorkDay.Hours, startOfWorkDay.Minutes, 0); //Определяем конец рабочего дня endDT = new DateTime(startTime.Year, startTime.Month, startTime.Day, endOfWorkDay.Hours, endOfWorkDay.Minutes, 0); //startTime = startOfWorkDay; FuelResidude = Math.Round(p.FuelResidude); // Если нужно создавать новый трип лист каждый раз когда закончился день // и еще достаточно топлива, то if (MainWindow.DIVIDE_TRIPTICKETS && FuelResidude > fuelLost) { // Записываем данные для переноса на след день ntt = new NextTripTicket() { NextIndex = Id + 1, // Id следующего путевого листа Date = startTime, //Дата с которой начнется след лист Liters = p.FuelResidude, //Остаток топлива с которым начнется день NumberPOI = i //Количество уже пройденных точек (нужно для удаление лишних) }; return(ntt); } i = 0; } i++; } } return(null); }