word и excel отчеты реализованы

This commit is contained in:
AnnZhimol 2023-05-17 19:57:20 +04:00
parent 638978be5b
commit dc84083973
15 changed files with 246 additions and 22 deletions

View File

@ -25,10 +25,22 @@ namespace HotelBusinessLogic.BusinessLogics
_saveToWord = saveToWord; _saveToWord = saveToWord;
_saveToPdf = saveToPdf; _saveToPdf = saveToPdf;
} }
public List<ReportMemberConferenceViewModel> GetMemberConference() public List<ReportMemberConferenceViewModel> GetMemberConference(List<int> Ids)
{ {
if (Ids == null)
{
return new List<ReportMemberConferenceViewModel>();
}
var conferences = _conferenceStorage.GetFullList(); var conferences = _conferenceStorage.GetFullList();
var members = _memberStorage.GetFullList(); List<MemberViewModel> members = new List<MemberViewModel>();
foreach (var memId in Ids)
{
var res = _memberStorage.GetElement(new MemberSearchModel { Id = memId });
if (res != null)
{
members.Add(res);
}
}
var list = new List<ReportMemberConferenceViewModel>(); var list = new List<ReportMemberConferenceViewModel>();
foreach (var member in members) foreach (var member in members)
{ {
@ -92,8 +104,8 @@ namespace HotelBusinessLogic.BusinessLogics
_saveToExcel.CreateReport(new ExcelInfoOrganiser _saveToExcel.CreateReport(new ExcelInfoOrganiser
{ {
FileName = model.FileName, FileName = model.FileName,
Title = "Список участников", Title = "Список брони по конференции",
MemberConferences = GetMemberConference() MemberConferences = GetMemberConference(model.Ids)
}); });
} }
@ -102,8 +114,8 @@ namespace HotelBusinessLogic.BusinessLogics
_saveToWord.CreateDoc(new WordInfoOrganiser _saveToWord.CreateDoc(new WordInfoOrganiser
{ {
FileName = model.FileName, FileName = model.FileName,
Title = "Список участников", Title = "Список брони по конференции",
MemberConferences = GetMemberConference() MemberConferences = GetMemberConference(model.Ids)
}) ; }) ;
} }

View File

