private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            string   workerId  = txtWorkerId.Text;
            DateTime startDate = dpStartDate.SelectedDate.Value;
            DateTime endDate   = dpEndDate.SelectedDate.Value;

            LeaveTypeModel leaveType = cboLeaveType.SelectedItem as LeaveTypeModel;

            if (leaveType == null)
            {
                return;
            }
            WorkerLeaveModel model = new WorkerLeaveModel
            {
                WorkerLeaveId = workerLeaveId,
                WorkerId      = workerId,
                StartDate     = startDate,
                EndDate       = endDate,
                LeaveType     = leaveType.LeaveTypeId,
            };

            if (String.IsNullOrEmpty(model.WorkerId) == true || model.StartDate.Date > model.EndDate.Date)
            {
                return;
            }

            if (threadInsert.IsBusy == false)
            {
                this.Cursor       = Cursors.Wait;
                btnSave.IsEnabled = false;
                threadInsert.RunWorkerAsync(model);
            }
        }
        private int CalculateNumberOfDayAbsent(int year, int month, List <SourceModel> sourceList, List <WorkerLeaveModel> workerLeaveList, List <HolidayModel> holidayList)
        {
            int      numberOfDayAbsent = 0;
            DateTime startDate         = new DateTime(year, month, 1);
            DateTime endDate           = startDate.AddDays(DateTime.DaysInMonth(year, month) - 1);

            for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
            {
                SourceModel source = sourceList.Where(s => s.Date.Date == date.Date).FirstOrDefault();
                if (source == null && date.DayOfWeek != DayOfWeek.Sunday && holidayList.Select(h => h.Date.Date).Contains(date.Date) == false)
                {
                    List <WorkerLeaveModel> workerLeaveList_D1 = workerLeaveList.Where(w => w.StartDate.Date <= date.Date && date.Date <= w.EndDate.Date).ToList();
                    if (workerLeaveList_D1.Count > 0)
                    {
                        WorkerLeaveModel workerLeave = workerLeaveList_D1.OrderBy(w => w.CreatedDate).Last();
                        LeaveTypeModel   leaveType   = leaveTypeList.Where(l => l.LeaveTypeId == workerLeave.LeaveType).FirstOrDefault();
                        if (leaveType != null && leaveType.HaveIncentive == false)
                        {
                            numberOfDayAbsent += 1;
                        }
                    }
                    else
                    {
                        numberOfDayAbsent += 1;
                    }
                }
            }
            return(numberOfDayAbsent);
        }
        void threadInsert_DoWork(object sender, DoWorkEventArgs e)
        {
            WorkerLeaveModel model = e.Argument as WorkerLeaveModel;

            if (model.WorkerLeaveId == 0)
            {
                e.Result = WorkerLeaveController.Insert(model);
            }
            else
            {
                e.Result = WorkerLeaveController.Update(model);
            }
        }
        public static bool Insert(WorkerLeaveModel model)
        {
            SaovietCheckInEntities db = new SaovietCheckInEntities();
            var @WorkerId             = new SqlParameter("@WorkerId", model.WorkerId);
            var @StartDate            = new SqlParameter("@StartDate", model.StartDate);
            var @EndDate   = new SqlParameter("@EndDate", model.EndDate);
            var @LeaveType = new SqlParameter("@LeaveType", model.LeaveType);

            if (db.ExecuteStoreCommand("EXEC spm_InsertWorkerLeave_1 @WorkerId, @StartDate, @EndDate, @LeaveType", @WorkerId, @StartDate, @EndDate, @LeaveType) > 0)
            {
                return(true);
            }
            return(false);
        }
        void threadShow_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            List <SourceModel> sourceList = e.Result as List <SourceModel>;

            DateTime startDate = new DateTime(year, month, 1);
            DateTime endDate   = startDate.AddDays(DateTime.DaysInMonth(year, month) - 1);

            List <PersonalModel> personalList_D1 = personalList.Where(p => p.Department == line).OrderBy(p => p.WorkerId).ToList();
            List <DateTime>      holidayList_D1  = holidayList.Select(h => h.Date.Date).ToList();

            dtPrint.Rows.Clear();
            int i = 1;

            foreach (PersonalModel personal in personalList_D1)
            {
                List <SourceModel>      sourceList_D1      = sourceList.Where(w => w.CardId == personal.CardId).ToList();
                List <WorkerLeaveModel> workerLeaveList_D1 = workerLeaveList.Where(w => w.WorkerId.ToLower() == personal.WorkerId.ToLower()).ToList();
                DataRow dr = dt.NewRow();
                dr["NumberOf"] = i;
                if (personal != null)
                {
                    dr["Name"] = personal.Name;
                }
                dr["WorkerId"] = personal.WorkerId;
                for (DateTime date = startDate; date <= endDate; date = date.AddDays(1))
                {
                    DataRow drPrint = dtPrint.NewRow();
                    drPrint["NumberOf"] = i;
                    if (personal != null)
                    {
                        drPrint["Name"] = personal.Name;
                    }
                    drPrint["WorkerId"] = personal.WorkerId;
                    drPrint["Day"]      = date.Day;
                    SourceModel source = sourceList_D1.Where(w => w.Date.Date == date.Date).FirstOrDefault();
                    if (source != null)
                    {
                        dr[String.Format("Day_{0}", date.Day)]            = "√";
                        dr[String.Format("Day_{0}_Background", date.Day)] = Brushes.LightGray;

                        drPrint["Working"]    = "√";
                        drPrint["Background"] = "LightGrey";
                    }
                    else
                    {
                        dr[String.Format("Day_{0}_Background", date.Day)] = Brushes.Transparent;
                        drPrint["Background"] = "Transparent";
                        if (date.DayOfWeek != DayOfWeek.Sunday && holidayList_D1.Contains(date.Date) == false)
                        {
                            List <WorkerLeaveModel> workerLeaveList_D2 = workerLeaveList_D1.Where(w => w.StartDate.Date <= date.Date && date.Date <= w.EndDate.Date).ToList();
                            if (workerLeaveList_D2.Count > 0)
                            {
                                WorkerLeaveModel workerLeave = workerLeaveList_D2.OrderBy(w => w.CreatedDate).Last();
                                LeaveTypeModel   leaveType   = leaveTypeList.Where(l => l.LeaveTypeId == workerLeave.LeaveType).FirstOrDefault();
                                if (leaveType != null)
                                {
                                    dr[String.Format("Day_{0}_Background", date.Day)] = leaveType.BackgroundColor;
                                    drPrint["Background"] = leaveType.ReportBackgroundColor;
                                }
                            }
                            else
                            {
                                dr[String.Format("Day_{0}_Background", date.Day)] = Brushes.Red;
                                drPrint["Background"] = "Red";
                            }
                        }

                        drPrint["Working"] = "";
                    }
                    dtPrint.Rows.Add(drPrint);
                }
                dt.Rows.Add(dr);
                i = i + 1;
            }
            dgMain.ItemsSource = null;
            dgMain.ItemsSource = dt.AsDataView();
            btnPrint.IsEnabled = true;
            btnShow.IsEnabled  = true;
            this.Cursor        = null;
        }