public int GetPaydayEmployer(int id, string fromStr, string toStr) { var employer = _context.Employers.Find(id); double salary = employer.Salary; string group = employer.Group; if (fromStr.Length < 1 || toStr.Length < 1) { return(0); } int dayFrom = Int32.Parse(fromStr.Substring(0, 2)); int monthFrom = Int32.Parse(fromStr.Substring(3, 2)); int yearFrom = Int32.Parse(fromStr.Substring(6, 2)); DateTime dateTimeFrom = new DateTime(yearFrom, monthFrom, dayFrom); int dayTo = Int32.Parse(toStr.Substring(0, 2)); int monthTo = Int32.Parse(toStr.Substring(3, 2)); int yearTo = Int32.Parse(toStr.Substring(6, 2)); DateTime dateTimeTo = new DateTime(yearTo, monthTo, dayTo); int countMonth = (int)(dateTimeTo - dateTimeFrom).TotalDays / 30; // TODO: fix this int expYear = (int)( (DateTime.Parse(employer.WorkedAt) - DateTime.Now.AddMonths(countMonth) ).TotalDays / 365); // SUB List <double> subEmployersSalary = new List <double>(); var subEmployers = _context.Employers .Where(x => x.BossesId == id) .Select(x => x.Id) .ToList(); foreach (var i in subEmployers) { if (i == id) { continue; } subEmployersSalary.Add( GetPaydayEmployer(i, "", "") ); } var paydayHelper = new Payday(); int result = (int)paydayHelper .GetPaydayEmployer(salary, group, expYear, subEmployersSalary); return(result * countMonth - countMonth); }