@ -24,7 +24,7 @@ namespace HotelBusinessLogic.OfficePackage
CreateParagraph(new WordParagraph CreateParagraph(new WordParagraph
{ {
Texts = new List<(string, WordTextProperties)> Texts = new List<(string, WordTextProperties)>
{ (mc.MemberFIO+" - ", new WordTextProperties { Size = "20", Bold=true})}, { (mc.MemberFIO, new WordTextProperties { Size = "20", Bold=true})},
TextProperties = new WordTextProperties TextProperties = new WordTextProperties
{ {
Size = "24", Size = "24",

View File

@ -6,5 +6,6 @@
public DateTime? DateFrom { get; set; } public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; } public DateTime? DateTo { get; set; }
public int OrganiserId { get; set; } public int OrganiserId { get; set; }
public List<int>? Ids { get; set; }
} }
} }

View File

@ -5,7 +5,7 @@ namespace HotelContracts.BusinessLogicsContracts
{ {
public interface IReportOrganiserLogic public interface IReportOrganiserLogic
{ {
List<ReportMemberConferenceViewModel> GetMemberConference(); List<ReportMemberConferenceViewModel> GetMemberConference(List<int> Ids);
List<ReportMembersViewModel> GetMembers(ReportBindingModel model); List<ReportMembersViewModel> GetMembers(ReportBindingModel model);
void SaveMemberConferenceToWordFile(ReportBindingModel model); void SaveMemberConferenceToWordFile(ReportBindingModel model);
void SaveMemberConferenceToExcelFile(ReportBindingModel model); void SaveMemberConferenceToExcelFile(ReportBindingModel model);

View File

@ -13,6 +13,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
@ -30,6 +30,7 @@
<PackageReference Include="Microsoft.Extensions.Primitives" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Primitives" Version="7.0.0" />
<PackageReference Include="NLog" Version="5.1.4" /> <PackageReference Include="NLog" Version="5.1.4" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.2.3" /> <PackageReference Include="NLog.Extensions.Logging" Version="5.2.3" />
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" /> <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
<PackageReference Include="System.Text.Encodings.Web" Version="7.0.0" /> <PackageReference Include="System.Text.Encodings.Web" Version="7.0.0" />
<PackageReference Include="System.Text.Json" Version="7.0.2" /> <PackageReference Include="System.Text.Json" Version="7.0.2" />

View File

@ -17,6 +17,74 @@ namespace HotelOrganiserApp.Controllers
_logger = logger; _logger = logger;
} }
/*--------------------Reports------------------------*/
[HttpGet]
public IActionResult ListMemberConferenceToFile()
{
if (APIClient.Organiser == null)
{
return Redirect("~/Home/Enter");
}
return View(APIClient.GetRequest<List<MemberViewModel>>($"api/main/getmemberlist?organiserId={APIClient.Organiser.Id}"));
}
[HttpPost]
public void ListMemberConferenceToFile(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<int> res = new List<int>();
foreach (var item in Ids)
{
res.Add(item);
}
if (type == "docx")
{
APIClient.PostRequest("api/report/createreporttowordfile", new ReportBindingModel
{
Ids = res,
FileName= "F:\\ReportsCourseWork\\wordfile.docx"
});
Response.Redirect("GetWordFile");
}
else
{
APIClient.PostRequest("api/report/createreporttoexcelfile", new ReportBindingModel
{
Ids = res,
FileName = "F:\\ReportsCourseWork\\excelfile.xlsx"
});
Response.Redirect("GetExcelFile");
}
}
[HttpGet]
public IActionResult GetWordFile()
{
return new PhysicalFileResult("F:\\ReportsCourseWork\\wordfile.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
}
public IActionResult GetExcelFile()
{
return new PhysicalFileResult("F:\\ReportsCourseWork\\excelfile.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
/*--------------------MealPlans------------------------*/ /*--------------------MealPlans------------------------*/
[HttpGet] [HttpGet]

View File

@ -20,10 +20,12 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\HotelContracts\HotelContracts.csproj" /> <ProjectReference Include="..\HotelContracts\HotelContracts.csproj" />
<ProjectReference Include="..\HotelDataModels\HotelDataModels.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -15,9 +15,7 @@
<div class="u-clearfix u-layout-wrap u-layout-wrap-1"> <div class="u-clearfix u-layout-wrap u-layout-wrap-1">
<div class="u-layout"> <div class="u-layout">
<div class="u-layout-row"> <div class="u-layout-row">
<div <div class="u-container-style u-layout-cell u-size-48 u-layout-cell-1">
class="u-container-style u-layout-cell u-size-48 u-layout-cell-1"
>
<div class="u-container-layout u-container-layout-1"> <div class="u-container-layout u-container-layout-1">
<div class="u-table u-table-responsive u-table-1"> <div class="u-table u-table-responsive u-table-1">
<table class="u-table-entity"> <table class="u-table-entity">

View File

@ -0,0 +1,92 @@
@using HotelContracts.ViewModels
@model List<MemberViewModel>
@{
ViewData["Title"] = "ListMemberConferenceToFile";
}
<head>
<link rel="stylesheet" href="~/css/listmembers.css" asp-append-version="true" />
</head>
<div class="text-center">
<h2
class="u-text u-text-custom-color-1 u-text-default u-text-1"
>
Создание отчета по участникам
</h2>
</div>
<div class="text-center">
<form method="post">
<div>
<label class="u-label u-text-custom-color-1 u-label-1">
Выберите формат файла:
</label>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="type" value="docx" id="docx">
<label class="u-label u-text-custom-color-1 u-label-1" for="docx">
Word-файл
</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="type" value="xlsx" id="xlsx" checked>
<label class="u-label u-text-custom-color-1 u-label-1" for="xlsx">
Excel-файл
</label>
</div>
</div>
<div class="u-container-style u-layout-cell u-size-48 u-layout-cell-1">
<div class="u-container-layout u-container-layout-1">
<div class="u-table u-table-responsive u-table-1">
<table class="u-table-entity">
<colgroup>
<col width="9.8%" />
<col width="62.9%" />
<col width="27.3%" />
</colgroup>
<thead
class="u-custom-color-1 u-table-header u-table-header-1">
<tr style="height: 31px">
<th class="u-border-1 u-border-grey-50 u-table-cell">
</th>
<th class="u-border-1 u-border-grey-50 u-table-cell">
ФИО участника
</th>
<th class="u-border-1 u-border-grey-50 u-table-cell">
Гражданство
</th>
</tr>
</thead>
<tbody class="u-table-body">
@foreach (var item in Model)
{
<tr style="height: 75px">
<td
class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell">
<input type="checkbox" class="form-check-input" name="Ids[]" value="@item.Id" id="@item.Id">
</td>
<td
class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell"
>
@Html.DisplayFor(modelItem => item.MemberFIO)
</td>
<td
class="u-border-1 u-border-grey-40 u-border-no-left u-border-no-right u-table-cell"
>
@Html.DisplayFor(modelItem => item.Citizenship)
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
<div class="u-align-center u-form-group u-form-submit u-label-top" style="padding-bottom: 120px">
<div class="col-8"></div>
<div class="col-4"><input type="submit" value="Создать файл" class="u-active-custom-color-6 u-border-none u-btn u-btn-submit u-button-style u-custom-color-1 u-hover-custom-color-2 u-btn-1"/></div>
</div>
</form>
</div>

View File

@ -15,8 +15,7 @@
<div class="u-clearfix u-layout-wrap u-layout-wrap-1"> <div class="u-clearfix u-layout-wrap u-layout-wrap-1">
<div class="u-layout"> <div class="u-layout">
<div class="u-layout-row"> <div class="u-layout-row">
<div <div class="u-container-style u-layout-cell u-size-48 u-layout-cell-1">
class="u-container-style u-layout-cell u-size-48 u-layout-cell-1">
<div class="u-container-layout u-container-layout-1"> <div class="u-container-layout u-container-layout-1">
<div class="u-table u-table-responsive u-table-1"> <div class="u-table u-table-responsive u-table-1">
<table class="u-table-entity"> <table class="u-table-entity">

View File

@ -75,14 +75,8 @@
<li class="u-nav-item"> <li class="u-nav-item">
<a <a
class="u-button-style u-custom-color-4 u-nav-link u-text-active-custom-color-2 u-text-custom-color-1 u-text-hover-custom-color-6" class="u-button-style u-custom-color-4 u-nav-link u-text-active-custom-color-2 u-text-custom-color-1 u-text-hover-custom-color-6"
asp-area="" asp-controller="Home" asp-action="Register" asp-area="" asp-controller="Home" asp-action="ListMemberConferenceToFile"
>Список участников (xls)</a> >Список участников (word/excel)</a>
</li>
<li class="u-nav-item">
<a
class="u-button-style u-custom-color-4 u-nav-link u-text-active-custom-color-2 u-text-custom-color-1 u-text-hover-custom-color-6"
asp-area="" asp-controller="Home" asp-action="Register"
>Список участников (docx)</a>
</li> </li>
</ul> </ul>
</div> </div>

View File

@ -0,0 +1,47 @@
using HotelContracts.BindingModels;
using HotelContracts.BusinessLogicsContracts;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace HotelRestApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class ReportController : Controller
{
private readonly ILogger _logger;
private readonly IReportOrganiserLogic _reportOrganiserLogic;
public ReportController(ILogger<ReportController> logger, IReportOrganiserLogic reportOrganiserLogic)
{
_logger = logger;
_reportOrganiserLogic = reportOrganiserLogic;
}
[HttpPost]
public void CreateReportToWordFile(ReportBindingModel model)
{
try
{
_reportOrganiserLogic.SaveMemberConferenceToWordFile(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
[HttpPost]
public void CreateReportToExcelFile(ReportBindingModel model)
{
try
{
_reportOrganiserLogic.SaveMemberConferenceToExcelFile(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
}
}

View File

@ -12,12 +12,14 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="6.1.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="6.1.0" />
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\HotelBusinessLogic\HotelBusinessLogic.csproj" /> <ProjectReference Include="..\HotelBusinessLogic\HotelBusinessLogic.csproj" />
<ProjectReference Include="..\HotelDataBaseImplement\HotelDataBaseImplement.csproj" /> <ProjectReference Include="..\HotelDataBaseImplement\HotelDataBaseImplement.csproj" />
<ProjectReference Include="..\HotelDataModels\HotelDataModels.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -5,6 +5,8 @@ using HotelDataBaseImplement.Implemets;
using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models;
//using HotelBusinessLogic.MailWorker; //using HotelBusinessLogic.MailWorker;
using HotelContracts.BindingModels; using HotelContracts.BindingModels;
using HotelBusinessLogic.OfficePackage;
using HotelBusinessLogic.OfficePackage.Implements;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
@ -21,6 +23,11 @@ builder.Services.AddTransient<IOrganiserLogic, OrganiserLogic>();
builder.Services.AddTransient<IMealPlanLogic, MealPlanLogic>(); builder.Services.AddTransient<IMealPlanLogic, MealPlanLogic>();
builder.Services.AddTransient<IMemberLogic, MemberLogic>(); builder.Services.AddTransient<IMemberLogic, MemberLogic>();
builder.Services.AddTransient<IConferenceLogic, ConferenceLogic>(); builder.Services.AddTransient<IConferenceLogic, ConferenceLogic>();
builder.Services.AddTransient<IReportOrganiserLogic, ReportLogicOrganiser>();
builder.Services.AddTransient<AbstractSaveToExcelOrganiser, SaveToExcelOrganiser>();
builder.Services.AddTransient<AbstractSaveToWordOrganiser, SaveToWordOrganiser>();
builder.Services.AddTransient<AbstractSaveToPdfOrganiser, SaveToPdfOrganiser>();
builder.Services.AddTransient<IHeadwaiterStorage, HeadwaiterStorage>(); builder.Services.AddTransient<IHeadwaiterStorage, HeadwaiterStorage>();
builder.Services.AddTransient<IDinnerStorage, DinnerStorage>(); builder.Services.AddTransient<IDinnerStorage, DinnerStorage>();