using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using VetClinicBusinessLogic.BindingModels; using VetClinicBusinessLogic.BusinessLogic.OfficePackage; using VetClinicBusinessLogic.BusinessLogic.OfficePackage.Models; using VetClinicBusinessLogic.Interfaces; using VetClinicBusinessLogic.ViewModels; namespace VetClinicBusinessLogic.BusinessLogic { public class ReportLogic { private readonly IServiceStorage _serviceStorage; private readonly IVisitStorage _VisitStorage; private readonly ReportToExcel _saveToExcel; private readonly ReportToWord _saveToWord; private readonly ReportToPdf _saveToPdf; private readonly IPaymentStorage paymentStorage; public ReportLogic(IVisitStorage VisitStorage, IPaymentStorage paymentStorage, IServiceStorage serviceStorage, ReportToExcel saveToExcel, ReportToWord saveToWord, ReportToPdf saveToPdf) { this.paymentStorage = paymentStorage; _VisitStorage = VisitStorage; _serviceStorage = serviceStorage; _saveToExcel = saveToExcel; _saveToWord = saveToWord; _saveToPdf = saveToPdf; } public List GetVisitService(int UserId) { var Visits = _VisitStorage.GetFilteredList(new VisitBindingModel() { ClientId = UserId }); var list = new List(); foreach (var Visit in Visits) { var record = new ReportVisitServiceViewModel { VisitDate = Visit.VisitsDate, Services = new List(), TotalCount = 0 }; foreach (var service in Visit.VisitServices) { record.Services.Add(service.Value); record.TotalCount += 1; } list.Add(record); } return list; } public List GetServiceVisit(int UserId) { var services = _serviceStorage.GetFullList(); var list = new List(); foreach (var service in services) { var record = new ReportServiceVisitViewModel { Name = service.Name, Visits = new List(), TotalCount = 0 }; foreach (var visit in service.VisitServices) { record.Visits.Add(visit.Value); record.TotalCount += 1; } list.Add(record); } return list; } public void SaveVisitServiceToExcelFile(ReportBindingModel model) { _saveToExcel.CreateReportVisitService(new ExcelInfoVisitService { FileName = model.FileName, Title = "Список визитов", VisitServices = GetVisitService(model.UserId) }); } public void SaveServiceVisitToExcelFile(ReportBindingModel model) { _saveToExcel.CreateReportServiceVisit(new ExcelInfoServiceVisit { FileName = model.FileName, Title = "Список услуг", VisitServices = GetServiceVisit(model.UserId) }); } public void SaveVisitServiceToWordFile(ReportBindingModel model) { _saveToWord.CreateDocVisitService(new WordInfoVisitService { FileName = model.FileName, Title = "Визиты по услугам", VisitServices = GetVisitService(model.UserId) }); } public void SaveServiceVisitToWordFile(ReportBindingModel model) { _saveToWord.CreateDocServiceVisit(new WordInfoServiceVisit { FileName = model.FileName, Title = "Услуги по визитам", VisitServices = GetServiceVisit(model.UserId) }); } public List GetOrders(ReportBindingModel model) { return _VisitStorage.GetFilteredListDate(new VisitBindingModel { DateFrom = model.DateFrom, DateTo = model.DateTo }) .Select(x => new ReportVisitViewModel { DateCreate = x.VisitsDate, ClientName = x.ClientName, Sum = x.Sum }) .ToList(); } public ReportServiceViewModel GetServices(ReportBindingModel model) { var list = _VisitStorage.GetFilteredListDate(new VisitBindingModel { DateFrom = model.DateFrom, DateTo = model.DateTo }); Dictionary dic = new Dictionary(); foreach (var item in list) { foreach (var item2 in item.VisitServices) { if (dic.ContainsKey(item2.Value)) { dic[item2.Value]++; } else { dic[item2.Value] = 1; } } } return new ReportServiceViewModel() { Sum = paymentStorage.GetElementFirstLast(new PaymentDateBindingModel()).Remains, Services = dic }; } public void SaveOrdersToPdfFileVisit(ReportBindingModel model) { _saveToPdf.CreateDoc(new PdfInfo { FileName = model.FileName, Title = "Список визитов", DateFrom = model.DateFrom.Value, DateTo = model.DateTo.Value, Visits = GetOrders(model) }); } public void SaveOrdersToPdfFileService(ReportBindingModel model) { _saveToPdf.CreateDocService(new PdfInfoService { FileName = model.FileName, Title = "Список визитов", DateFrom = model.DateFrom.Value, DateTo = model.DateTo.Value, Services = GetServices(model) }); } } }