word и excel отчеты реализованы
This commit is contained in:
parent
638978be5b
commit
dc84083973
@ -25,10 +25,22 @@ namespace HotelBusinessLogic.BusinessLogics
|
||||
_saveToWord = saveToWord;
|
||||
_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 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>();
|
||||
foreach (var member in members)
|
||||
{
|
||||
@ -92,8 +104,8 @@ namespace HotelBusinessLogic.BusinessLogics
|
||||
_saveToExcel.CreateReport(new ExcelInfoOrganiser
|
||||
{
|
||||
FileName = model.FileName,
|
||||
Title = "Список участников",
|
||||
MemberConferences = GetMemberConference()
|
||||
Title = "Список брони по конференции",
|
||||
MemberConferences = GetMemberConference(model.Ids)
|
||||
});
|
||||
}
|
||||
|
||||
@ -102,8 +114,8 @@ namespace HotelBusinessLogic.BusinessLogics
|
||||
_saveToWord.CreateDoc(new WordInfoOrganiser
|
||||
{
|
||||
FileName = model.FileName,
|
||||
Title = "Список участников",
|
||||
MemberConferences = GetMemberConference()
|
||||
Title = "Список брони по конференции",
|
||||
MemberConferences = GetMemberConference(model.Ids)
|
||||
}) ;
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ namespace HotelBusinessLogic.OfficePackage
|
||||
CreateParagraph(new WordParagraph
|
||||
{
|
||||
Texts = new List<(string, WordTextProperties)>
|
||||
{ (mc.MemberFIO+" - ", new WordTextProperties { Size = "20", Bold=true})},
|
||||
{ (mc.MemberFIO, new WordTextProperties { Size = "20", Bold=true})},
|
||||
TextProperties = new WordTextProperties
|
||||
{
|
||||
Size = "24",
|
||||
|
@ -6,5 +6,6 @@
|
||||
public DateTime? DateFrom { get; set; }
|
||||
public DateTime? DateTo { get; set; }
|
||||
public int OrganiserId { get; set; }
|
||||
public List<int>? Ids { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ namespace HotelContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IReportOrganiserLogic
|
||||
{
|
||||
List<ReportMemberConferenceViewModel> GetMemberConference();
|
||||
List<ReportMemberConferenceViewModel> GetMemberConference(List<int> Ids);
|
||||
List<ReportMembersViewModel> GetMembers(ReportBindingModel model);
|
||||
void SaveMemberConferenceToWordFile(ReportBindingModel model);
|
||||
void SaveMemberConferenceToExcelFile(ReportBindingModel model);
|
||||
|
@ -13,6 +13,7 @@
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
@ -30,6 +30,7 @@
|
||||
<PackageReference Include="Microsoft.Extensions.Primitives" Version="7.0.0" />
|
||||
<PackageReference Include="NLog" Version="5.1.4" />
|
||||
<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.Text.Encodings.Web" Version="7.0.0" />
|
||||
<PackageReference Include="System.Text.Json" Version="7.0.2" />
|
||||
|
@ -17,6 +17,74 @@ namespace HotelOrganiserApp.Controllers
|
||||
_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------------------------*/
|
||||
|
||||
[HttpGet]
|
||||
|
@ -20,10 +20,12 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\HotelContracts\HotelContracts.csproj" />
|
||||
<ProjectReference Include="..\HotelDataModels\HotelDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -15,9 +15,7 @@
|
||||
<div class="u-clearfix u-layout-wrap u-layout-wrap-1">
|
||||
<div class="u-layout">
|
||||
<div class="u-layout-row">
|
||||
<div
|
||||
class="u-container-style u-layout-cell u-size-48 u-layout-cell-1"
|
||||
>
|
||||
<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">
|
||||
|
@ -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>
|
@ -15,8 +15,7 @@
|
||||
<div class="u-clearfix u-layout-wrap u-layout-wrap-1">
|
||||
<div class="u-layout">
|
||||
<div class="u-layout-row">
|
||||
<div
|
||||
class="u-container-style u-layout-cell u-size-48 u-layout-cell-1">
|
||||
<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">
|
||||
|
@ -75,14 +75,8 @@
|
||||
<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"
|
||||
>Список участников (xls)</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>
|
||||
asp-area="" asp-controller="Home" asp-action="ListMemberConferenceToFile"
|
||||
>Список участников (word/excel)</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
47
Hotel/HotelRestApi/Controllers/ReportController.cs
Normal file
47
Hotel/HotelRestApi/Controllers/ReportController.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -12,12 +12,14 @@
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<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" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\HotelBusinessLogic\HotelBusinessLogic.csproj" />
|
||||
<ProjectReference Include="..\HotelDataBaseImplement\HotelDataBaseImplement.csproj" />
|
||||
<ProjectReference Include="..\HotelDataModels\HotelDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -5,6 +5,8 @@ using HotelDataBaseImplement.Implemets;
|
||||
using Microsoft.OpenApi.Models;
|
||||
//using HotelBusinessLogic.MailWorker;
|
||||
using HotelContracts.BindingModels;
|
||||
using HotelBusinessLogic.OfficePackage;
|
||||
using HotelBusinessLogic.OfficePackage.Implements;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
@ -21,6 +23,11 @@ builder.Services.AddTransient<IOrganiserLogic, OrganiserLogic>();
|
||||
builder.Services.AddTransient<IMealPlanLogic, MealPlanLogic>();
|
||||
builder.Services.AddTransient<IMemberLogic, MemberLogic>();
|
||||
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<IDinnerStorage, DinnerStorage>();
|
||||
|
Loading…
Reference in New Issue
Block a user