Example #1
0
        private void hourWorker_OnChange(int workerId)
        {
            if (_isLoad)
            {
                BC.RefreshContext();

                var firstDateInMonth = new DateTime(SelectedYear, SelectedMonth, 1);
                var lastDateInMonth  = new DateTime(SelectedYear, SelectedMonth, DateTime.DaysInMonth(SelectedYear, SelectedMonth));

                var worker = BC.GetDirectoryWorker(workerId);

                var currentPosts = BC.GetCurrentPosts(worker.Id, SelectedYear, SelectedMonth);

                double salary = 0;
                foreach (var currentPost in currentPosts)
                {
                    var monthTimeSheetWorker = MonthTimeSheetWorkers.FirstOrDefault(m => m.WorkerId == worker.Id && m.DirectoryPostId == currentPost.DirectoryPostId);

                    monthTimeSheetWorker.OverTime     = 0;
                    monthTimeSheetWorker.MissDays     = 0;
                    monthTimeSheetWorker.SickDays     = 0;
                    monthTimeSheetWorker.VocationDays = 0;

                    int indexHour = 0;
                    for (DateTime date = firstDateInMonth; date <= lastDateInMonth && date <= DateTime.Now; date = date.AddDays(1))
                    {
                        if (date.Date >= currentPost.ChangeDate.Date && (currentPost.FireDate == null || currentPost.FireDate != null && currentPost.FireDate.Value.Date >= date.Date))
                        {
                            var day = worker.InfoDates.FirstOrDefault(d => d.Date.Date == date.Date);

                            if (day != null)
                            {
                                string hour = null;

                                switch (day.DescriptionDay)
                                {
                                case DescriptionDay.Был:
                                    hour = day.CountHours.ToString();
                                    monthTimeSheetWorker.OverTime += day.CountHours.Value > 8 ? day.CountHours.Value - 8 : 0;

                                    salary += day.CountHours.Value <= 8 ? day.CountHours.Value * monthTimeSheetWorker.SalaryInHour : (8 + ((day.CountHours.Value - 8) * 2)) * monthTimeSheetWorker.SalaryInHour;
                                    break;

                                case DescriptionDay.Б:
                                    if (monthTimeSheetWorker.SickDays < 5)
                                    {
                                        monthTimeSheetWorker.SickDays++;
                                        salary += 8 * monthTimeSheetWorker.SalaryInHour;
                                    }
                                    else
                                    {
                                        monthTimeSheetWorker.MissDays++;
                                    }
                                    break;

                                case DescriptionDay.О:
                                    monthTimeSheetWorker.VocationDays++;
                                    salary += 8 * monthTimeSheetWorker.SalaryInHour;
                                    break;

                                case DescriptionDay.ДО:
                                    break;

                                case DescriptionDay.П:
                                    monthTimeSheetWorker.MissDays++;
                                    break;

                                case DescriptionDay.С:
                                    monthTimeSheetWorker.MissDays++;
                                    break;

                                default:
                                    break;
                                }
                            }
                        }

                        indexHour++;
                    }
                }

                var monthTimeSheetWorkerFinalSalary = MonthTimeSheetWorkers.First(m => m.WorkerId == worker.Id && m.FullName != null);

                var infoMonth = worker.InfoMonthes.FirstOrDefault(m => m.Date.Year == SelectedYear && m.Date.Month == SelectedMonth);
                if (infoMonth != null)
                {
                    monthTimeSheetWorkerFinalSalary.FinalSalary = salary - double.Parse(monthTimeSheetWorkerFinalSalary.PrepaymentCash) - double.Parse(monthTimeSheetWorkerFinalSalary.PrepaymentBankTransaction) -
                                                                  double.Parse(monthTimeSheetWorkerFinalSalary.VocationPayment) - double.Parse(monthTimeSheetWorkerFinalSalary.SalaryAV) - double.Parse(monthTimeSheetWorkerFinalSalary.SalaryFenox) -
                                                                  double.Parse(monthTimeSheetWorkerFinalSalary.Panalty) - double.Parse(monthTimeSheetWorkerFinalSalary.Inventory) - monthTimeSheetWorkerFinalSalary.BirthDays + double.Parse(monthTimeSheetWorkerFinalSalary.Bonus);
                }
            }
        }
