using KanSan.Base; using KanSan.Base.Interfaces; using KanSan.Base.Interfaces.UI; using KanSan.Base.Models; using Syncfusion.XlsIO; using Syncfusion.XlsIO.FormatParser.FormatTokens; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; namespace KanSan.ViewModel { public class SchaedenListViewModel : BaseViewModel, ISchaedenListViewModel { private Sewer actualSelectedSewer; IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext()); private List schaeden; public List Schaeden { get => schaeden; } public SchaedenListViewModel(Sewer actualSelectedSewer) { this.actualSelectedSewer = actualSelectedSewer; schaeden = unitOfWork.SchaedenRepository.Get(x => x.Sewer.Equals(actualSelectedSewer),includeProperties: "Sanierungskonzept,Sanierungskonzept.Taetigkeiten,Sanierungskonzept.Taetigkeiten.LeistungsverzeichnisPosition").ToList(); } public Schaeden NeueSchaden() { Guid guid = Guid.NewGuid(); Schaeden neueSchaden = new Schaeden() { GuidNr = guid, Sewer = actualSelectedSewer }; unitOfWork.SchaedenRepository.Update(neueSchaden,false); unitOfWork.Commit(); List res = unitOfWork.SchaedenRepository.Get(x => x.GuidNr.Equals(guid)).ToList(); if (res.Count < 1) throw new Exception("Der zuvor eingefügte Schäden konnte nicht gefunden werden"); return res.First(); } public void GenerateExcelFile() { // Dictionary um rauszufinden welche Leistungsverzeichnis Positionen in welche Spalte sind Dictionary LVPosSpalte = new Dictionary(); ExcelEngine excelEngine = new ExcelEngine(); IWorkbook workbook = excelEngine.Excel.Workbooks.Open("aufmass.xls"); IWorksheet sheet = workbook.Worksheets[0]; // Generate LeistungsverzeichnisPositionen //Spalte G => O => 7 / 15 //Zeile = 8 sheet.Range["B9"].Text = MainWindowViewModel.Baustelle.Projekt.Kunde.Vorname; sheet.Range["B10"].Text = MainWindowViewModel.Baustelle.BaustelleNummer; sheet.Range["D10"].Text = MainWindowViewModel.Baustelle.OrtTeil; sheet.Range["D11"].Text = actualSelectedSewer.Material.ToString(); sheet.Range["A15"].Text = actualSelectedSewer.StrasseName; sheet.Range["B15"].Text = actualSelectedSewer.DN.ToString(); sheet.Range["C15"].Text = actualSelectedSewer.PunktOben.Objektnummer; sheet.Range["D15"].Text = actualSelectedSewer.PunktUnten.Objektnummer; sheet.Range["F15"].Number = Convert.ToDouble(actualSelectedSewer.Haltungslaenge); #region LeistungsverzeichnisGenerierung for (int spalte = 7; spalte <= 15; spalte++) { int i = spalte - 7; if (i >= MainWindowViewModel.LVPositionen.Count) break; sheet.Range[8, spalte].Text = MainWindowViewModel.LVPositionen[i].Beschreibung; LVPosSpalte.Add(MainWindowViewModel.LVPositionen[i].GuidNr, spalte); } #endregion /* E16 für Station * G - O8 für LV * P15 für Datum * Q15 für Bemerkung * R15 für v.TV * S15 für n.TV */ // Zeile 15 => 40 int counter = 15; foreach(Schaeden schaden in Schaeden) { sheet.Range[counter, 5].Number = Convert.ToDouble(schaden.Entfernung); List taetigkeiten = schaden.Sanierungskonzept.Taetigkeiten; IEnumerable datums = taetigkeiten.Select(x => x.ZeitStempel.Date).Distinct(); foreach (DateTime datum in datums) { List tätigkeit = taetigkeiten.FindAll(x => x.ZeitStempel.Date.Equals(datum)); foreach (Taetigkeiten tätig in tätigkeit) { int column = LVPosSpalte[tätig.LeistungsverzeichnisPosition.GuidNr]; if (tätig.ZeitStempel != DateTime.MinValue) { sheet.Range[counter, column].Number = Convert.ToDouble(tätig.Anzahl); sheet.Range[counter, 16].DateTime = tätig.ZeitStempel; } else { sheet.Range[counter, column].Text = "x"; } } counter++; } } workbook.SaveAs("test.xls"); } } }