CourseWork_ServiceStation/ServiceStation/ServiceStationBusinessLogic/BusinessLogics/GuarantorReportLogic.cs

173 lines
6.4 KiB
C#

using ServiceStationBusinessLogic.OfficePackage;
using ServiceStationBusinessLogic.OfficePackage.HelperModels;
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 GuarantorReportLogic : IGuarantorReportLogic
{
private readonly IDefectStorage _defectStorage;
private readonly ISparePartStorage _sparepartStorage;
private readonly IRepairStorage _repairStorage;
private readonly ITechnicalWorkStorage _techWorkStorage;
private readonly AbstractSaveToExcelGuarantor _saveToExcel;
private readonly AbstractSaveToWordGuarantor _saveToWord;
private readonly AbstractSaveToPdfGuarantor _saveToPdf;
public GuarantorReportLogic(IDefectStorage defectStorage, ISparePartStorage sparepartStorage, IRepairStorage repairStorage, ITechnicalWorkStorage techWorkStorage, AbstractSaveToExcelGuarantor saveToExcel, AbstractSaveToPdfGuarantor saveToPdf, AbstractSaveToWordGuarantor saveToWord)
{
_defectStorage = defectStorage;
_sparepartStorage = sparepartStorage;
_repairStorage = repairStorage;
_techWorkStorage = techWorkStorage;
_saveToExcel = saveToExcel;
_saveToWord = saveToWord;
_saveToPdf = saveToPdf;
}
public List<ReportDefectsViewModel> GetDefects(List<int> Ids)
{
if (Ids == null) return new List<ReportDefectsViewModel>();
List<ReportDefectsViewModel> allList = new List<ReportDefectsViewModel>();
double price = 0;
var defects = _defectStorage.GetFullList();
List<SparePartViewModel> spareparts = new List<SparePartViewModel>();
foreach (var sparepartId in Ids)
{
var sparepart = _sparepartStorage.GetElement(new SparePartSearchModel
{
Id = sparepartId,
});
if (sparepart != null)
{
spareparts.Add(sparepart);
}
}
foreach (var sparepart in spareparts)
{
var rec = new ReportDefectsViewModel
{
SparePartName = sparepart.SparePartName,
DefectsInfo = new List<(string, double)>()
};
foreach (var defect in defects)
{
var repair = _repairStorage.GetElement(new RepairSearchModel
{
Id = defect.RepairId,
});
foreach (var repSpareParts in repair.RepairSpareParts.Values)
{
if (repSpareParts.Id == sparepart.Id)
{
rec.DefectsInfo.Add(new(defect.DefectType, defect.DefectPrice));
price += defect.DefectPrice;
}
}
}
rec.FullPrice = price;
allList.Add(rec);
}
return allList;
}
public List<ReportSparePartsViewModel> GetSpareParts(ReportGuarantorBindingModel model)
{
List<ReportSparePartsViewModel> allList = new List<ReportSparePartsViewModel>();
List<RepairViewModel> repairList = _repairStorage.GetFilteredList(new RepairSearchModel
{
DateFrom = model.DateFrom,
DateTo = model.DateTo,
GuarantorId = model.GuarantorId,
});
foreach (var repair in repairList)
{
foreach (var sparepart in repair.RepairSpareParts.Values)
{
allList.Add(new ReportSparePartsViewModel
{
SparePartName = sparepart.SparePartName,
SparePartPrice = sparepart.SparePartPrice,
RepairName = repair.RepairName,
RepairStartDate = repair.RepairStartDate,
RepairPrice = repair.RepairPrice,
});
}
}
List<TechnicalWorkViewModel> techWorkList = _techWorkStorage.GetFilteredList(new TechnicalWorkSearchModel
{
DateFrom = model.DateFrom,
DateTo = model.DateTo,
});
foreach (var techWork in techWorkList)
{
allList.Add(new ReportSparePartsViewModel
{
WorkType = techWork.WorkType,
TechnicalWorkDate = techWork.DateStartWork,
TechnicalWorkPrice = techWork.WorkPrice,
});
}
return allList;
}
public void SaveDefectsToWordFile(ReportGuarantorBindingModel model)
{
_saveToWord.CreateDoc(new WordInfoGuarantor
{
FileName = model.FileName,
Title = "Список неисправностей",
DefectsBySparePart = GetDefects(model.Ids!)
});
}
public void SaveDefectsToExcelFile(ReportGuarantorBindingModel model)
{
_saveToExcel.CreateReport(new ExcelInfoGuarantor
{
FileName = model.FileName,
Title = "Список работ",
DefectsBySparePart = GetDefects(model.Ids!)
});
}
public void SaveSparePartsToPdfFile(ReportGuarantorBindingModel model)
{
if (model.DateFrom == null)
{
throw new ArgumentException("Дата начала не задана");
}
if (model.DateTo == null)
{
throw new ArgumentException("Дата окончания не задана");
}
_saveToPdf.CreateDoc(new PdfInfoGuarantor
{
FileName = model.FileName,
Title = "Список запчастей",
DateFrom = model.DateFrom.Value,
DateTo = model.DateTo.Value,
SpareParts = GetSpareParts(model)
});
}
}
}