public ActionResult DeleteConfirmed(int id) { EmployeeQualifyingRole employeeQualifyingRoleAssignment = _employeeQualifyingRoleService.GetById((int)id); if (employeeQualifyingRoleAssignment != null) { _employeeQualifyingRoleService.Delete(id); } return(RedirectToAction("Index")); }
public ActionResult Details(int?id) { if (id == null) { return(StatusCode(StatusCodes.Status400BadRequest)); } EmployeeQualifyingRole employeeQualifyingRoleAssignment = _employeeQualifyingRoleService.GetById((int)id); if (employeeQualifyingRoleAssignment == null) { return(StatusCode(StatusCodes.Status404NotFound)); } return(View(employeeQualifyingRoleAssignment)); }
public ActionResult Edit(int?id) { if (id == null) { return(StatusCode(StatusCodes.Status400BadRequest)); } EmployeeQualifyingRole employeeQualifyingRoleAssignment = _employeeQualifyingRoleService.GetById((int)id); if (employeeQualifyingRoleAssignment == null) { return(StatusCode(StatusCodes.Status404NotFound)); } ViewBag.EmployeeID = new SelectList(_employeeService.Get(x => x.ToList()), "ID", "FullName", employeeQualifyingRoleAssignment.EmployeeID); ViewBag.QualifyingRoleID = new SelectList(_qualifyingRoleService.Get(x => x.ToList()), "ID", "FullName", employeeQualifyingRoleAssignment.QualifyingRoleID); return(View(employeeQualifyingRoleAssignment)); }
public ActionResult Create(EmployeeQualifyingRole employeeQualifyingRoleAssignment) { if (ModelState.IsValid) { // Получаем сотрудника var employee = _employeeService.GetById((int)employeeQualifyingRoleAssignment.EmployeeID); // Получаем все УПР в отсортированном по убыванию порядке по полю закрытия var qualifyingRoleList = _employeeQualifyingRoleService.Get(e => e .Where(x => x.EmployeeID == employeeQualifyingRoleAssignment.EmployeeID && x.QualifyingRoleDateBegin >= employee.EnrollmentDate).OrderByDescending(x => x.QualifyingRoleDateEnd).ToList()); // Проверяем на зыкрытость УПР bool isOpenQualifyingRoleNotExists = (qualifyingRoleList.Where(x => x.QualifyingRoleDateEnd == null).Count() == 0); if (isOpenQualifyingRoleNotExists) { //Проверка на корректный ввод данных if (((employee.EnrollmentDate == null) && (employee.DismissalDate == null)) || ((employee.EnrollmentDate == null) && (employee.DismissalDate != null))) { ModelState.AddModelError("Comments", "Нельзя создать УПР."); } else if (employeeQualifyingRoleAssignment.QualifyingRoleDateBegin == null) { ModelState.AddModelError("QualifyingRoleDateBegin", "Это поле должно быть заполнено."); } else if (employee.EnrollmentDate > employeeQualifyingRoleAssignment.QualifyingRoleDateBegin) { ModelState.AddModelError("QualifyingRoleDateBegin", "В это время сотрудник не работал."); } else if (employeeQualifyingRoleAssignment.QualifyingRoleDateBegin >= employeeQualifyingRoleAssignment.QualifyingRoleDateEnd) { ModelState.AddModelError("QualifyingRoleDateEnd", "Дата окончания не может быть меньше или равна дате назначения."); } else if (employee.DismissalDate < employeeQualifyingRoleAssignment.QualifyingRoleDateEnd) { ModelState.AddModelError("QualifyingRoleDateEnd", "В это время сотрудник был уволен."); } else { DateTime endDate; if (qualifyingRoleList.Count == 0) { endDate = employee.EnrollmentDate.Value; } else { endDate = qualifyingRoleList.FirstOrDefault().QualifyingRoleDateEnd.Value.AddDays(1); } if (employeeQualifyingRoleAssignment.QualifyingRoleDateBegin == endDate) { employeeQualifyingRoleAssignment.QualifyingRoleDateBegin = endDate; } else { ModelState.AddModelError("QualifyingRoleDateBegin", "Допустимая дата " + endDate.ToShortDateString()); } } } else { ModelState.AddModelError("QualifyingRoleDateEnd", "Необходимо закрыть УПР для этого сотрудника."); } } if (ModelState.IsValid) { _employeeQualifyingRoleService.Add(employeeQualifyingRoleAssignment); string returnUrl = Url.Action("Details", "Employee", new { id = employeeQualifyingRoleAssignment.EmployeeID + "#employeequalifyingrole" }).Replace("%23", "#"); return(new RedirectResult(returnUrl)); } ViewBag.EmployeeID = new SelectList(_employeeService.Get(x => x.ToList()), "ID", "FullName", employeeQualifyingRoleAssignment.EmployeeID); ViewBag.QualifyingRoleID = new SelectList(_qualifyingRoleService.Get(x => x.ToList()), "ID", "FullName", employeeQualifyingRoleAssignment.QualifyingRoleID); return(View(employeeQualifyingRoleAssignment)); }
public ActionResult Edit(EmployeeQualifyingRole employeeQualifyingRoleAssignment) { if (ModelState.IsValid) { if (employeeQualifyingRoleAssignment.QualifyingRoleDateBegin == null) { ModelState.AddModelError("QualifyingRoleDateBegin", "Это поле должно быть заполнено."); } else { // Получаем сотрудника var employee = _employeeService.GetById((int)employeeQualifyingRoleAssignment.EmployeeID); // Получаем все УПР с данным EmployeeId var qualifyingRoleList = _employeeQualifyingRoleService.Get(e => e .Where(x => x.EmployeeID == employeeQualifyingRoleAssignment.EmployeeID && x.QualifyingRoleDateBegin >= employee.EnrollmentDate) .OrderBy(x => x.QualifyingRoleDateEnd).AsNoTracking().ToList()); // Получаем ещё неизмененный объект var notChangeQualifyingRole = qualifyingRoleList.Where(x => x.ID == employeeQualifyingRoleAssignment.ID).FirstOrDefault(); // Смотрим есть ли незакрытые УПР var isOpenCategorieNotExis = (qualifyingRoleList.Where(x => x.QualifyingRoleDateEnd == null).Count() == 0); // Получаем первый объект из выборки EmployeeQualifyingRole firstQualifyingRole = (!isOpenCategorieNotExis) ? qualifyingRoleList.FirstOrDefault() : qualifyingRoleList.LastOrDefault(); if (((employee.EnrollmentDate == null) && (employee.DismissalDate == null)) || ((employee.EnrollmentDate == null) && (employee.DismissalDate != null)) || firstQualifyingRole == null || notChangeQualifyingRole == null) { ModelState.AddModelError("Comments", "Нельзя редактировать УПР."); } else { // Если первый объект из thisQualifyingRoleInDB равен notChangeQualifyingRole, значит мы работает с последним объектом из категории сотрудника if (firstQualifyingRole.ID == notChangeQualifyingRole.ID) { if (employee.EnrollmentDate > employeeQualifyingRoleAssignment.QualifyingRoleDateBegin) { ModelState.AddModelError("QualifyingRoleDateBegin", "В это время сотрудник не работал."); } else if (employeeQualifyingRoleAssignment.QualifyingRoleDateBegin >= employeeQualifyingRoleAssignment.QualifyingRoleDateEnd) { ModelState.AddModelError("QualifyingRoleDateEnd", "Дата окончания не может быть меньше или равна дате назначения."); } else if (employee.DismissalDate < employeeQualifyingRoleAssignment.QualifyingRoleDateEnd) { ModelState.AddModelError("QualifyingRoleDateEnd", "В это время сотрудник был уволен."); } else if (employeeQualifyingRoleAssignment.QualifyingRoleDateBegin != notChangeQualifyingRole.QualifyingRoleDateBegin) { ModelState.AddModelError("QualifyingRoleDateBegin", "Допустимая дата " + notChangeQualifyingRole.QualifyingRoleDateBegin.Value.ToShortDateString()); } } else { if ((notChangeQualifyingRole.QualifyingRoleDateBegin != employeeQualifyingRoleAssignment.QualifyingRoleDateBegin) || (notChangeQualifyingRole.QualifyingRoleDateEnd != employeeQualifyingRoleAssignment.QualifyingRoleDateEnd)) { ModelState.AddModelError("QualifyingRoleDateBegin", "Для данной УПР поля с датой менять нельзя."); } } } } } if (ModelState.IsValid) { _employeeQualifyingRoleService.Update(employeeQualifyingRoleAssignment); string returnUrl = Url.Action("Details", "Employee", new { id = employeeQualifyingRoleAssignment.EmployeeID + "#employeequalifyingrole" }).Replace("%23", "#"); return(new RedirectResult(returnUrl)); } ViewBag.EmployeeID = new SelectList(_employeeService.Get(x => x.ToList()), "ID", "FullName", employeeQualifyingRoleAssignment.EmployeeID); ViewBag.QualifyingRoleID = new SelectList(_qualifyingRoleService.Get(x => x.ToList()), "ID", "FullName", employeeQualifyingRoleAssignment.QualifyingRoleID); return(View(employeeQualifyingRoleAssignment)); }
public ReportGeneratorResult ProcessLongRunningAction(string userIdentityName, string id, string reportDate, bool?reportRecalcQualifyingRoleRates, int?reportHoursPlan, List <QualifyingRoleRateFRCCalcParamRecord> qualifyingRoleRateFRCCalcParamRecordList, List <int> departmentsIDs, DataTable employeePayrollSheetDataTable) { var htmlErrorReport = string.Empty; taskId = id; byte[] binData = null; try { SetStatus(0, "Старт формирования отчета..."); if (reportRecalcQualifyingRoleRates == null) { reportRecalcQualifyingRoleRates = false; } DateTime rDate = DateTime.MinValue; try { rDate = Convert.ToDateTime(reportDate); } catch (Exception) { rDate = DateTime.MinValue; } DataTable dataTableEmployee = new DataTable(); dataTableEmployee.Columns.Add("FCDepartmentShortName", typeof(string)).Caption = "ЦФО"; dataTableEmployee.Columns["FCDepartmentShortName"].ExtendedProperties["Width"] = (double)9; dataTableEmployee.Columns.Add("DepartmentShortName", typeof(int)).Caption = "Код"; dataTableEmployee.Columns["DepartmentShortName"].ExtendedProperties["Width"] = (double)6; dataTableEmployee.Columns.Add("Department", typeof(string)).Caption = "Подразделение"; dataTableEmployee.Columns["Department"].ExtendedProperties["Width"] = (double)60; dataTableEmployee.Columns.Add("DepartmentEmployeeCount", typeof(int)).Caption = "Кол-во"; dataTableEmployee.Columns["DepartmentEmployeeCount"].ExtendedProperties["Width"] = (double)10; dataTableEmployee.Columns.Add("Position", typeof(string)).Caption = "Позиция"; dataTableEmployee.Columns["Position"].ExtendedProperties["Width"] = (double)45; dataTableEmployee.Columns.Add("EmployeeTitle", typeof(string)).Caption = "Фамилия Имя Отчество"; dataTableEmployee.Columns["EmployeeTitle"].ExtendedProperties["Width"] = (double)39; dataTableEmployee.Columns.Add("EmployeePayroll", typeof(int)).Caption = "КОТ"; dataTableEmployee.Columns["EmployeePayroll"].ExtendedProperties["Width"] = (double)9; dataTableEmployee.Columns.Add("EmployeeGrad", typeof(int)).Caption = "Грейд"; dataTableEmployee.Columns["EmployeeGrad"].ExtendedProperties["Width"] = (double)8; dataTableEmployee.Columns.Add("EmployeeCategoryTitle", typeof(string)).Caption = "Категория"; dataTableEmployee.Columns["EmployeeCategoryTitle"].ExtendedProperties["Width"] = (double)39; dataTableEmployee.Columns.Add("EmployeeQualifyingRoleTitle", typeof(string)).Caption = "УПР"; dataTableEmployee.Columns["EmployeeQualifyingRoleTitle"].ExtendedProperties["Width"] = (double)39; dataTableEmployee.Columns.Add("EmployeeQualifyingRoleType", typeof(string)).Caption = "Тип"; dataTableEmployee.Columns["EmployeeQualifyingRoleType"].ExtendedProperties["Width"] = (double)9; dataTableEmployee.Columns.Add("EmployeeQualifyingRoleRate", typeof(double)).Caption = "Ставка УПР/час, руб"; dataTableEmployee.Columns["EmployeeQualifyingRoleRate"].ExtendedProperties["Width"] = (double)9; dataTableEmployee.Columns.Add("EmployeeEnrollmentDate", typeof(DateTime)).Caption = "Принят"; dataTableEmployee.Columns["EmployeeEnrollmentDate"].ExtendedProperties["Width"] = (double)12; dataTableEmployee.Columns.Add("_ISGROUPROW_", typeof(bool)).Caption = "_ISGROUPROW_"; if (reportRecalcQualifyingRoleRates == true) { _financeService.SetQualifyingRoleRateHoursPlanCalcParam(reportHoursPlan.Value.ToString()); string qualifyingRoleRateFRCCalcParamRecordListJson = JsonConvert.SerializeObject(qualifyingRoleRateFRCCalcParamRecordList); _financeService.SetQualifyingRoleRateFRCCalcParamRecordListJson( qualifyingRoleRateFRCCalcParamRecordListJson); List <QualifyingRole> productionQualifyingRoleList = _qualifyingRoleService.Get(x => x.Where(qr => qr.RoleType == QualifyingRoleType.Production).OrderBy(qr => qr.ShortName) .ToList()).ToList(); int j = 0; foreach (QualifyingRoleRateFRCCalcParamRecord qualifyingRoleRateFRCCalcParamRecord in qualifyingRoleRateFRCCalcParamRecordList) { SetStatus(j * 50 / qualifyingRoleRateFRCCalcParamRecordList.Count, "Перерасчет ставок УПР для ЦФО - шаг " + (j + 1).ToString() + " из " + qualifyingRoleRateFRCCalcParamRecordList.Count); List <Employee> employeeInDepartmentList = GetEmployeesInFRCDepartment(qualifyingRoleRateFRCCalcParamRecord.DepartmentID); foreach (QualifyingRole qualifyingRole in productionQualifyingRoleList) { int employeeCountInDepartment = 0; double employeePayrollSum = 0; foreach (Employee employeeItem in employeeInDepartmentList) { EmployeeCategory employeeCategory = _employeeCategoryService.Get(x => x .Where(ec => ec.EmployeeID == employeeItem.ID) .OrderBy(ec => ec.CategoryDateEnd).Where(ec => ec.CategoryDateBegin != null && ec.CategoryDateBegin <= rDate && (ec.CategoryDateEnd == null || ec.CategoryDateEnd >= rDate)) .ToList()).FirstOrDefault(); if (employeeCategory != null && (employeeCategory.CategoryType == EmployeeCategoryType.Regular || employeeCategory.CategoryType == EmployeeCategoryType.Temporary)) { EmployeeQualifyingRole employeeQualifyingRole = _employeeQualifyingRoleService.Get( x => x.Include(eqr => eqr.QualifyingRole) .Where(eqr => eqr.EmployeeID == employeeItem.ID) .OrderBy(eqr => eqr.QualifyingRoleDateEnd).Where(eqr => eqr.QualifyingRoleDateBegin != null && eqr.QualifyingRoleDateBegin <= rDate && (eqr.QualifyingRoleDateEnd == null || eqr.QualifyingRoleDateEnd >= rDate)).ToList()).FirstOrDefault(); if (employeeQualifyingRole != null && employeeQualifyingRole.QualifyingRole.ID == qualifyingRole.ID) { double employeePayrollValue = _financeService.GetEmployeePayrollOnDate(employeePayrollSheetDataTable, employeeItem, rDate, false, null); if (employeePayrollValue > 0) { employeePayrollSum += employeePayrollValue; employeeCountInDepartment++; } else if (employeePayrollValue < 0) { employeePayrollSum += (-employeePayrollValue) * reportHoursPlan.Value; employeeCountInDepartment++; } } } } if (employeeCountInDepartment != 0) { decimal actualAverageMonthPayrollValue = Convert.ToDecimal(employeePayrollSum / employeeCountInDepartment); decimal actualAverageHourPayrollValue = Convert.ToDecimal(actualAverageMonthPayrollValue / reportHoursPlan.Value); decimal monthRateValue = actualAverageMonthPayrollValue * Convert.ToDecimal( qualifyingRoleRateFRCCalcParamRecord.FRCCorrectionFactor * qualifyingRoleRateFRCCalcParamRecord.FRCInflationRate); decimal rateValue = actualAverageHourPayrollValue * Convert.ToDecimal( qualifyingRoleRateFRCCalcParamRecord.FRCCorrectionFactor * qualifyingRoleRateFRCCalcParamRecord.FRCInflationRate); QualifyingRoleRate qualifyingRoleRate = _qualifyingRoleRateService.Get(x => x .Where(qrr => qrr.QualifyingRoleID == qualifyingRole.ID && qrr.DepartmentID == qualifyingRoleRateFRCCalcParamRecord.DepartmentID && qrr.RateDateBegin == rDate).ToList()).FirstOrDefault(); if (qualifyingRoleRate != null) { qualifyingRoleRate.HoursPlan = reportHoursPlan; qualifyingRoleRate.ActualAverageMonthPayrollValue = actualAverageMonthPayrollValue; qualifyingRoleRate.ActualAverageHourPayrollValue = actualAverageHourPayrollValue; qualifyingRoleRate.MonthRateValue = monthRateValue; qualifyingRoleRate.RateValue = rateValue; qualifyingRoleRate.FRCCorrectionFactorValue = Convert.ToDecimal(qualifyingRoleRateFRCCalcParamRecord.FRCCorrectionFactor); qualifyingRoleRate.FRCInflationRateValue = Convert.ToDecimal(qualifyingRoleRateFRCCalcParamRecord.FRCInflationRate); _qualifyingRoleRateService.Update(qualifyingRoleRate); } else { qualifyingRoleRate = new QualifyingRoleRate(); qualifyingRoleRate.QualifyingRoleID = qualifyingRole.ID; qualifyingRoleRate.DepartmentID = qualifyingRoleRateFRCCalcParamRecord.DepartmentID; qualifyingRoleRate.RateDateBegin = rDate; qualifyingRoleRate.HoursPlan = reportHoursPlan; qualifyingRoleRate.ActualAverageMonthPayrollValue = actualAverageMonthPayrollValue; qualifyingRoleRate.ActualAverageHourPayrollValue = actualAverageHourPayrollValue; qualifyingRoleRate.MonthRateValue = monthRateValue; qualifyingRoleRate.RateValue = rateValue; qualifyingRoleRate.FRCCorrectionFactorValue = Convert.ToDecimal(qualifyingRoleRateFRCCalcParamRecord.FRCCorrectionFactor); qualifyingRoleRate.FRCInflationRateValue = Convert.ToDecimal(qualifyingRoleRateFRCCalcParamRecord.FRCInflationRate); _qualifyingRoleRateService.Add(qualifyingRoleRate); } } } j++; } } List <Employee> currentEmployeeList = _employeeService.GetCurrentEmployees(new DateTimeRange(rDate, rDate)).ToList() .Where(e => e.Department != null) .ToList().OrderBy(e => e.Department.ShortName + e.FullName).ToList(); if (departmentsIDs == null) { currentEmployeeList = currentEmployeeList.Where(e => e.Department != null).ToList(); } else { currentEmployeeList = currentEmployeeList.Where(e => e.Department != null && departmentsIDs.Contains(e.Department.ID)).ToList(); } int k = 0; var employeeCount = currentEmployeeList.Count(); foreach (var group in currentEmployeeList.GroupBy(e => e.Department.ShortName)) { String frcDepartmentShortName = ""; Department frcDepartment = group.FirstOrDefault().Department; while (frcDepartment.ParentDepartment != null && frcDepartment.IsFinancialCentre == false) { frcDepartment = frcDepartment.ParentDepartment; } if (frcDepartment.IsFinancialCentre == true) { frcDepartmentShortName = frcDepartment.DisplayShortTitle; } int departmentShortNameIntValue = 0; try { departmentShortNameIntValue = Convert.ToInt32(group.Key.Replace("-", "")); } catch (Exception) { departmentShortNameIntValue = 0; } dataTableEmployee.Rows.Add(frcDepartmentShortName, departmentShortNameIntValue, "", group.Count(), "", ""); int departmentRowIndex = dataTableEmployee.Rows.Count - 1; dataTableEmployee.Rows[departmentRowIndex]["_ISGROUPROW_"] = true; foreach (var employeeItem in group) { String employeeItemFullName = ""; if (String.IsNullOrEmpty(employeeItem.LastName) == false) { employeeItemFullName = employeeItem.LastName; } if (String.IsNullOrEmpty(employeeItem.FirstName) == false) { employeeItemFullName += " " + employeeItem.FirstName; } if (String.IsNullOrEmpty(employeeItem.MidName) == false) { employeeItemFullName += " " + employeeItem.MidName; } employeeItemFullName = employeeItemFullName.Trim(); SetStatus(55 + 20 * k / employeeCount, "УПР для: " + employeeItemFullName); dataTableEmployee.Rows.Add(frcDepartmentShortName, departmentShortNameIntValue, ((group.First().Department != null) ? group.First().Department.Title : ""), null, ((employeeItem.EmployeePositionTitle != null) ? employeeItem.EmployeePositionTitle : ""), employeeItemFullName); if (employeeItem.EmployeeGradID != null && employeeItem.EmployeeGrad != null) { int employeeGradShortNameIntValue = 0; try { employeeGradShortNameIntValue = Convert.ToInt32(employeeItem.EmployeeGrad.ShortName); } catch (Exception) { employeeGradShortNameIntValue = 0; } if (employeeGradShortNameIntValue != 0) { dataTableEmployee.Rows[dataTableEmployee.Rows.Count - 1]["EmployeeGrad"] = employeeGradShortNameIntValue; } } string employeeCategoryTitle = ""; EmployeeCategory employeeCategory = _employeeCategoryService.Get(x => x .Where(ec => ec.EmployeeID == employeeItem.ID).OrderBy(ec => ec.CategoryDateEnd).Where( ec => ec.CategoryDateBegin != null && ec.CategoryDateBegin <= rDate && (ec.CategoryDateEnd == null || ec.CategoryDateEnd >= rDate)).ToList()) .FirstOrDefault(); if (employeeCategory != null) { employeeCategoryTitle = ((DisplayAttribute)(employeeCategory.CategoryType.GetType() .GetMember(employeeCategory.CategoryType.ToString()).First() .GetCustomAttributes(true)[0])).Name; } if (String.IsNullOrEmpty(employeeCategoryTitle) == false) { dataTableEmployee.Rows[dataTableEmployee.Rows.Count - 1]["EmployeeCategoryTitle"] = employeeCategoryTitle; } string employeeQualifyingRoleTitle = ""; string employeeQualifyingRoleType = ""; EmployeeQualifyingRole employeeQualifyingRole = _employeeQualifyingRoleService.Get(x => x .Where(eqr => eqr.EmployeeID == employeeItem.ID).OrderBy(eqr => eqr.QualifyingRoleDateEnd) .Where(eqr => eqr.QualifyingRoleDateBegin != null && eqr.QualifyingRoleDateBegin <= rDate && (eqr.QualifyingRoleDateEnd == null || eqr.QualifyingRoleDateEnd >= rDate)) .ToList()).FirstOrDefault(); if (employeeQualifyingRole != null) { employeeQualifyingRoleTitle = employeeQualifyingRole.QualifyingRole.FullName; employeeQualifyingRoleType = ((DisplayAttribute)(employeeQualifyingRole.QualifyingRole .RoleType.GetType().GetMember(employeeQualifyingRole.QualifyingRole.RoleType.ToString()) .First().GetCustomAttributes(true)[0])).Name; } if (String.IsNullOrEmpty(employeeQualifyingRoleTitle) == false) { dataTableEmployee.Rows[dataTableEmployee.Rows.Count - 1]["EmployeeQualifyingRoleTitle"] = employeeQualifyingRoleTitle; dataTableEmployee.Rows[dataTableEmployee.Rows.Count - 1]["EmployeeQualifyingRoleType"] = employeeQualifyingRoleType; } if (employeeQualifyingRole != null) { QualifyingRoleRate qualifyingRoleRate = _qualifyingRoleRateService.Get(x => x.Where(qrr => qrr.QualifyingRoleID == employeeQualifyingRole.QualifyingRole.ID && qrr.DepartmentID == frcDepartment.ID && qrr.RateDateBegin != null && qrr.RateDateBegin <= rDate) .OrderByDescending(qrr => qrr.RateDateBegin).ToList()).FirstOrDefault(); if (qualifyingRoleRate != null && qualifyingRoleRate.RateValue != null) { dataTableEmployee.Rows[dataTableEmployee.Rows.Count - 1]["EmployeeQualifyingRoleRate"] = Convert.ToDouble(qualifyingRoleRate.RateValue); } } if (employeeItem.EnrollmentDate != null && employeeItem.EnrollmentDate.HasValue == true) { dataTableEmployee.Rows[dataTableEmployee.Rows.Count - 1]["EmployeeEnrollmentDate"] = employeeItem.EnrollmentDate.Value; } double employeePayrollValue = _financeService.GetEmployeePayrollOnDate(employeePayrollSheetDataTable, employeeItem, rDate, false, null); if (employeePayrollValue != 0) { dataTableEmployee.Rows[dataTableEmployee.Rows.Count - 1]["EmployeePayroll"] = (int)employeePayrollValue; } k++; } } SetStatus(80, "Формирование таблицы ставок УПР по ЦФО..."); DataTable dataTableQualifyingRoleRate = new DataTable(); dataTableQualifyingRoleRate.Columns.Add("FCDepartmentShortName", typeof(string)).Caption = "ЦФО"; dataTableQualifyingRoleRate.Columns["FCDepartmentShortName"].ExtendedProperties["Width"] = (double)9; dataTableQualifyingRoleRate.Columns.Add("DepartmentShortName", typeof(string)).Caption = "Код"; dataTableQualifyingRoleRate.Columns["DepartmentShortName"].ExtendedProperties["Width"] = (double)6; dataTableQualifyingRoleRate.Columns.Add("Department", typeof(string)).Caption = "Подразделение"; dataTableQualifyingRoleRate.Columns["Department"].ExtendedProperties["Width"] = (double)60; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleTitle", typeof(string)).Caption = "УПР"; dataTableQualifyingRoleRate.Columns["QualifyingRoleTitle"].ExtendedProperties["Width"] = (double)39; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleRateDateBegin", typeof(DateTime)).Caption = "Действует с"; dataTableQualifyingRoleRate.Columns["QualifyingRoleRateDateBegin"].ExtendedProperties["Width"] = (double)12; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleHoursPlan", typeof(int)).Caption = "Часыплан"; dataTableQualifyingRoleRate.Columns["QualifyingRoleHoursPlan"].ExtendedProperties["Width"] = (double)12; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleActualAverageMonthPayroll", typeof(double)) .Caption = "Факт КОТ/мес, руб."; dataTableQualifyingRoleRate.Columns["QualifyingRoleActualAverageMonthPayroll"] .ExtendedProperties["Width"] = (double)12; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleActualAverageHourPayrol", typeof(double)).Caption = "Факт КОТ/час, руб."; dataTableQualifyingRoleRate.Columns["QualifyingRoleActualAverageHourPayrol"] .ExtendedProperties["Width"] = (double)12; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleFRCCorrectionFactor", typeof(double)).Caption = "ПК-тцфо"; dataTableQualifyingRoleRate.Columns["QualifyingRoleFRCCorrectionFactor"].ExtendedProperties["Width"] = (double)12; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleFRCInflationRate", typeof(double)).Caption = "ИК-тцфо"; dataTableQualifyingRoleRate.Columns["QualifyingRoleFRCInflationRate"].ExtendedProperties["Width"] = (double)12; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleMonthRate", typeof(double)).Caption = "Ставка УПР/мес, руб"; dataTableQualifyingRoleRate.Columns["QualifyingRoleMonthRate"].ExtendedProperties["Width"] = (double)12; dataTableQualifyingRoleRate.Columns.Add("QualifyingRoleRate", typeof(double)).Caption = "Ставка УПР/час, руб"; dataTableQualifyingRoleRate.Columns["QualifyingRoleRate"].ExtendedProperties["Width"] = (double)12; List <QualifyingRoleRate> qualifyingRoleRateList = null; try { qualifyingRoleRateList = _qualifyingRoleRateService.Get(x => x.Include(qrr => qrr.Department) .Include(qrr => qrr.QualifyingRole).ToList() .OrderByDescending(qrr => qrr.RateDateBegin) .Where(qrr => qrr.RateDateBegin != null && qrr.RateDateBegin <= rDate) .ToList().GroupBy(qrr => qrr.RateDateBegin).FirstOrDefault().ToList() .OrderBy(qrr => qrr.Department.ShortName).ToList()).ToList(); } catch (Exception) { qualifyingRoleRateList = null; } if (qualifyingRoleRateList != null) { foreach (QualifyingRoleRate qualifyingRoleRateItem in qualifyingRoleRateList) { try { dataTableQualifyingRoleRate.Rows.Add(qualifyingRoleRateItem.Department.DisplayShortTitle, qualifyingRoleRateItem.Department.ShortName, qualifyingRoleRateItem.Department.Title, qualifyingRoleRateItem.QualifyingRole.FullName, qualifyingRoleRateItem.RateDateBegin, qualifyingRoleRateItem.HoursPlan, qualifyingRoleRateItem.ActualAverageMonthPayrollValue, qualifyingRoleRateItem.ActualAverageHourPayrollValue, qualifyingRoleRateItem.FRCCorrectionFactorValue, qualifyingRoleRateItem.FRCInflationRateValue, qualifyingRoleRateItem.MonthRateValue, qualifyingRoleRateItem.RateValue); } catch (Exception) { } } } SetStatus(95, "Формирование файла MS Excel..."); using (MemoryStream stream = new MemoryStream()) { using (SpreadsheetDocument doc = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook)) { string sheetsName = "УПР|Ставки УПР"; WorkbookPart workbookPart = ExcelHelper.CreateWorkbookPart(doc, sheetsName); int partIndex = 1; ExcelHelper.CreateWorksheetPartAndImportDataTable(workbookPart, "rId" + partIndex.ToString(), 1, 1, (uint)dataTableEmployee.Columns.Count, null, dataTableEmployee, 1, 1); partIndex++; ExcelHelper.CreateWorksheetPartAndImportDataTable(workbookPart, "rId" + partIndex.ToString(), 1, 1, (uint)dataTableEmployee.Columns.Count, null, dataTableQualifyingRoleRate, 1, 1); doc.WorkbookPart.Workbook.Save(); } stream.Position = 0; BinaryReader b = new BinaryReader(stream); binData = b.ReadBytes((int)stream.Length); } SetStatus(100, "Отчет сформирован"); return(new ReportGeneratorResult() { fileId = id, fileBinData = binData }); } catch (Exception e) { SetStatus(-1, "Ошибка: " + e.Message.Replace("\r", "").Replace("\n", " ")); htmlErrorReport += "<br>" + e.Message + "<br>" + e.StackTrace + "<br>" + e.TargetSite.ToString(); } return(new ReportGeneratorResult() { fileId = id, fileBinData = binData, htmlErrorReport = htmlErrorReport }); }