Esempio n. 1
0
 public static CompanySettings GetCompanySettings(DateTime DateOfSettings)
 {
     using (AccrualsContext accrualsContext = new AccrualsContext())
     {
         return(accrualsContext.CompanySettings.OrderByDescending(x => x.Date <= DateOfSettings).FirstOrDefault());
     }
 }
Esempio n. 2
0
 public static int GetPlannedWorkingDaysForPeriod(DateTime BeginningPeriod, DateTime EndPeriod)
 {
     using (AccrualsContext accrualsContext = new AccrualsContext())
     {
         return
             (accrualsContext.WorkingCalendar
              .Where(p => p.Date >= BeginningPeriod && p.Date <= EndPeriod && !p.Dayoff)
              .Select(p => p.Date).Count());
     }
 }
Esempio n. 3
0
 public static int GetDaysWorkedEmployeeForPeriod(Employee Employee, DateTime BeginningPeriod, DateTime EndPeriod)
 {
     using (AccrualsContext accrualsContext = new AccrualsContext())
     {
         return
             (accrualsContext.WorkingCalendar
              .Where(p => p.Date >= BeginningPeriod && p.Date <= EndPeriod && !p.Dayoff)
              .Select(p => p.Date)
              .Except(accrualsContext.AbsenceFromWork
                      .Where(p => p.EmployeeId == Employee.Id)
                      .Select(p => p.Date)).Count());
     }
 }
Esempio n. 4
0
        public static (DateTime EmploymentDate, DateTime DismissalDate) GetEmployeeWorkPeriod(Employee Employee)
        {
            using (AccrualsContext accrualsContext = new AccrualsContext())
            {
                var workingPeriodOfEmployee =
                    accrualsContext.WorkingPeriodsOfEmployees
                    .Where(p => p.EmployeeId == Employee.Id)
                    .Select(p => new { EmploymentDate = p.EmploymentDate, DismissalDate = p.DismissalDate }).FirstOrDefault();

                return(EmploymentDate : workingPeriodOfEmployee.EmploymentDate,
                       DismissalDate : workingPeriodOfEmployee.DismissalDate == new DateTime(1, 1, 1)
                            ? DateTime.Now : workingPeriodOfEmployee.DismissalDate);
            }
        }
        static void Main(string[] args)
        {
            using (AccrualsContext accrualsContext = new AccrualsContext())
            {
                foreach (Employee employee in accrualsContext.Employees)
                {
                    Console.WriteLine($"Начисления сотрудника {employee.ToString()} равны " +
                                      $"{Calculations.GetEmployeeAccrualsForPeriod(employee, new DateTime(2020, 04, 01), new DateTime(2020, 04, 30)) }");

                    Console.WriteLine($"Размер аванса сотрудника сотрудника {employee.ToString()} равен " +
                                      $"{Calculations.GetEmployeePrepaidExpense(employee, new DateTime(2020, 04, 25)) }");
                }
            }

            Console.ReadLine();
        }
Esempio n. 6
0
        public static int GetEmployeeAccrualsForPeriod(Employee Employee, DateTime BeginningPeriod, DateTime EndPeriod)
        {
            using (AccrualsContext accrualsContext = new AccrualsContext())
            {
                var workingPeriodOfEmployee = accrualsContext.WorkingPeriodsOfEmployees
                                              .Where(p => p.EmployeeId == Employee.Id)
                                              .Select(p => new { Beginning = p.EmploymentDate, End = p.DismissalDate }).ToArray();

                DateTime beginningPeriodAccruals = BeginningPeriod > workingPeriodOfEmployee.Select(p => p.Beginning).FirstOrDefault()
                    ? BeginningPeriod : workingPeriodOfEmployee.Select(p => p.Beginning).FirstOrDefault();

                DateTime endPeriodAccruals = EndPeriod < workingPeriodOfEmployee.Select(p => p.End).FirstOrDefault()
                                             & workingPeriodOfEmployee.Select(p => p.End).FirstOrDefault() != new DateTime(1, 1, 1)
                    ? workingPeriodOfEmployee.Select(p => p.End).FirstOrDefault() : EndPeriod;

                var daysWorked = accrualsContext.WorkingCalendar
                                 .Where(p => p.Date >= beginningPeriodAccruals && p.Date <= endPeriodAccruals && !p.Dayoff)
                                 .Select(p => p.Date)
                                 .Except(accrualsContext.AbsenceFromWork
                                         .Where(p => p.EmployeeId == Employee.Id)
                                         .Select(p => p.Date)).ToArray();

                var allPayRateByWorkingDays =
                    (from workedDay in daysWorked
                     from pr in accrualsContext.PayRates
                     .Where(x => x.Date <= workedDay.Date)
                     select(new { workedDay = workedDay.Date, payRatesDate = pr.Date, rate = pr.Rate })).ToArray();

                var actualPayRateByWorkingDays =
                    (from x in allPayRateByWorkingDays
                     group x by x.workedDay into y
                     select new { workedDay = y.Key, payRatesDate = y.Max(z => z.payRatesDate) }).ToArray();

                var allRatesOfEmloyee =
                    (from x in actualPayRateByWorkingDays
                     join y in allPayRateByWorkingDays on x equals new { workedDay = y.workedDay, payRatesDate = y.payRatesDate }
                     select new { workedDay = x.workedDay, payRatesDate = x.payRatesDate, rate = y.rate }).ToArray();

                return(allRatesOfEmloyee.Sum(x => x.rate));
            }
        }