using ServiceStationContracts.BindingModels; using ServiceStationContracts.BusinessLogicsContracts; using ServiceStationContracts.SearchModels; using ServiceStationContracts.StoragesContracts; using ServiceStationContracts.ViewModels; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ServiceStationBusinessLogic.BusinessLogics { public class ExecutorReportLogic : IExecutorReportLogic { private readonly ITechnicalWorkStorage _techWorkStorage; private readonly IRepairStorage _repairStorage; private readonly IWorkStorage _workStorage; private readonly ICarStorage _carStorage; public ExecutorReportLogic(ITechnicalWorkStorage technicalWorkStorage, IRepairStorage repairStorage, IWorkStorage workStorage, ICarStorage carStorage) { _techWorkStorage = technicalWorkStorage; _repairStorage = repairStorage; _workStorage = workStorage; _carStorage = carStorage; } public List GetWorks(List Ids) { if(Ids == null) return new List(); List allList = new List(); var works = _workStorage.GetFullList(); List cars = new List(); foreach (var carId in Ids) { var car = _carStorage.GetElement(new CarSearchModel { Id = carId, }); if(car != null) { cars.Add(car); } } foreach(var car in cars) { var rec = new ReportWorksViewModel { CarNumber = car.CarNumber, WorksInfo = new List<(string, double)>() }; foreach(var work in works) { var techWork = _techWorkStorage.GetElement(new TechnicalWorkSearchModel { Id = work.TechnicalWorkId, }); foreach(var techCars in techWork.TechnicalWorkCars.Values) { if(techCars.Id == car.Id) { rec.WorksInfo.Add(new(work.WorkName, work.WorkPrice)); } } } allList.Add(rec); } return allList; } public List GetCars(ReportBindingModel model) { List allList = new List(); List techWorkList = _techWorkStorage.GetFilteredList(new TechnicalWorkSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo, }); foreach(var techWork in techWorkList) { foreach(var car in techWork.TechnicalWorkCars.Values) { allList.Add(new ReportCarsViewModel { CarNumber = car.CarNumber, CarBrand = car.CarBrand, WorkType = techWork.WorkType, TechnicalWorkDate = techWork.DateStartWork, TechnicalWorkPrice = techWork.WorkPrice, }); } } List repairList = _repairStorage.GetFilteredList(new RepairSearchModel { DateFrom = model.DateFrom, DateTo = model.DateTo, }); foreach(var repair in repairList) { allList.Add(new ReportCarsViewModel { RepairName = repair.RepairName, RepairStartDate = repair.RepairStartDate, RepairPrice = repair.RepairPrice, }); } return allList; } public void SaveComponentsToWordFile(ReportBindingModel model) { throw new NotImplementedException(); } public void SaveOrdersToPdfFile(ReportBindingModel model) { throw new NotImplementedException(); } public void SaveRepairComponentToExcelFile(ReportBindingModel model) { throw new NotImplementedException(); } } }