/// <summary> /// Функция, возвращающая количество записей о работниках /// </summary> /// <param name="searchString">Строка поиска</param> /// <param name="filter">Критерии выбора данных</param> /// <returns>Количество записей</returns> public int GetCount(string searchString, EmployeeFilterDefinition filter) { IQueryable <Employee> request; if (!string.IsNullOrEmpty(searchString)) { request = _applicationContext.Employees .SqlQuery( $"SELECT * FROM \"Employees\" " + $"WHERE \"Employees\".\"Id\" || ' ' || \"Employees\".\"Name\" || ' ' || \"Employees\".\"Surname\" || ' ' ||" + $" \"Employees\".\"Patronymic\" ~* '{MakeSearchRegexp(searchString)}'") .AsQueryable(); } else { request = _applicationContext.Employees.AsQueryable(); } request = request.Where(x => x.DeletedAt == null); #region Применение критериев выбора к запросу if (filter.IsByGender) { request = request.Where(x => x.Gender == filter.Gender); } if (filter.IsByDateBirth) { if (filter.DateBirthLowBound != null) { request = request.Where(x => x.DateBirth >= filter.DateBirthLowBound); } if (filter.DateBirthHighBound != null) { request = request.Where(x => x.DateBirth <= filter.DateBirthHighBound); } } if (filter.IsByRole) { request = request.Where(x => x.Role == filter.Role); } #endregion return(request.Count()); }
/// <summary> /// Функция возвращает список записей работников /// </summary> /// <param name="searchString">Строка поиска</param> /// <param name="sortBy">Поле, по которому сортируется спиоск</param> /// <param name="sortDirection">Направление сортировки true - возрастание, false - убывание</param> /// <param name="filter">Критерии выбора данных</param> /// <param name="limit">Ограничение величины списка</param> /// <param name="offset">Смещение относительно начала списка</param> /// <returns>Список записей работников</returns> public List <Employee> Get(string searchString, string sortBy, bool sortDirection, EmployeeFilterDefinition filter, int limit, int offset) { IQueryable <Employee> request; //RAW (сырой) начало построения запроса //для применения текстового поиска if (!string.IsNullOrEmpty(searchString)) { request = _applicationContext.Employees .SqlQuery( $"SELECT * FROM \"Employees\" " + $"WHERE \"Employees\".\"Id\" || ' ' || \"Employees\".\"Name\" || ' ' || \"Employees\".\"Surname\" || ' ' ||" + $" \"Employees\".\"Patronymic\" ~* '{MakeSearchRegexp(searchString)}'") .AsQueryable(); } else { request = _applicationContext.Employees.AsQueryable(); } request = request.Where(x => x.DeletedAt == null); #region Применение критериев выбора к запросу if (filter.IsByGender) { request = request.Where(x => x.Gender == filter.Gender); } if (filter.IsByDateBirth) { if (filter.DateBirthLowBound != null) { request = request.Where(x => x.DateBirth >= filter.DateBirthLowBound); } if (filter.DateBirthHighBound != null) { request = request.Where(x => x.DateBirth <= filter.DateBirthHighBound); } } if (filter.IsByRole) { request = request.Where(x => x.Role == filter.Role); } #endregion //Применение сортировки к запросу switch (sortBy) { case "Name": request = sortDirection ? request.OrderBy(x => x.Name) : request.OrderByDescending(x => x.Name); break; case "Surname": request = sortDirection ? request.OrderBy(x => x.Surname) : request.OrderByDescending(x => x.Surname); break; case "Patronymic": request = sortDirection ? request.OrderBy(x => x.Patronymic) : request.OrderByDescending(x => x.Name); break; case "DateBirth": request = sortDirection ? request.OrderBy(x => x.DateBirth) : request.OrderByDescending(x => x.DateBirth); break; default: request = sortDirection ? request.OrderBy(x => x.Id) : request.OrderByDescending(x => x.Id); break; } return(request.Skip(offset).Take(limit).ToList()); }
/// <summary> /// Процедура, сохраняющая список работников в таблицу MS Excel. /// </summary> /// <param name="searchString">Строка поиска</param> /// <param name="sortBy">Поле, по которому производится сортировка</param> /// <param name="sortDirection">Направление сортировки</param> /// <param name="filter">Критерии выбора данных</param> public void SaveExcelDocument(string searchString, string sortBy, bool sortDirection, EmployeeFilterDefinition filter) { var cards = this.Get(searchString, sortBy, sortDirection, filter, int.MaxValue, 0); var workbook = new XSSFWorkbook(); var sheet = workbook.CreateSheet(); workbook.SetSheetName(0, "Карточки загруженности"); var header = sheet.CreateRow(0); var tableSheetHeader = new[] { "№", "Имя", "Фамилия", "Отчество", "Номер телефона", "Серия и номер паспорта", "Дата рождения", "Имя пользователя" }; for (var i = 0; i < tableSheetHeader.Length; i++) { header.CreateCell(i).SetCellValue(tableSheetHeader[i]); } for (int i = 0; i < cards.Count; i++) { var row = sheet.CreateRow(sheet.PhysicalNumberOfRows); row.CreateCell(0).SetCellValue(cards[i].Id); row.CreateCell(1).SetCellValue(cards[i].Name); row.CreateCell(2).SetCellValue(cards[i].Surname); row.CreateCell(3).SetCellValue(cards[i].Patronymic); row.CreateCell(4).SetCellValue(cards[i].PhoneNumber); row.CreateCell(5).SetCellValue(cards[i].PassportSerial); row.CreateCell(6).SetCellValue(cards[i].DateBirth.ToString("dd.MM.yyyy")); row.CreateCell(8).SetCellValue(cards[i].Username); } for (var i = 0; i < tableSheetHeader.Length; i++) { sheet.AutoSizeColumn(i); } var dialog = new SaveFileDialog { InitialDirectory = @"~/Documents", Title = "Путь к экспортируемой таблице работников", AddExtension = true, Filter = "Файлы Excel 2007 (*.xlsx)|*.xlsx|Все остальные файлы (*.*)|*.*" }; if (dialog.ShowDialog() == DialogResult.OK) { if (!File.Exists(dialog.FileName)) { File.Delete(dialog.FileName); } //запись в файл using (var fs = new FileStream(dialog.FileName, FileMode.Create, FileAccess.Write)) { workbook.Write(fs); } } }