2023-04-07 13:49:59 +04:00
|
|
|
|
using HotelBusinessLogic.OfficePackage;
|
2023-04-07 01:44:16 +04:00
|
|
|
|
using HotelBusinessLogic.OfficePackage.HelperModels;
|
|
|
|
|
using HotelContracts.BindingModels;
|
|
|
|
|
using HotelContracts.BusinessLogicsContracts;
|
|
|
|
|
using HotelContracts.SearchModels;
|
|
|
|
|
using HotelContracts.StoragesContracts;
|
|
|
|
|
using HotelContracts.ViewModels;
|
2023-05-18 19:37:57 +04:00
|
|
|
|
using HotelDataBaseImplement;
|
|
|
|
|
using HotelDataBaseImplement.Models;
|
2023-04-07 01:44:16 +04:00
|
|
|
|
|
|
|
|
|
namespace HotelBusinessLogic.BusinessLogics
|
|
|
|
|
{
|
|
|
|
|
public class ReportLogicOrganiser : IReportOrganiserLogic
|
|
|
|
|
{
|
|
|
|
|
private readonly IMealPlanStorage _mealPlanStorage;
|
|
|
|
|
private readonly IMemberStorage _memberStorage;
|
|
|
|
|
private readonly IConferenceStorage _conferenceStorage;
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
_mealPlanStorage = mealPlanStorage;
|
|
|
|
|
_memberStorage = memberStorage;
|
|
|
|
|
_conferenceStorage = conferenceStorage;
|
|
|
|
|
_saveToExcel = saveToExcel;
|
|
|
|
|
_saveToWord = saveToWord;
|
|
|
|
|
_saveToPdf = saveToPdf;
|
|
|
|
|
}
|
2023-05-17 19:57:20 +04:00
|
|
|
|
public List<ReportMemberConferenceViewModel> GetMemberConference(List<int> Ids)
|
2023-04-07 01:44:16 +04:00
|
|
|
|
{
|
2023-05-17 19:57:20 +04:00
|
|
|
|
if (Ids == null)
|
|
|
|
|
{
|
|
|
|
|
return new List<ReportMemberConferenceViewModel>();
|
|
|
|
|
}
|
2023-04-07 01:44:16 +04:00
|
|
|
|
var conferences = _conferenceStorage.GetFullList();
|
2023-05-17 19:57:20 +04:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-04-07 01:44:16 +04:00
|
|
|
|
var list = new List<ReportMemberConferenceViewModel>();
|
|
|
|
|
foreach (var member in members)
|
|
|
|
|
{
|
|
|
|
|
var record = new ReportMemberConferenceViewModel
|
|
|
|
|
{
|
|
|
|
|
MemberFIO = member.MemberFIO,
|
|
|
|
|
Conferences = new List<Tuple<string, DateTime>>()
|
|
|
|
|
};
|
|
|
|
|
foreach (var conference in conferences)
|
|
|
|
|
{
|
|
|
|
|
if (conference.ConferenceMembers.ContainsKey(member.Id))
|
|
|
|
|
{
|
|
|
|
|
record.Conferences.Add(new Tuple<string, DateTime>(conference.ConferenceName, conference.StartDate));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
list.Add(record);
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<ReportMembersViewModel> GetMembers(ReportBindingModel model)
|
|
|
|
|
{
|
|
|
|
|
var listAll = new List<ReportMembersViewModel>();
|
|
|
|
|
|
|
|
|
|
var listСonferences = _conferenceStorage.GetFilteredList(new ConferenceSearchModel
|
2023-05-18 19:37:57 +04:00
|
|
|
|
{
|
|
|
|
|
OrganiserId = model.OrganiserId,
|
|
|
|
|
DateFrom = model.DateFrom,
|
|
|
|
|
DateTo = model.DateTo
|
2023-04-07 01:44:16 +04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
foreach (var conference in listСonferences)
|
|
|
|
|
{
|
2023-05-18 19:37:57 +04:00
|
|
|
|
foreach (var m in conference.ConferenceMembers.Values)
|
2023-04-07 01:44:16 +04:00
|
|
|
|
{
|
|
|
|
|
listAll.Add(new ReportMembersViewModel
|
|
|
|
|
{
|
|
|
|
|
StartDate = conference.StartDate,
|
|
|
|
|
ConferenceName = conference.ConferenceName,
|
2023-05-18 19:37:57 +04:00
|
|
|
|
MemberFIO = m.MemberFIO
|
2023-04-07 01:44:16 +04:00
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-05-18 19:37:57 +04:00
|
|
|
|
|
|
|
|
|
var listMealPlans = _mealPlanStorage.GetFilteredList(new MealPlanSearchModel
|
|
|
|
|
{
|
|
|
|
|
OrganiserId = model.OrganiserId,
|
|
|
|
|
});
|
2023-04-07 01:44:16 +04:00
|
|
|
|
|
2023-05-19 01:10:45 +04:00
|
|
|
|
double sum = 0;
|
|
|
|
|
|
2023-04-07 01:44:16 +04:00
|
|
|
|
foreach (var mealPlan in listMealPlans)
|
|
|
|
|
{
|
2023-05-18 19:37:57 +04:00
|
|
|
|
foreach (var mp in mealPlan.MealPlanMembers.Values)
|
2023-04-07 01:44:16 +04:00
|
|
|
|
{
|
2023-05-18 19:37:57 +04:00
|
|
|
|
listAll.Add(new ReportMembersViewModel
|
|
|
|
|
{
|
|
|
|
|
MemberFIO = mp.MemberFIO,
|
|
|
|
|
MealPlanName = mealPlan.MealPlanName,
|
|
|
|
|
MealPlanPrice = mealPlan.MealPlanPrice
|
|
|
|
|
});
|
|
|
|
|
}
|
2023-04-07 01:44:16 +04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return listAll;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveMemberConferenceToExcelFile(ReportBindingModel model)
|
|
|
|
|
{
|
|
|
|
|
_saveToExcel.CreateReport(new ExcelInfoOrganiser
|
|
|
|
|
{
|
|
|
|
|
FileName = model.FileName,
|
2023-05-18 15:28:43 +04:00
|
|
|
|
Title = "Список конференций",
|
2023-05-17 19:57:20 +04:00
|
|
|
|
MemberConferences = GetMemberConference(model.Ids)
|
2023-04-07 01:44:16 +04:00
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveMemberConferenceToWordFile(ReportBindingModel model)
|
|
|
|
|
{
|
|
|
|
|
_saveToWord.CreateDoc(new WordInfoOrganiser
|
|
|
|
|
{
|
|
|
|
|
FileName = model.FileName,
|
2023-05-18 15:28:43 +04:00
|
|
|
|
Title = "Список конференций",
|
2023-05-17 19:57:20 +04:00
|
|
|
|
MemberConferences = GetMemberConference(model.Ids)
|
2023-04-07 01:44:16 +04:00
|
|
|
|
}) ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveMembersToPdfFile(ReportBindingModel model)
|
|
|
|
|
{
|
2023-05-19 01:10:45 +04:00
|
|
|
|
if (model.DateFrom == null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException("Дата начала не задана");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (model.DateTo == null)
|
|
|
|
|
{
|
|
|
|
|
throw new ArgumentException("Дата окончания не задана");
|
|
|
|
|
}
|
2023-04-07 01:44:16 +04:00
|
|
|
|
_saveToPdf.CreateDoc(new PdfInfoOrganiser
|
|
|
|
|
{
|
|
|
|
|
FileName = model.FileName,
|
|
|
|
|
Title = "Список участников",
|
|
|
|
|
DateFrom = model.DateFrom!.Value,
|
|
|
|
|
DateTo = model.DateTo!.Value,
|
|
|
|
|
Members = GetMembers(model)
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|