diff --git a/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicOrganiser.cs b/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicOrganiser.cs new file mode 100644 index 0000000..cc88a8b --- /dev/null +++ b/Hotel/HotelBusinessLogic/BusinessLogics/ReportLogicOrganiser.cs @@ -0,0 +1,160 @@ +using HotelBusinessLogic.OfficePackage.HelperModels; +using HotelBusinessLogic.OfficePackage; +using HotelContracts.BusinessLogicsContracts; +using HotelContracts.SearchModels; +using HotelContracts.StoragesContracts; +using HotelContracts.ViewModels; +using HotelContracts.BindingModels; + +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; + } + + public List GetMemberConference(List Ids) + { + if (Ids == null) + { + return new List(); + } + + var conferences = _conferenceStorage.GetFullList(); + + List members = new List(); + foreach (var memberId in Ids) + { + var res = _memberStorage.GetElement(new MemberSearchModel { Id = memberId }); + if (res != null) + { + members.Add(res); + } + } + var list = new List(); + foreach (var member in members) + { + var record = new ReportMemberConferenceViewModel + { + MemberSurname = member.MemberSurname, + MemberName = member.MemberName, + MemberPatronymic = member.MemberPatronymic, + Conferences = new List>() + }; + foreach (var conference in conferences) + { + if (conference.ConferenceMembers.ContainsKey(member.Id)) + { + record.Conferences.Add(new Tuple(conference.ConferenceName, conference.StartDate)); + } + } + list.Add(record); + } + return list; + } + + public List GetMembers(ReportOrganiserBindingModel model) + { + var listAll = new List(); + + var listСonferences = _conferenceStorage.GetFilteredList(new ConferenceSearchModel + { + OrganiserId = model.OrganiserId, + DateFrom = model.DateFrom, + DateTo = model.DateTo + }); + + foreach (var conference in listСonferences) + { + foreach (var m in conference.ConferenceMembers.Values) + { + listAll.Add(new ReportMembersViewModel + { + StartDate = conference.StartDate, + ConferenceName = conference.ConferenceName, + MemberSurname = m.MemberSurname, + MemberName = m.MemberName, + MemberPatronymic = m.MemberPatronymic + }); + } + } + + var listMealPlans = _mealPlanStorage.GetFilteredList(new MealPlanSearchModel + { + OrganiserId = model.OrganiserId, + }); + + foreach (var mealPlan in listMealPlans) + { + foreach (var mp in mealPlan.MealPlanMembers.Values) + { + listAll.Add(new ReportMembersViewModel + { + MemberSurname = mp.MemberSurname, + MemberName = mp.MemberName, + MemberPatronymic = mp.MemberPatronymic, + MealPlanName = mealPlan.MealPlanName, + MealPlanPrice = mealPlan.MealPlanPrice + }); + } + } + + return listAll; + } + + public void SaveMemberConferenceToExcelFile(ReportOrganiserBindingModel model) + { + _saveToExcel.CreateReport(new ExcelInfoOrganiser + { + FileName = model.FileName, + Title = "Список конференций", + MemberConferences = GetMemberConference(model.Ids) + }); + } + + public void SaveMemberConferenceToWordFile(ReportOrganiserBindingModel model) + { + _saveToWord.CreateDoc(new WordInfoOrganiser + { + FileName = model.FileName, + Title = "Список конференций", + MemberConferences = GetMemberConference(model.Ids) + }); + } + + public void SaveMembersToPdfFile(ReportOrganiserBindingModel model) + { + if (model.DateFrom == null) + { + throw new ArgumentException("Дата начала не задана"); + } + + if (model.DateTo == null) + { + throw new ArgumentException("Дата окончания не задана"); + } + _saveToPdf.CreateDoc(new PdfInfoOrganiser + { + FileName = model.FileName, + Title = "Список участников", + DateFrom = model.DateFrom!.Value, + DateTo = model.DateTo!.Value, + Members = GetMembers(model) + }); + } + } +}