public static byte[] GetClientConditionsMonitoring(ClientConditionsMonitoringFilter filter) { var book = new HSSFWorkbook(); var sheet = book.CreateSheet("Мониторинг выставления условий клиенту"); var row = 0; var col = 0; // выбираем данные var report = filter.Find(); // создаем строку var sheetRow = sheet.CreateRow(row++); var headerStyle = NPOIExcelHelper.GetHeaderStype(book); // выводим наименование отчета var headerCell = sheetRow.CreateCell(0); headerCell.CellStyle = headerStyle; headerCell.SetCellValue("Мониторинг выставления условий клиенту"); // дата построения отчета sheetRow = sheet.CreateRow(row++); var dateCell = sheetRow.CreateCell(0); dateCell.SetCellValue(String.Format("Дата подготовки отчета: {0}", DateTime.Now)); // наименование аптеки sheetRow = sheet.CreateRow(row++); dateCell = sheetRow.CreateCell(0); dateCell.SetCellValue(String.Format("Наименование аптеки: {0}", filter.ClientName)); // добавляем пустую строку перед таблицей sheet.CreateRow(row++); sheetRow = sheet.CreateRow(row++); // заполняем наименования столбцов таблицы NPOIExcelHelper.FillNewCell(sheetRow, 0, "Код поставщика", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 1, "Наименование поставщика", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 2, "Регион", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 3, "Прайс лист", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 4, "Тип", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 5, "Ценовая колонка", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 6, "В работе", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 7, "Подключен к прайсам", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 8, "Наценка", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 9, "Код клиента", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 10, "Код доставки", headerStyle); NPOIExcelHelper.FillNewCell(sheetRow, 11, "Код оплаты", headerStyle); // стиль для ячеек с данными var dataStyle = NPOIExcelHelper.GetDataStyle(book); // стиль для ячеек с данными, выравненный по центру var centerDataStyle = NPOIExcelHelper.GetCenterDataStyle(book); ICellStyle LightORANGE_STYLE; ICellStyle LightYELLOW_STYLE; ICellStyle LightBlue_STYLE; ICellStyle PINK_STYLE; ICellStyle LightGreen_STYLE; ICellStyle LAVENDER_STYLE; dateCell.CellStyle = dataStyle; // выводим данные foreach (var monitoringItem in report) { sheetRow = sheet.CreateRow(row++); NPOIExcelHelper.FillNewCell(sheetRow, 0, monitoringItem.SupplierCode.ToString(), centerDataStyle); NPOIExcelHelper.FillNewCell(sheetRow, 1, monitoringItem.SupplierName, dataStyle); NPOIExcelHelper.FillNewCell(sheetRow, 2, monitoringItem.RegionName, dataStyle); NPOIExcelHelper.FillNewCell(sheetRow, 3, monitoringItem.PriceName, dataStyle); NPOIExcelHelper.FillNewCell(sheetRow, 4, monitoringItem.PriceType, dataStyle); if (monitoringItem.CostCollumn) { LightORANGE_STYLE = NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightOrange.Index); NPOIExcelHelper.FillNewCell(sheetRow, 5, monitoringItem.CostName, LightORANGE_STYLE); } else { NPOIExcelHelper.FillNewCell(sheetRow, 5, monitoringItem.CostName, centerDataStyle); } NPOIExcelHelper.FillNewCell(sheetRow, 6, !monitoringItem.AvailableForClient ? "Нет" : string.Empty, centerDataStyle); if (monitoringItem.NoPriceConnected) { LightYELLOW_STYLE = NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightYellow.Index); NPOIExcelHelper.FillNewCell(sheetRow, 7, monitoringItem.CountAvailableForClient, LightYELLOW_STYLE); } else { NPOIExcelHelper.FillNewCell(sheetRow, 7, monitoringItem.CountAvailableForClient, centerDataStyle); } if (monitoringItem.PriceMarkupStyle) { LightBlue_STYLE = NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightBlue.Index); NPOIExcelHelper.FillNewCell(sheetRow, 8, monitoringItem.PriceMarkup > 0 ? monitoringItem.PriceMarkup.ToString() : string.Empty, LightBlue_STYLE); } else { NPOIExcelHelper.FillNewCell(sheetRow, 8, monitoringItem.PriceMarkup > 0 ? monitoringItem.PriceMarkup.ToString() : string.Empty, centerDataStyle); } if (monitoringItem.ClientCodeStyle) { PINK_STYLE = NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.Pink.Index); NPOIExcelHelper.FillNewCell(sheetRow, 9, monitoringItem.SupplierClientId, PINK_STYLE); } else { NPOIExcelHelper.FillNewCell(sheetRow, 9, monitoringItem.SupplierClientId, centerDataStyle); } if (monitoringItem.DeliveryStyle) { LightGreen_STYLE = NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightGreen.Index); NPOIExcelHelper.FillNewCell(sheetRow, 10, monitoringItem.DeliveryStyle ? monitoringItem.SupplierDeliveryAdresses.Replace("</br>", Environment.NewLine) : string.Empty, LightGreen_STYLE); } else { NPOIExcelHelper.FillNewCell(sheetRow, 10, monitoringItem.DeliveryStyle ? monitoringItem.SupplierDeliveryAdresses.Replace("</br>", Environment.NewLine) : string.Empty, centerDataStyle); } if (!string.IsNullOrEmpty(monitoringItem.SupplierDeliveryAdresses)) { var rows = monitoringItem.SupplierDeliveryAdresses.Split(new[] { "</br>" }, StringSplitOptions.RemoveEmptyEntries); sheetRow.Height = (short)(sheetRow.Height * rows.Count()); } if (monitoringItem.PaymentCodeStyle) { LAVENDER_STYLE = NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.Lavender.Index); NPOIExcelHelper.FillNewCell(sheetRow, 11, monitoringItem.SupplierPaymentId, LAVENDER_STYLE); } else { NPOIExcelHelper.FillNewCell(sheetRow, 11, monitoringItem.SupplierPaymentId, centerDataStyle); } } // устанавливаем ширину столбцов for (var i = col; i >= 0; i--) { sheet.SetColumnWidth(i, 3500); } sheet.SetColumnWidth(0, sheet.GetColumnWidth(1) * 4); sheet.SetColumnWidth(1, sheet.GetColumnWidth(2) * 4); sheet.SetColumnWidth(3, sheet.GetColumnWidth(3) * 2); sheet.SetColumnWidth(5, sheet.GetColumnWidth(5) * 4); sheet.SetColumnWidth(9, sheet.GetColumnWidth(9) * 2); sheet.SetColumnWidth(10, sheet.GetColumnWidth(10) * 6); sheet.SetColumnWidth(11, sheet.GetColumnWidth(11) * 4); sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 11)); var dataRowCount = row; for (int i = 1; i < 7; i++) { sheet.AddMergedRegion(new CellRangeAddress(dataRowCount + i, dataRowCount + i, 1, 11)); } dataStyle = book.CreateCellStyle(); dataStyle.GetFont(book).Boldweight = (short)FontBoldWeight.None; sheet.CreateRow(row++); sheetRow = sheet.CreateRow(row++); NPOIExcelHelper.FillNewCell(sheetRow, 0, string.Empty, NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightOrange.Index)); NPOIExcelHelper.FillNewCell(sheetRow, 1, "- Если у поставщика менее 30% клиентов подключены к базовой ценовой колонке и данной аптеке назначена базовая", dataStyle); sheetRow = sheet.CreateRow(row++); NPOIExcelHelper.FillNewCell(sheetRow, 0, string.Empty, NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightYellow.Index)); NPOIExcelHelper.FillNewCell(sheetRow, 1, "- Не подключен ни к одному из прайсов", dataStyle); sheetRow = sheet.CreateRow(row++); NPOIExcelHelper.FillNewCell(sheetRow, 0, string.Empty, NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightBlue.Index)); NPOIExcelHelper.FillNewCell(sheetRow, 1, "- Более половины аптек, подключенных к прайсу имеют наценку, отличную от Нуля, а для рассматриваемой аптеки наценка 0", dataStyle); sheetRow = sheet.CreateRow(row++); NPOIExcelHelper.FillNewCell(sheetRow, 0, string.Empty, NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.Pink.Index)); NPOIExcelHelper.FillNewCell(sheetRow, 1, "- Более половины аптек, подключенных к прайсу имеют код клиента, а для рассматриваемой аптеки этот код не прописан", dataStyle); sheetRow = sheet.CreateRow(row++); NPOIExcelHelper.FillNewCell(sheetRow, 0, string.Empty, NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.LightGreen.Index)); NPOIExcelHelper.FillNewCell(sheetRow, 1, "- Более половины аптек, подключенных к прайсу имеют коды адресов доставки, а для рассматриваемой аптеки этот код не прописан, либо для рассматриваемой аптеки прописаны не все коды адресов доставки", dataStyle); sheetRow = sheet.CreateRow(row++); NPOIExcelHelper.FillNewCell(sheetRow, 0, string.Empty, NPOIExcelHelper.GetCenterDataStyle(book, HSSFColor.Lavender.Index)); NPOIExcelHelper.FillNewCell(sheetRow, 1, "- Более половины аптек, подключенных к прайсу имеют код оплаты, а для рассматриваемой аптеки этот код не прописан", dataStyle); var buffer = new MemoryStream(); book.Write(buffer); return(buffer.ToArray()); }
public static byte[] GetFormPosition(FormPositionFilter filter) { var book = new HSSFWorkbook(); var sheet = book.CreateSheet("Лист1"); var row = 0; var col = 0; // выбираем данные var report = filter.Find(); var type = typeof(FormPositionItem); // получаем список всех свойств var infos = type.GetProperties(); // создаем строку var sheetRow = sheet.CreateRow(row++); var headerStyle = NPOIExcelHelper.GetHeaderStype(book); // выводим наименование отчета var headerCell = sheetRow.CreateCell(0); headerCell.CellStyle = headerStyle; headerCell.SetCellValue("Отчет о состоянии формализуемых полей в прайс-листах поставщиков"); // дата построения отчета sheetRow = sheet.CreateRow(row++); var dateCell = sheetRow.CreateCell(0); dateCell.SetCellValue(String.Format("Дата подготовки отчета: {0}", DateTime.Now)); // наименование поставщика sheetRow = sheet.CreateRow(row++); dateCell = sheetRow.CreateCell(0); dateCell.SetCellValue(String.Format("Наименование поставщика: {0}", filter.SupplierName)); // регион работы прайса sheetRow = sheet.CreateRow(row++); dateCell = sheetRow.CreateCell(0); dateCell.SetCellValue(String.Format("Регион работы прайса: {0}", filter.Region != null ? filter.Region.Name : "Все")); sheetRow = sheet.CreateRow(row++); dateCell = sheetRow.CreateCell(0); dateCell.SetCellValue(String.Format("* В отчет не включены прайс-листы с фиксированной шириной колонки")); // добавляем пустую строку перед таблицей sheet.CreateRow(row++); var tableHeaderRow = row; sheetRow = sheet.CreateRow(row++); // заполняем наименования столбцов таблицы foreach (PropertyInfo prop in infos) { var cell = sheetRow.CreateCell(col++); cell.CellStyle = headerStyle; var value = ((DisplayAttribute)prop.GetCustomAttributes(typeof(DisplayAttribute), false).First()).Name; cell.SetCellValue(value); } // стиль для ячеек с данными var dataStyle = NPOIExcelHelper.GetDataStyle(book); // стиль для ячеек с данными, выравненный по центру var centerDataStyle = NPOIExcelHelper.GetCenterDataStyle(book); dateCell.CellStyle = dataStyle; // выводим данные foreach (var formPositionItem in report) { col = 0; sheetRow = sheet.CreateRow(row++); foreach (PropertyInfo prop in infos) { var value = prop.GetValue(formPositionItem, null); var cell = sheetRow.CreateCell(col++); if (value != null && value.ToString() == "*") { cell.CellStyle = centerDataStyle; } else { cell.CellStyle = dataStyle; } if (value != null) { cell.SetCellValue(value.ToString()); } } } // устанавливаем ширину столбцов for (var i = col; i >= 0; i--) { sheet.SetColumnWidth(i, 2700); } sheet.SetColumnWidth(1, sheet.GetColumnWidth(1) * 2); sheet.SetColumnWidth(2, sheet.GetColumnWidth(2) * 2); sheet.SetColumnWidth(4, sheet.GetColumnWidth(4) * 2); // добавляем автофильтр sheet.SetAutoFilter(new CellRangeAddress(tableHeaderRow, row, 0, col - 1)); sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, col - 1)); var buffer = new MemoryStream(); book.Write(buffer); return(buffer.ToArray()); }