diff --git a/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicOrganiser.cs b/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicOrganiser.cs index cc88a8b..e31a726 100644 --- a/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicOrganiser.cs +++ b/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicOrganiser.cs @@ -5,6 +5,7 @@ using HotelContracts.SearchModels; using HotelContracts.StoragesContracts; using HotelContracts.ViewModels; using HotelContracts.BindingModels; +using HotelDataBaseImplement.Implemets; namespace HotelBusinessLogic.BusinessLogics { @@ -13,21 +14,23 @@ namespace HotelBusinessLogic.BusinessLogics private readonly IMealPlanStorage _mealPlanStorage; private readonly IMemberStorage _memberStorage; private readonly IConferenceStorage _conferenceStorage; + private readonly IConferenceBookingStorage _conferenceBookingStorage; private readonly AbstractSaveToExcelOrganiser _saveToExcel; private readonly AbstractSaveToWordOrganiser _saveToWord; private readonly AbstractSaveToPdfOrganiser _saveToPdf; - public ReportLogicOrganiser(IMealPlanStorage mealPlanStorage, IMemberStorage memberStorage, IConferenceStorage conferenceStorage, AbstractSaveToExcelOrganiser saveToExcel, AbstractSaveToWordOrganiser saveToWord, AbstractSaveToPdfOrganiser saveToPdf) + public ReportLogicOrganiser(IMealPlanStorage mealPlanStorage, IMemberStorage memberStorage, IConferenceStorage conferenceStorage, IConferenceBookingStorage conferenceBookingStorage, AbstractSaveToExcelOrganiser saveToExcel, AbstractSaveToWordOrganiser saveToWord, AbstractSaveToPdfOrganiser saveToPdf) { _mealPlanStorage = mealPlanStorage; _memberStorage = memberStorage; _conferenceStorage = conferenceStorage; + _conferenceBookingStorage = conferenceBookingStorage; _saveToExcel = saveToExcel; _saveToWord = saveToWord; _saveToPdf = saveToPdf; } - public List GetMemberConference(List Ids) + public List GetMemberConferenceBooking(List Ids) { if (Ids == null) { @@ -35,6 +38,7 @@ namespace HotelBusinessLogic.BusinessLogics } var conferences = _conferenceStorage.GetFullList(); + var conferenceBookings = _conferenceBookingStorage.GetFullList(); List members = new List(); foreach (var memberId in Ids) @@ -53,13 +57,17 @@ namespace HotelBusinessLogic.BusinessLogics MemberSurname = member.MemberSurname, MemberName = member.MemberName, MemberPatronymic = member.MemberPatronymic, - Conferences = new List>() + ConferenceBookings = new List>() }; foreach (var conference in conferences) { if (conference.ConferenceMembers.ContainsKey(member.Id)) { - record.Conferences.Add(new Tuple(conference.ConferenceName, conference.StartDate)); + var bookingsForConference = conferenceBookings.Where(cb => cb.ConferenceId == conference.Id).ToList(); + foreach (var booking in bookingsForConference) + { + record.ConferenceBookings.Add(new Tuple(booking.NameHall, booking.BookingDate.Value)); + } } } list.Add(record); @@ -122,7 +130,7 @@ namespace HotelBusinessLogic.BusinessLogics { FileName = model.FileName, Title = "Список конференций", - MemberConferences = GetMemberConference(model.Ids) + MemberConferences = GetMemberConferenceBooking(model.Ids) }); } @@ -132,7 +140,7 @@ namespace HotelBusinessLogic.BusinessLogics { FileName = model.FileName, Title = "Список конференций", - MemberConferences = GetMemberConference(model.Ids) + MemberConferences = GetMemberConferenceBooking(model.Ids) }); } diff --git a/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToExcelOrganiser.cs b/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToExcelOrganiser.cs index 8b5505c..c6b2fd1 100644 --- a/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToExcelOrganiser.cs +++ b/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToExcelOrganiser.cs @@ -37,7 +37,7 @@ namespace HotelBusinessLogic.OfficePackage rowIndex++; - foreach (var conference in mc.Conferences) + foreach (var conference in mc.ConferenceBookings) { InsertCellInWorksheet(new ExcelCellParameters { @@ -51,7 +51,7 @@ namespace HotelBusinessLogic.OfficePackage { ColumnName = "C", RowIndex = rowIndex, - Text = conference.Item2.ToString(), + Text = conference.Item2.ToString("d"), StyleInfo = ExcelStyleInfoType.TextWithBroder }); diff --git a/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToWordOrganiser.cs b/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToWordOrganiser.cs index f7c5acc..72fa33c 100644 --- a/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToWordOrganiser.cs +++ b/Hotel/HotelBusinessLogic/OfficePackage/AbstractSaveToWordOrganiser.cs @@ -32,7 +32,7 @@ namespace HotelBusinessLogic.OfficePackage } }); - foreach (var conference in mc.Conferences) + foreach (var conference in mc.ConferenceBookings) { CreateParagraph(new WordParagraph { diff --git a/Hotel/HotelContracts/BusinessLogicsContracts/IReportOrganiserLogic.cs b/Hotel/HotelContracts/BusinessLogicsContracts/IReportOrganiserLogic.cs index f4aa573..f0c8518 100644 --- a/Hotel/HotelContracts/BusinessLogicsContracts/IReportOrganiserLogic.cs +++ b/Hotel/HotelContracts/BusinessLogicsContracts/IReportOrganiserLogic.cs @@ -5,7 +5,7 @@ namespace HotelContracts.BusinessLogicsContracts { public interface IReportOrganiserLogic { - List GetMemberConference(List Ids); + List GetMemberConferenceBooking(List Ids); List GetMembers(ReportOrganiserBindingModel model); void SaveMemberConferenceToWordFile(ReportOrganiserBindingModel model); void SaveMemberConferenceToExcelFile(ReportOrganiserBindingModel model); diff --git a/Hotel/HotelContracts/ViewModels/ReportMemberConferenceViewModel.cs b/Hotel/HotelContracts/ViewModels/ReportMemberConferenceViewModel.cs index 5c1c36e..8459df6 100644 --- a/Hotel/HotelContracts/ViewModels/ReportMemberConferenceViewModel.cs +++ b/Hotel/HotelContracts/ViewModels/ReportMemberConferenceViewModel.cs @@ -5,6 +5,6 @@ public string MemberSurname { get; set; } = string.Empty; public string MemberName { get; set; } = string.Empty; public string MemberPatronymic { get; set; } = string.Empty; - public List> Conferences { get; set; } = new(); + public List> ConferenceBookings { get; set; } = new(); } } diff --git a/Hotel/HotelOrganiserApp/Controllers/HomeController.cs b/Hotel/HotelOrganiserApp/Controllers/HomeController.cs index 4d0c30f..8698864 100644 --- a/Hotel/HotelOrganiserApp/Controllers/HomeController.cs +++ b/Hotel/HotelOrganiserApp/Controllers/HomeController.cs @@ -15,10 +15,12 @@ namespace HotelOrganiserApp.Controllers public class HomeController : Controller { private readonly ILogger _logger; + private readonly IReportOrganiserLogic _report; - public HomeController(ILogger logger) + public HomeController(ILogger logger, IReportOrganiserLogic report) { _logger = logger; + _report = report; } public IActionResult Index() @@ -553,7 +555,179 @@ namespace HotelOrganiserApp.Controllers Response.Redirect("Index"); } - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] + [HttpGet] + public IActionResult ListMemberConferenceBookingToFile() + { + if (APIClient.Organiser == null) + { + return Redirect("~/Home/Enter"); + } + return View(APIClient.GetRequest>($"api/member/getmembers?organiserId={APIClient.Organiser.Id}")); + } + + [HttpPost] + public void ListMemberConferenceBookingToFile(int[] Ids, string type) + { + if (APIClient.Organiser == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + + if (Ids.Length <= 0) + { + throw new Exception("Количество должно быть больше 0"); + } + + if (string.IsNullOrEmpty(type)) + { + throw new Exception("Неверный тип отчета"); + } + + List res = new List(); + + foreach (var item in Ids) + { + res.Add(item); + } + + if (type == "docx") + { + APIClient.PostRequest("api/report/CreateOrganiserReportToWordFile", new ReportOrganiserBindingModel + { + Ids = res, + FileName = "C:\\Reports\\wordfile.docx" + }); + Response.Redirect("GetWordFile"); + } + else + { + APIClient.PostRequest("api/report/CreateOrganiserReportToExcelFile", new ReportOrganiserBindingModel + { + Ids = res, + FileName = "C:\\Reports\\excelfile.xlsx" + }); + Response.Redirect("GetExcelFile"); + } + } + + [HttpGet] + public IActionResult GetWordFile() + { + return new PhysicalFileResult("C:\\Reports\\wordfile.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + } + + [HttpGet] + public IActionResult GetExcelFile() + { + return new PhysicalFileResult("C:\\Reports\\excelfile.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + } + + [HttpGet] + public IActionResult GetPdfFile() + { + return new PhysicalFileResult("C:\\Reports\\pdffile.pdf", "application/pdf"); + } + + + [HttpGet] + public IActionResult ListMembersToPdfFile() + { + if (APIClient.Organiser == null) + { + return Redirect("~/Home/Enter"); + } + return View("ListMembersToPdfFile"); + } + + [HttpPost] + public void ListMembersToPdfFile(DateTime dateFrom, DateTime dateTo) + { + if (APIClient.Organiser == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + APIClient.PostRequest("api/report/CreateReportToPdfFile", new ReportOrganiserBindingModel + { + DateFrom = dateFrom, + DateTo = dateTo, + OrganiserId = APIClient.Organiser.Id + }); + Response.Redirect("ListMembersToPdfFile"); + } + + [HttpGet] + public string GetMembersReport(DateTime dateFrom, DateTime dateTo) + { + if (APIClient.Organiser == null) + { + throw new Exception("Вы как суда попали? Суда вход только авторизованным"); + } + List result; + try + { + result = _report.GetMembers(new ReportOrganiserBindingModel + { + OrganiserId = APIClient.Organiser.Id, + DateFrom = dateFrom, + DateTo = dateTo + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания отчета"); + throw; + } + + double sum = 0; + string table = ""; + table += $"

Предварительный отчет

"; + table += $""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += ""; + table += $""; + table += $""; + table += $""; + table += $""; + table += $""; + table += ""; + table += ""; + foreach (var report in result) + { + bool IsDate = true; + if (report.StartDate.ToShortDateString() == "01.01.0001") + { + IsDate = false; + } + bool IsCost = true; + if (report.MealPlanPrice.ToString() == "0") + { + IsCost = false; + } + table += ""; + table += ""; + table += $""; + table += $""; + table += $""; + table += $""; + table += $""; + table += ""; + table += ""; + sum += report.MealPlanPrice; + } + table += "
УчастникКонференцияДата начала конференцииПлан питанияСтоимость плана питания
" + + $"{report.MemberSurname} {report.MemberName} {report.MemberPatronymic}{report.ConferenceName}{(IsDate is true ? report.StartDate.ToShortDateString() : string.Empty)}{report.MealPlanName}{(IsCost is true ? report.MealPlanPrice.ToString() : string.Empty)}
"; + table += $"

Итого: {sum}

"; + return table; + } + + [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); diff --git a/Hotel/HotelOrganiserApp/Program.cs b/Hotel/HotelOrganiserApp/Program.cs index 6c5878a..0995107 100644 --- a/Hotel/HotelOrganiserApp/Program.cs +++ b/Hotel/HotelOrganiserApp/Program.cs @@ -11,6 +11,7 @@ builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); +builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); diff --git a/Hotel/HotelOrganiserApp/Views/Home/ListMemberConferenceBookingToFile.cshtml b/Hotel/HotelOrganiserApp/Views/Home/ListMemberConferenceBookingToFile.cshtml new file mode 100644 index 0000000..8b4a350 --- /dev/null +++ b/Hotel/HotelOrganiserApp/Views/Home/ListMemberConferenceBookingToFile.cshtml @@ -0,0 +1,75 @@ +@using HotelContracts.ViewModels + +@model List + +@{ + ViewData["Title"] = "ListMemberConferenceBookingToFile"; +} + +
+
+

Создание отчета по участникам

+
+
+ +
+
+
+ +
+ + +
+
+ + +
+
+
+ + + + + + + + + + @foreach (var item in Model) + { + + + + + + } + +
УчастникНомер телефона
+
+ +
+
+ @Html.DisplayFor(modelItem => item.MemberSurname) @Html.DisplayFor(modelItem => item.MemberName) @Html.DisplayFor(modelItem => item.MemberPatronymic) + @Html.DisplayFor(modelItem => item.MemberPhoneNumber)
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/Hotel/HotelOrganiserApp/Views/Shared/_Layout.cshtml b/Hotel/HotelOrganiserApp/Views/Shared/_Layout.cshtml index 9e45b91..a1bd3ca 100644 --- a/Hotel/HotelOrganiserApp/Views/Shared/_Layout.cshtml +++ b/Hotel/HotelOrganiserApp/Views/Shared/_Layout.cshtml @@ -35,7 +35,7 @@ Связывание