фиксики + сдано
This commit is contained in:
parent
fef40a6aa8
commit
b0fbcad227
@ -21,6 +21,7 @@ using ComponentsLibraryNet60.Models;
|
||||
using FormLibrary.HelperClasses;
|
||||
using FormLibrary;
|
||||
using ComponentsLibraryNet60.DocumentWithChart;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Lab3Form
|
||||
{
|
||||
@ -81,7 +82,7 @@ namespace Lab3Form
|
||||
var service = Program.ServiceProvider?.GetService(typeof(FormOrder));
|
||||
if (service is FormOrder form)
|
||||
{
|
||||
form.Id = controlDataTable.GetSelectedObject<OrderSearchModel>().Id ?? 0;
|
||||
form._id = controlDataTable.GetSelectedObject<OrderSearchModel>().Id;
|
||||
if (form.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
LoadData();
|
||||
@ -116,54 +117,53 @@ namespace Lab3Form
|
||||
{
|
||||
try
|
||||
{
|
||||
// Получаем заказы из логики
|
||||
|
||||
var orders = _logic.ReadList(null);
|
||||
|
||||
// Создаем список таблиц для PDF
|
||||
|
||||
var orderTables = new List<string[,]>();
|
||||
|
||||
foreach (var order in orders)
|
||||
{
|
||||
// Получаем количество строк для таблицы на основе количества статусов
|
||||
|
||||
int rowCount = order.OrderStatusHistory.Count;
|
||||
|
||||
// Создаем таблицу с числом строк, равным количеству статусов, и четырьмя колонками
|
||||
// +1 строка для заголовков
|
||||
|
||||
string[,] orderTable = new string[rowCount+1, 4];
|
||||
|
||||
// Первая строка — заголовок
|
||||
|
||||
orderTable[0, 0] = "Статус";
|
||||
orderTable[0, 1] = "Идентификатор заказа";
|
||||
orderTable[0, 2] = "Город назначения";
|
||||
orderTable[0, 3] = "Дата доставки";
|
||||
|
||||
// Заполняем строки таблицы статусами и данными о заказе
|
||||
|
||||
for (int i = 0; i < rowCount; i++)
|
||||
{
|
||||
orderTable[i+1, 0] = order.OrderStatusHistory[i]; // Статус заказа
|
||||
orderTable[i+1, 1] = order.Id.ToString(); // Имя заказчика
|
||||
orderTable[i+1, 2] = order.DestinationCityName; // Город назначения
|
||||
orderTable[i+1, 3] = order.ExpectedDeliveryDate.ToString("yyyy-MM-dd"); // Дата доставки
|
||||
orderTable[i+1, 0] = order.OrderStatusHistory[i];
|
||||
orderTable[i+1, 1] = order.Id.ToString();
|
||||
orderTable[i+1, 2] = order.DestinationCityName;
|
||||
orderTable[i+1, 3] = order.ExpectedDeliveryDate.ToString("yyyy-MM-dd");
|
||||
}
|
||||
|
||||
// Добавляем таблицу заказа в список
|
||||
|
||||
orderTables.Add(orderTable);
|
||||
}
|
||||
|
||||
// Запрашиваем у пользователя путь и имя файла для сохранения
|
||||
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
|
||||
|
||||
using (System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog())
|
||||
{
|
||||
saveFileDialog.Filter = "PDF files (*.pdf)|*.pdf|All files (*.*)|*.*";
|
||||
saveFileDialog.Title = "Сохранить PDF-документ";
|
||||
saveFileDialog.FileName = "Отчет1.pdf"; // Имя по умолчанию
|
||||
saveFileDialog.FileName = "Отчет1.pdf";
|
||||
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
// Создаем PDF данные с указанным пользователем путем
|
||||
|
||||
var pdfData = new PdfDocumentData(
|
||||
saveFileDialog.FileName, // Используем выбранный путь и имя файла
|
||||
saveFileDialog.FileName,
|
||||
"Отчет по заказам",
|
||||
orderTables // Передаем список таблиц в PDF-данные
|
||||
orderTables
|
||||
);
|
||||
|
||||
var documentGenerator = new PDFTable();
|
||||
@ -181,7 +181,7 @@ namespace Lab3Form
|
||||
|
||||
private void buttonCreateOrderReport_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Получаем список заказов из логики
|
||||
|
||||
var orders = _logic.ReadList(null);
|
||||
if (orders == null || orders.Count == 0)
|
||||
{
|
||||
@ -189,7 +189,7 @@ namespace Lab3Form
|
||||
return;
|
||||
}
|
||||
|
||||
// Подготовка данных для Excel
|
||||
|
||||
var tableData = new List<OrderExcelViewModel>();
|
||||
foreach (var order in orders)
|
||||
{
|
||||
@ -198,52 +198,56 @@ namespace Lab3Form
|
||||
tableData.Add(new OrderExcelViewModel(
|
||||
order.Id,
|
||||
order.Fullname,
|
||||
//order.DestinationCityId,
|
||||
order.DestinationCityName,
|
||||
order.ExpectedDeliveryDate
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Определение параметров для Excel
|
||||
string path = AppDomain.CurrentDomain.BaseDirectory + "OrderReport.xlsx";
|
||||
|
||||
// Определяем объединения для заголовков
|
||||
using (System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog())
|
||||
{
|
||||
saveFileDialog.Title = "Сохранить Excel-документ";
|
||||
saveFileDialog.FileName = "Отчет2.xlsx";
|
||||
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
path = saveFileDialog.FileName;
|
||||
|
||||
MessageBox.Show("Excel-документ успешно создан!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<(int, int)> merges = new List<(int, int)>
|
||||
{
|
||||
(0,1),
|
||||
(2, 3)
|
||||
};
|
||||
|
||||
// Убедитесь, что высоты соответствуют количеству строк
|
||||
List<int> heights = Enumerable.Repeat(20, 4).ToList();
|
||||
|
||||
// Заголовки шапки
|
||||
|
||||
List<(string, string)> headers = new List<(string, string)>
|
||||
{
|
||||
|
||||
("","Данные"),
|
||||
("Id", "Идентификатор"),
|
||||
("Fullname", "ФИО заказчика"),
|
||||
//("DestinationCityId","Идентификатор города"),
|
||||
("", "Заказ"),
|
||||
("DestinationCityName", "Город назначения"),
|
||||
("ExpectedDeliveryDate", "Дата получения заказа")
|
||||
};
|
||||
|
||||
// Проверьте, что все списки заполнены
|
||||
if (merges.Count == 0 || heights.Count == 0 || headers.Count == 0 || tableData.Count == 0)
|
||||
{
|
||||
MessageBox.Show("Недостаточно данных для создания отчета.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
return;
|
||||
}
|
||||
// Вывод отладочной информации
|
||||
Console.WriteLine($"Merges Count: {merges.Count}");
|
||||
Console.WriteLine($"Heights Count: {heights.Count}");
|
||||
Console.WriteLine($"Headers Count: {headers.Count}");
|
||||
Console.WriteLine($"TableData Count: {tableData.Count}");
|
||||
// Вызов метода для создания Excel файла
|
||||
if (excelTableComponent1.createWithTable(path, "Отчет по заказам", merges, heights, headers, tableData))
|
||||
{
|
||||
MessageBox.Show("Отчет успешно создан!");
|
||||
@ -257,10 +261,10 @@ namespace Lab3Form
|
||||
|
||||
private void CreateDocumentButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Извлечение заказов
|
||||
|
||||
var orders = _logic.ReadList(null).Cast<OrderViewModel>().ToList();
|
||||
|
||||
// Подготовка данных для диаграммы
|
||||
|
||||
var chartData = new Dictionary<string, List<(DateTime Date, int Count)>>();
|
||||
|
||||
foreach (var order in orders)
|
||||
@ -270,7 +274,7 @@ namespace Lab3Form
|
||||
chartData[order.DestinationCityName] = new List<(DateTime Date, int Count)>();
|
||||
}
|
||||
|
||||
// Добавляем заказ в соответствующий город назначения и дату
|
||||
|
||||
var existingData = chartData[order.DestinationCityName]
|
||||
.FirstOrDefault(d => d.Date.Date == order.ExpectedDeliveryDate.Date);
|
||||
|
||||
@ -280,14 +284,27 @@ namespace Lab3Form
|
||||
}
|
||||
else
|
||||
{
|
||||
// Увеличиваем счетчик для существующей даты
|
||||
|
||||
int index = chartData[order.DestinationCityName].FindIndex(d => d.Date.Date == order.ExpectedDeliveryDate.Date);
|
||||
var updatedValue = chartData[order.DestinationCityName][index];
|
||||
chartData[order.DestinationCityName][index] = (updatedValue.Date, updatedValue.Count + 1);
|
||||
}
|
||||
}
|
||||
// Создание конфигурации для документа
|
||||
string filePath = "G://report.docx"; // Укажите нужное имя файла
|
||||
|
||||
string filePath = "Отчет3.docx";
|
||||
|
||||
using (System.Windows.Forms.SaveFileDialog saveFileDialog = new System.Windows.Forms.SaveFileDialog())
|
||||
{
|
||||
saveFileDialog.Title = "Сохранить Word-документ";
|
||||
saveFileDialog.FileName = "Отчет3.docx";
|
||||
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
filePath = saveFileDialog.FileName;
|
||||
|
||||
MessageBox.Show("Docx-документ успешно создан!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
}
|
||||
}
|
||||
var config = new ComponentDocumentWithChartConfig
|
||||
{
|
||||
ChartTitle = "Отчет по заказам",
|
||||
@ -295,15 +312,15 @@ namespace Lab3Form
|
||||
Data = chartData.ToDictionary(
|
||||
entry => entry.Key,
|
||||
entry => entry.Value.Select(d => (DateTimeToInt(d.Date), (double)d.Count)).ToList()),
|
||||
FilePath = filePath, // Устанавливаем путь к файлу
|
||||
Header = "Заголовок отчета" // Устанавливаем заголовок
|
||||
FilePath = filePath,
|
||||
Header = "Заголовок отчета"
|
||||
|
||||
};
|
||||
|
||||
// Создание экземпляра вашего связующего класса
|
||||
|
||||
var documentComponent = new ComponentDocumentWithChartLineWord();
|
||||
|
||||
// Создание документа
|
||||
|
||||
documentComponent.CreateDoc(config);
|
||||
|
||||
MessageBox.Show("Документ создан успешно!");
|
||||
|
@ -1,5 +1,6 @@
|
||||
using InternetShopOrdersContracts.BindingModels;
|
||||
using InternetShopOrdersContracts.BusinessLogicContracts;
|
||||
using InternetShopOrdersContracts.SearchModels;
|
||||
using InternetShopOrdersContracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -15,7 +16,7 @@ namespace Lab3Form
|
||||
{
|
||||
public partial class FormOrder : Form
|
||||
{
|
||||
private int? _id;
|
||||
public int? _id;
|
||||
private readonly IOrderLogic _logic;
|
||||
private readonly ICityLogic _cityLogic;
|
||||
private List<CityViewModel> _Cities;
|
||||
@ -24,6 +25,7 @@ namespace Lab3Form
|
||||
public FormOrder(IOrderLogic logic, ICityLogic cityLogic)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
_logic = logic;
|
||||
_cityLogic = cityLogic;
|
||||
_Cities = new List<CityViewModel>();
|
||||
@ -35,6 +37,49 @@ namespace Lab3Form
|
||||
DateTime now = DateTime.Now;
|
||||
customInputRangeDate1.MinDate = now.AddYears(-1);
|
||||
customInputRangeDate1.MaxDate = now.AddYears(1);
|
||||
this.Load += FormOrder_Load;
|
||||
}
|
||||
|
||||
private void FormOrder_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (_id.HasValue)
|
||||
{
|
||||
try
|
||||
{
|
||||
OrderSearchModel searchModel = new OrderSearchModel { Id = _id.Value };
|
||||
OrderViewModel orderViewModel = _logic.ReadElement(searchModel);
|
||||
|
||||
if (orderViewModel != null)
|
||||
{
|
||||
textBoxFIO.Text = orderViewModel.Fullname;
|
||||
|
||||
CityViewModel selectedCity = _Cities.FirstOrDefault(city => city.Id == orderViewModel.DestinationCityId);
|
||||
if (selectedCity != null)
|
||||
{
|
||||
customListBox1.SelectedItem = selectedCity.Name;
|
||||
}
|
||||
|
||||
customInputRangeDate1.Date = orderViewModel.ExpectedDeliveryDate;
|
||||
|
||||
foreach (string status in orderViewModel.OrderStatusHistory)
|
||||
{
|
||||
int index = listBox1.Items.IndexOf(status);
|
||||
if (index != -1)
|
||||
{
|
||||
listBox1.SetSelected(index, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("Заказ с указанным ID не найден.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonSave_Click(object sender, EventArgs e)
|
||||
|
Loading…
Reference in New Issue
Block a user