178 lines
7.0 KiB
C#
Raw Normal View History

2024-03-24 13:39:16 +04:00
using HotelBusinessLogic.OfficePackage.HelperModels;
using HotelBusinessLogic.OfficePackage;
using HotelContracts.BusinessLogicsContracts;
using HotelContracts.SearchModels;
using HotelContracts.StoragesContracts;
using HotelContracts.ViewModels;
using HotelContracts.BindingModels;
2024-05-04 00:28:25 +04:00
using HotelDataBaseImplement.Implemets;
2024-05-04 01:39:00 +04:00
using HotelDataBaseImplement.Models;
2024-03-24 13:39:16 +04:00
namespace HotelBusinessLogic.BusinessLogics
{
public class ReportLogicOrganiser : IReportOrganiserLogic
{
private readonly IMealPlanStorage _mealPlanStorage;
private readonly IMemberStorage _memberStorage;
private readonly IConferenceStorage _conferenceStorage;
2024-05-04 00:28:25 +04:00
private readonly IConferenceBookingStorage _conferenceBookingStorage;
2024-05-04 01:39:00 +04:00
private readonly IRoomStorage _roomStorage;
2024-03-24 13:39:16 +04:00
private readonly AbstractSaveToExcelOrganiser _saveToExcel;
private readonly AbstractSaveToWordOrganiser _saveToWord;
private readonly AbstractSaveToPdfOrganiser _saveToPdf;
2024-05-04 01:39:00 +04:00
public ReportLogicOrganiser(IMealPlanStorage mealPlanStorage, IMemberStorage memberStorage, IConferenceStorage conferenceStorage, IConferenceBookingStorage conferenceBookingStorage, IRoomStorage roomStorage, AbstractSaveToExcelOrganiser saveToExcel, AbstractSaveToWordOrganiser saveToWord, AbstractSaveToPdfOrganiser saveToPdf)
2024-03-24 13:39:16 +04:00
{
_mealPlanStorage = mealPlanStorage;
_memberStorage = memberStorage;
_conferenceStorage = conferenceStorage;
2024-05-04 00:28:25 +04:00
_conferenceBookingStorage = conferenceBookingStorage;
2024-05-04 01:39:00 +04:00
_roomStorage = roomStorage;
2024-03-24 13:39:16 +04:00
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
2024-05-04 00:28:25 +04:00
public List<ReportMemberConferenceViewModel> GetMemberConferenceBooking(List<int> Ids)
2024-03-24 13:39:16 +04:00
{
if (Ids == null)
{
return new List<ReportMemberConferenceViewModel>();
}
var conferences = _conferenceStorage.GetFullList();
2024-05-04 00:28:25 +04:00
var conferenceBookings = _conferenceBookingStorage.GetFullList();
2024-03-24 13:39:16 +04:00
List<MemberViewModel> members = new List<MemberViewModel>();
foreach (var memberId in Ids)
{
var res = _memberStorage.GetElement(new MemberSearchModel { Id = memberId });
if (res != null)
{
members.Add(res);
}
}
var list = new List<ReportMemberConferenceViewModel>();
foreach (var member in members)
{
var record = new ReportMemberConferenceViewModel
{
MemberSurname = member.MemberSurname,
MemberName = member.MemberName,
MemberPatronymic = member.MemberPatronymic,
2024-05-04 00:28:25 +04:00
ConferenceBookings = new List<Tuple<string, DateTime>>()
2024-03-24 13:39:16 +04:00
};
foreach (var conference in conferences)
{
if (conference.ConferenceMembers.ContainsKey(member.Id))
{
2024-05-04 00:28:25 +04:00
var bookingsForConference = conferenceBookings.Where(cb => cb.ConferenceId == conference.Id).ToList();
foreach (var booking in bookingsForConference)
{
record.ConferenceBookings.Add(new Tuple<string, DateTime>(booking.NameHall, booking.BookingDate.Value));
}
2024-03-24 13:39:16 +04:00
}
}
list.Add(record);
}
return list;
}
public List<ReportMembersViewModel> GetMembers(ReportOrganiserBindingModel model)
{
var listAll = new List<ReportMembersViewModel>();
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,
});
2024-05-04 01:39:00 +04:00
var rooms = _roomStorage.GetFullList();
2024-03-24 13:39:16 +04:00
foreach (var mealPlan in listMealPlans)
{
foreach (var mp in mealPlan.MealPlanMembers.Values)
{
2024-05-04 01:39:00 +04:00
var room = rooms.FirstOrDefault(r => r.MealPlanId == mealPlan.Id);
2024-05-29 19:53:56 +04:00
if (room != null)
2024-03-24 13:39:16 +04:00
{
2024-05-29 19:53:56 +04:00
listAll.Add(new ReportMembersViewModel
{
MemberSurname = mp.MemberSurname,
MemberName = mp.MemberName,
MemberPatronymic = mp.MemberPatronymic,
RoomName = room.RoomName,
RoomPrice = room.RoomPrice
});
}
2024-03-24 13:39:16 +04:00
}
}
return listAll;
}
public void SaveMemberConferenceToExcelFile(ReportOrganiserBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfoOrganiser
{
FileName = model.FileName,
Title = "Список конференций",
2024-05-04 00:28:25 +04:00
MemberConferences = GetMemberConferenceBooking(model.Ids)
2024-03-24 13:39:16 +04:00
});
}
public void SaveMemberConferenceToWordFile(ReportOrganiserBindingModel model)
{
_saveToWord.CreateDoc(new WordInfoOrganiser
{
FileName = model.FileName,
Title = "Список конференций",
2024-05-04 00:28:25 +04:00
MemberConferences = GetMemberConferenceBooking(model.Ids)
2024-03-24 13:39:16 +04:00
});
}
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)
});
}
}
}