public static CompanySettings GetCompanySettings(DateTime DateOfSettings) { using (AccrualsContext accrualsContext = new AccrualsContext()) { return(accrualsContext.CompanySettings.OrderByDescending(x => x.Date <= DateOfSettings).FirstOrDefault()); } }
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()); } }
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()); } }
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(); }
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)); } }