private void OnCounterLiavingTimeEnd() { SQLConnector.set_log_liaving_time(DateTime.Now); Text_block_2_opacity = 1; Text_block_2 = SQLConnector.get_log_liaving_time(DateTime.Today); ViewProgressBar = false; start_auto_update(); }
public void start_auto_update() { //Если в массиве логов нет лога за текущую дату, значит ещё не отмечали приход if (!SQLConnector.Log_Exist(data_index.Date)) { //Если сечас раньше чем минимальное время отметки прихода значит отмечаем в минимальное время отметки прихода плюс случайное число секунд. if (DateTime.Now.TimeOfDay <= Properties.Settings.Default.TimeToArrival - Properties.Settings.Default.MaxTimeSpread) { CounterTimer timer_arrival = new CounterTimer(this); timer_arrival.TimeToEndOfACounter = Properties.Settings.Default.TimeToArrival - TimeSpan.FromSeconds(random.Next(0, (int)Properties.Settings.Default.MaxTimeSpread.TotalSeconds)); timer_arrival.TimeToStartOfACounter = DateTime.Now.TimeOfDay; timer_arrival.endOfACount += OnCounterArrivalTimeEnd; //Передаем ламбда выражения для вывода счетчика в нужное место, в данном случае в 1-й блок timer_arrival.ViewTimerText = text => this.Text_block_1 = text; timer_arrival.ViewTimerTextInfo = text => this.Info_text_block_1 = text; timer_arrival.ViewTimerTextOpacity = text => this.Text_block_1_opacity = text; timer_arrival.StartCounterTimer(); } //Если сечас позже чем минимальное время отметки прихода значит отмечаем немедленно, даём 10 сек на передумать. else { CounterTimer timer_arrival = new CounterTimer(this); timer_arrival.TimeToEndOfACounter = DateTime.Now.TimeOfDay + TimeSpan.FromSeconds(15); timer_arrival.TimeToStartOfACounter = DateTime.Now.TimeOfDay; timer_arrival.endOfACount += OnCounterArrivalTimeEnd; timer_arrival.ViewTimerText = text => this.Text_block_1 = text; timer_arrival.ViewTimerTextInfo = text => this.Info_text_block_1 = text; timer_arrival.ViewTimerTextOpacity = text => this.Text_block_1_opacity = text; timer_arrival.StartCounterTimer(); } } //Если логи за текущую дату имеются и нет отметки об уходе else if (SQLConnector.get_log_liaving_time(data_index.Date) == "") { Text_block_1 = Text_block_1 = SQLConnector.get_log_arrival_time(data_index.Date); //Если сечас позже чем минимальное время отметки прихода значит отмечаем в минимальное время отметки прихода плюс случайное число секунд. if (DateTime.Now.TimeOfDay <= Properties.Settings.Default.LiavingTime) { CounterTimer timer_arrival = new CounterTimer(this); timer_arrival.TimeToEndOfACounter = Properties.Settings.Default.LiavingTime + TimeSpan.FromSeconds(random.Next(0, (int)Properties.Settings.Default.MaxTimeSpread.TotalSeconds)); timer_arrival.TimeToStartOfACounter = SQLConnector.TimeSpanGetArrivalTiem(DateTime.Now.Date); timer_arrival.endOfACount += OnCounterLiavingTimeEnd; timer_arrival.ViewTimerText = text => this.Text_block_2 = text; timer_arrival.ViewTimerTextInfo = text => this.Info_text_block_2 = text; timer_arrival.ViewTimerTextOpacity = text => this.Text_block_2_opacity = text; timer_arrival.StartCounterTimer(); } //Если сечас позже чем минимальное время отметки прихода значит отмечаем немедленно, даём 10 сек на передумать. else { CounterTimer timer_arrival = new CounterTimer(this); timer_arrival.TimeToEndOfACounter = DateTime.Now.TimeOfDay + TimeSpan.FromSeconds(15); timer_arrival.TimeToStartOfACounter = DateTime.Now.TimeOfDay; timer_arrival.endOfACount += OnCounterLiavingTimeEnd; timer_arrival.ViewTimerText = text => this.Text_block_2 = text; timer_arrival.ViewTimerTextInfo = text => this.Info_text_block_2 = text; timer_arrival.ViewTimerTextOpacity = text => this.Text_block_2_opacity = text; timer_arrival.StartCounterTimer(); } } else { Text_block_1 = SQLConnector.get_log_arrival_time(Data_index.Date); Text_block_2 = SQLConnector.get_log_liaving_time(Data_index.Date); ViewProgressBar = false; } }
//Возвращает массив с данными для ячеек календаря public static ObservableCollection <Day> get_array_days(int year, int month) { array_objects_days.Clear(); GC.Collect(); //Определяем кол-во дней в переданном месяце int day_in_now_month = DateTime.DaysInMonth(year, month); //Определяем с какого дня недели начинается переданный месяц int day_of_the_week = get_day_week(new DateTime(year, month, 1)); //Определям предидущий месяц и в каком он был году int old_month = get_old_month(year, month)[0]; int old_year = get_old_month(year, month)[1]; //Определям следующий месяц и в каком он был году int new_month = get_new_month(year, month)[0]; int new_year = get_new_month(year, month)[1]; //Определяем кол-во дней в прошлом месяце int day_in_old_month = DateTime.DaysInMonth(old_year, old_month); int i = 0; int d = 1; while (i + 1 < day_of_the_week) { array_objects_days.Add(new Day(new DateTime(old_year, old_month, i + day_in_old_month - day_of_the_week + 2))); array_objects_days[i].day_is_now_month = false; array_objects_days[i].Text_block_1 = Registration.get_time_arrival_from_day(new DateTime(old_year, old_month, i + day_in_old_month - day_of_the_week + 2)); array_objects_days[i].Text_block_2 = Registration.get_liaving_time_from_day(new DateTime(old_year, old_month, i + day_in_old_month - day_of_the_week + 2)); if (array_objects_days[i].Data_index.Date > DateTime.Now.Date) { array_objects_days[i].EnableContextMenu = true; } if (array_objects_days[i].Data_index.Date == DateTime.Now.Date) { array_objects_days[i].Is_now_day = true; } if (CalculationData.is_work(new DateTime(old_year, old_month, array_objects_days[i].getDay()))) { array_objects_days[i].IsWork = true; } else { array_objects_days[i].IsWork = false; } i++; } d = 1; while (d <= day_in_now_month) { if (DateTime.Now.Date == new DateTime(year, month, d) && CalculationData.is_work(new DateTime(year, month, d)) && SQLConnector.GetTypeDay(new DateTime(year, month, d)) == 0) { nowDayObject.Data_index = new DateTime(year, month, d); array_objects_days.Add(nowDayObject); } else { array_objects_days.Add(new Day(new DateTime(year, month, d))); array_objects_days[i].Text_block_1 = SQLConnector.get_log_arrival_time(new DateTime(year, month, d)); array_objects_days[i].Text_block_2 = SQLConnector.get_log_liaving_time(new DateTime(year, month, d)); } if (array_objects_days[i].Data_index > DateTime.Now.Date) { array_objects_days[i].EnableContextMenu = true; } array_objects_days[i].day_is_now_month = true; if (array_objects_days[i].Data_index.Date == DateTime.Now.Date) { array_objects_days[i].Is_now_day = true; } if (CalculationData.is_work(new DateTime(year, month, array_objects_days[i].getDay()))) { array_objects_days[i].IsWork = true; } else { array_objects_days[i].IsWork = false; } i++; d++; } d = 1; while (i < 42) { array_objects_days.Add(new Day(new DateTime(new_year, new_month, d))); array_objects_days[i].day_is_now_month = false; if (array_objects_days[i].Data_index.Date == DateTime.Now.Date) { array_objects_days[i].Is_now_day = true; } if (CalculationData.is_work(new DateTime(new_year, new_month, array_objects_days[i].getDay()))) { array_objects_days[i].IsWork = true; } else { array_objects_days[i].IsWork = false; } if (array_objects_days[i].Data_index > DateTime.Now) { array_objects_days[i].EnableContextMenu = true; } i++; d++; } return(array_objects_days); }