public ActionResult Index(int?costSubItemID, int?projectID, int?departmentID, int?year, int?month, int?page) { ViewBag.CurrentCostSubItemID = costSubItemID; ViewBag.CurrentProjectID = projectID; ViewBag.CurrentDepartmentID = departmentID; ViewBag.CurrentYear = year; ViewBag.CurrentMonth = month; var budgetLimits = _budgetLimitService.Get(x => x.Include(bl => bl.Project) .OrderBy(bl => bl.CostSubItem.ShortName) .ThenBy(bl => bl.Department.ShortName) .ThenBy(bl => bl.Year) .ThenBy(bl => bl.Month) .Where(bl => (bl.CostSubItemID == costSubItemID || costSubItemID == null) && (bl.ProjectID == projectID || projectID == null) && (bl.DepartmentID == departmentID || departmentID == null) && (bl.Year == year || year == null) && (bl.Month == month || month == null)).ToList()); SetIndexViewBag(month, year); int pageSize = 200; int pageNumber = (page ?? 1); return(View(budgetLimits.ToPagedList(pageNumber, pageSize))); }
private LongRunningTaskReport ImportBudgetLimitRecords(DataTable budgetLimitTable, int year, bool onlyValidate, string[] execludedColumns) { LongRunningTaskReport report = new LongRunningTaskReport("Отчет о загрузке данных о лимитах за месяц", ""); Dictionary <string, int> mounthDict = GetMounth(); double countRow = budgetLimitTable.Rows.Count; for (int i = 0; i < budgetLimitTable.Rows.Count; i++) { int percent = i == 0 ? 1 : (int)((i / countRow) * 100); SetStatus(percent, "Обработано данных"); var row = budgetLimitTable.Rows[i]; var section = row["Section"].ToString(); if (!section.Trim().ToLower().Equals("цфо", StringComparison.OrdinalIgnoreCase)) { continue; } var costSubItemShortName = row["CostSubItemShortName"].ToString(); var departmentShortTitle = row["DepartmentShortTitle"].ToString(); BudgetLimit[] budgetLimitArrayFromDataTable = Deserialize(row, mounthDict, year); foreach (var budgetLimit in budgetLimitArrayFromDataTable) { var results = _budgetLimitService .Get(query => query .Where(b => b.Month == budgetLimit.Month && b.Year == budgetLimit.Year && b.CostSubItem.ShortName.Equals(costSubItemShortName.Trim(), StringComparison.OrdinalIgnoreCase) && b.Department.ShortTitle.Equals(departmentShortTitle.Trim(), StringComparison.OrdinalIgnoreCase)) .ToList()); if (results.Count == 0) // добавляем { var costSubItem = _costSubItemService.Get(query => query.Where(c => c.ShortName.Equals(costSubItemShortName.Trim(), StringComparison.OrdinalIgnoreCase)).ToList()).FirstOrDefault(); if (costSubItem == null) { if (!onlyValidate) { report.AddReportEvent($"Не удалось добавить лимит: {budgetLimit.LimitAmount}, на месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}, не найдена подстатья: {costSubItemShortName}"); } else { report.AddReportEvent($"Не найдена подстатья: {costSubItemShortName}, для лимита: {budgetLimit.LimitAmount}, на месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}"); } continue; } var department = _departmentService.Get(query => query.Where(d => d.ShortTitle.Equals(departmentShortTitle.Trim(), StringComparison.OrdinalIgnoreCase)).ToList()).FirstOrDefault(); if (department == null) { if (!onlyValidate) { report.AddReportEvent($"Не удалось добавить лимит: {budgetLimit.LimitAmount}, на месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}, не найдено подразделение: {departmentShortTitle}"); } else { report.AddReportEvent($"Не найдено подразделение: {departmentShortTitle}, для лимита: {budgetLimit.LimitAmount}, на месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}"); } continue; } budgetLimit.CostSubItemID = costSubItem.ID; budgetLimit.DepartmentID = department.ID; if (!onlyValidate) { var limitDto = _budgetLimitService.GetLimitData(budgetLimit.CostSubItemID.Value, budgetLimit.DepartmentID.Value, budgetLimit.ProjectID, budgetLimit.Year.Value, budgetLimit.Month.Value); if (limitDto != null) { budgetLimit.LimitAmountApproved = limitDto.LimitAmountReserved; budgetLimit.FundsExpendedAmount = limitDto.LimitAmountActuallySpent; } else { budgetLimit.LimitAmountApproved = 0; budgetLimit.FundsExpendedAmount = 0; } _budgetLimitService.Add(budgetLimit); report.AddReportEvent($"Добавлен лимит: {budgetLimit.LimitAmount}, на месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}, подстатья: {costSubItemShortName}, подразделение: {departmentShortTitle}"); } else { report.AddReportEvent($"Лимит еще не создан: {budgetLimit.LimitAmount}, на месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}, подстатья: {costSubItemShortName}, подразделение: {departmentShortTitle}"); } } else // обновляем { if (!onlyValidate) { var budgetLimitFromDB = results.FirstOrDefault(); decimal?limitAmountOldValue = budgetLimitFromDB.LimitAmount; if (budgetLimitFromDB.LimitAmount != budgetLimit.LimitAmount.Value) { budgetLimitFromDB.LimitAmount = budgetLimit.LimitAmount.Value; _budgetLimitService.Update(budgetLimitFromDB); report.AddReportEvent($"Обновлен лимит: {budgetLimit.LimitAmount}, (старое значение: {limitAmountOldValue}), месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}, подстатья: {costSubItemShortName}, подразделение: {departmentShortTitle}"); } else { report.AddReportEvent($"Не изменилось значение лимита: {budgetLimit.LimitAmount}, месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}, подстатья: {costSubItemShortName}, подразделение: {departmentShortTitle}"); } } else { report.AddReportEvent($"Найден лимит: {results.FirstOrDefault().LimitAmount}, (новое значение: {budgetLimit.LimitAmount}), месяц: {CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(budgetLimit.Month.Value)}, подстатья: {costSubItemShortName}, подразделение: {departmentShortTitle}"); } } } } return(report); }