Exemple #1
0
        /// <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());
        }
Exemple #2
0
        /// <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());
        }
Exemple #3
0
        /// <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);
                }
            }
        }