Example #2
0
        private void RefreshWorkers()
        {
            _isLoad = false;

            if (MonthTimeSheetWorkers == null)
            {
                MonthTimeSheetWorkers = new ObservableCollection <MonthTimeSheetWorker>();
            }
            else
            {
                MonthTimeSheetWorkers.Clear();
            }

            int countWorkDaysInMonth = HelperCalendar.GetCountWorkDaysInMonth(SelectedYear, SelectedMonth);
            var firstDateInMonth     = new DateTime(SelectedYear, SelectedMonth, 1);
            var lastDateInMonth      = new DateTime(SelectedYear, SelectedMonth, DateTime.DaysInMonth(SelectedYear, SelectedMonth));

            var workers = BC.GetDirectoryWorkers(SelectedYear, SelectedMonth).ToList();

            foreach (var worker in workers)
            {
                var currentPosts = BC.GetCurrentPosts(worker.Id, SelectedYear, SelectedMonth);

                bool isFirst = false;

                double salary = 0;
                foreach (var currentPost in currentPosts)
                {
                    var monthTimeSheetWorker = MonthTimeSheetWorkers.FirstOrDefault(m => m.WorkerId == worker.Id && m.DirectoryPostId == currentPost.DirectoryPostId);

                    if (monthTimeSheetWorker == null)
                    {
                        monthTimeSheetWorker = new MonthTimeSheetWorker();

                        MonthTimeSheetWorkers.Add(monthTimeSheetWorker);

                        monthTimeSheetWorker.WorkerId = worker.Id;

                        if (!isFirst)
                        {
                            monthTimeSheetWorker.FullName = worker.FullName;
                            isFirst = true;
                        }

                        monthTimeSheetWorker.Date            = firstDateInMonth;
                        monthTimeSheetWorker.DirectoryPostId = currentPost.DirectoryPostId;
                        monthTimeSheetWorker.PostChangeDate  = currentPost.ChangeDate;
                        monthTimeSheetWorker.PostName        = currentPost.DirectoryPost.Name;
                        monthTimeSheetWorker.SalaryInHour    = currentPost.DirectoryPost.UserWorkerSalary / countWorkDaysInMonth / 8;
                        monthTimeSheetWorker.Hours           = new ObservableCollection <HourWorker>();
                        for (int i = 0; i < 31; i++)
                        {
                            var hourWorker = new HourWorker();
                            hourWorker.OnChange += hourWorker_OnChange;
                            monthTimeSheetWorker.Hours.Add(hourWorker);
                        }

                        monthTimeSheetWorker.OverTime = 0;
                    }

                    int indexHour = 0;
                    for (DateTime date = firstDateInMonth; date.Date <= lastDateInMonth.Date && date.Date <= DateTime.Now.Date; date = date.AddDays(1))
                    {
                        if (date.Date >= currentPost.ChangeDate.Date && (currentPost.FireDate == null || currentPost.FireDate != null && currentPost.FireDate.Value.Date >= date.Date))
                        {
                            var day = worker.InfoDates.FirstOrDefault(d => d.Date.Date == date.Date);

                            if (day != null)
                            {
                                string hour = null;

                                switch (day.DescriptionDay)
                                {
                                case DescriptionDay.Был:
                                    hour = day.CountHours.ToString();
                                    monthTimeSheetWorker.OverTime += day.CountHours.Value > 8 ? day.CountHours.Value - 8 : 0;

                                    salary += day.CountHours.Value <= 8 ? day.CountHours.Value * monthTimeSheetWorker.SalaryInHour : (8 + ((day.CountHours.Value - 8) * 2)) * monthTimeSheetWorker.SalaryInHour;
                                    break;

                                case DescriptionDay.Б:
                                    if (monthTimeSheetWorker.SickDays < 5)
                                    {
                                        monthTimeSheetWorker.SickDays++;
                                        salary += 8 * monthTimeSheetWorker.SalaryInHour;
                                    }
                                    else
                                    {
                                        monthTimeSheetWorker.MissDays++;
                                    }
                                    break;

                                case DescriptionDay.О:
                                    monthTimeSheetWorker.VocationDays++;
                                    salary += 8 * monthTimeSheetWorker.SalaryInHour;
                                    break;

                                case DescriptionDay.ДО:
                                    break;

                                case DescriptionDay.П:
                                    monthTimeSheetWorker.MissDays++;
                                    break;

                                case DescriptionDay.С:
                                    monthTimeSheetWorker.MissDays++;
                                    break;

                                default:
                                    break;
                                }

                                if (day.DescriptionDay != DescriptionDay.Был)
                                {
                                    hour = day.DescriptionDay.ToString();
                                }

                                monthTimeSheetWorker.Hours[indexHour].WorkerId = worker.Id;
                                monthTimeSheetWorker.Hours[indexHour].Date     = date;
                                monthTimeSheetWorker.Hours[indexHour].Value    = hour;
                            }
                        }

                        indexHour++;
                    }
                }

                var monthTimeSheetWorkerFinalSalary = MonthTimeSheetWorkers.First(m => m.WorkerId == worker.Id && m.FullName != null);

                var infoMonth = worker.InfoMonthes.FirstOrDefault(m => m.Date.Year == SelectedYear && m.Date.Month == SelectedMonth);
                if (infoMonth != null)
                {
                    monthTimeSheetWorkerFinalSalary.PrepaymentCash            = infoMonth.PrepaymentCash.ToString();
                    monthTimeSheetWorkerFinalSalary.PrepaymentBankTransaction = infoMonth.PrepaymentBankTransaction.ToString();
                    monthTimeSheetWorkerFinalSalary.VocationPayment           = infoMonth.VocationPayment.ToString();
                    monthTimeSheetWorkerFinalSalary.SalaryAV    = infoMonth.SalaryAV.ToString();
                    monthTimeSheetWorkerFinalSalary.SalaryFenox = infoMonth.SalaryFenox.ToString();
                    monthTimeSheetWorkerFinalSalary.Panalty     = infoMonth.Panalty.ToString();
                    monthTimeSheetWorkerFinalSalary.Inventory   = infoMonth.Inventory.ToString();
                    monthTimeSheetWorkerFinalSalary.BirthDays   = infoMonth.BirthDays;
                    monthTimeSheetWorkerFinalSalary.Bonus       = infoMonth.Bonus.ToString();
                    monthTimeSheetWorkerFinalSalary.FinalSalary = salary - double.Parse(monthTimeSheetWorkerFinalSalary.PrepaymentCash) - double.Parse(monthTimeSheetWorkerFinalSalary.PrepaymentBankTransaction) -
                                                                  double.Parse(monthTimeSheetWorkerFinalSalary.VocationPayment) - double.Parse(monthTimeSheetWorkerFinalSalary.SalaryAV) - double.Parse(monthTimeSheetWorkerFinalSalary.SalaryFenox) -
                                                                  double.Parse(monthTimeSheetWorkerFinalSalary.Panalty) - double.Parse(monthTimeSheetWorkerFinalSalary.Inventory) - monthTimeSheetWorkerFinalSalary.BirthDays + double.Parse(monthTimeSheetWorkerFinalSalary.Bonus);
                }
            }

            _isLoad = true;
        }