diff --git a/KanSan.Base/Interfaces/UI/ITätigkeitNewViewModel.cs b/KanSan.Base/Interfaces/UI/ITätigkeitNewViewModel.cs new file mode 100644 index 0000000..011fc46 --- /dev/null +++ b/KanSan.Base/Interfaces/UI/ITätigkeitNewViewModel.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace KanSan.Base.Interfaces.UI +{ + public interface ITätigkeitNewViewModel + { + } +} diff --git a/KanSan.ViewModel/KanSan.ViewModel.csproj b/KanSan.ViewModel/KanSan.ViewModel.csproj index c015015..cf78868 100644 --- a/KanSan.ViewModel/KanSan.ViewModel.csproj +++ b/KanSan.ViewModel/KanSan.ViewModel.csproj @@ -16,6 +16,7 @@ + diff --git a/KanSan.ViewModel/MainWindowViewModel.cs b/KanSan.ViewModel/MainWindowViewModel.cs index 5ab62b6..e155da1 100644 --- a/KanSan.ViewModel/MainWindowViewModel.cs +++ b/KanSan.ViewModel/MainWindowViewModel.cs @@ -2,6 +2,7 @@ using KanSan.Base.Interfaces; using KanSan.Base.Models; using Microsoft.Win32; +using Syncfusion.XlsIO; using System; using System.Collections.Generic; using System.ComponentModel; @@ -25,6 +26,7 @@ namespace KanSan.ViewModel private Sewer _selectedObjekt; public static Baustelle Baustelle; + public static List LVPositionen = null; public string ApplicationTitle @@ -43,6 +45,19 @@ namespace KanSan.ViewModel } } + void LoadBaustellenLeistungsverzeichnis() + { + if (LVPositionen == null) + LVPositionen = new List(); + if (LVPositionen.Count > 0) + LVPositionen.Clear(); + IEnumerable baustelleLeistungsverzeichnis = unitOfWork.LeistungsverzeichnisReferenz.Get(x => x.Baustelle.Equals(Baustelle), includeProperties: "LVPosition"); + foreach(BaustelleLeistungsverzeichnisReferenz referenz in baustelleLeistungsverzeichnis) + { + LVPositionen.Add(referenz.LVPosition); + } + } + public Kunde SelectedKunde { get @@ -172,6 +187,12 @@ namespace KanSan.ViewModel public MainWindowViewModel() { LadeRegistry(); + LoadBaustellenLeistungsverzeichnis(); + } + + public void GenerateExcelFile() + { + } } } diff --git a/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs b/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs index f497470..922cff9 100644 --- a/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs +++ b/KanSan.ViewModel/Schaeden/SchaedenListViewModel.cs @@ -2,8 +2,11 @@ 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; @@ -22,7 +25,7 @@ namespace KanSan.ViewModel public SchaedenListViewModel(Sewer actualSelectedSewer) { this.actualSelectedSewer = actualSelectedSewer; - schaeden = unitOfWork.SchaedenRepository.Get(x => x.Sewer.Equals(actualSelectedSewer)).ToList(); + schaeden = unitOfWork.SchaedenRepository.Get(x => x.Sewer.Equals(actualSelectedSewer),includeProperties: "Sanierungskonzept,Sanierungskonzept.Taetigkeiten,Sanierungskonzept.Taetigkeiten.LeistungsverzeichnisPosition").ToList(); } public Schaeden NeueSchaden() @@ -40,5 +43,81 @@ namespace KanSan.ViewModel 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"); + } } } diff --git a/KanSan.ViewModel/TaetigkeitEditViewModel.cs b/KanSan.ViewModel/Tätigkeiten/TaetigkeitEditViewModel.cs similarity index 98% rename from KanSan.ViewModel/TaetigkeitEditViewModel.cs rename to KanSan.ViewModel/Tätigkeiten/TaetigkeitEditViewModel.cs index f42765b..4fce47e 100644 --- a/KanSan.ViewModel/TaetigkeitEditViewModel.cs +++ b/KanSan.ViewModel/Tätigkeiten/TaetigkeitEditViewModel.cs @@ -107,6 +107,7 @@ namespace KanSan.ViewModel IEnumerable baustelleLeistungsverzeichnis = unitOfWork.LeistungsverzeichnisReferenz.Get(x => x.Baustelle.Equals(MainWindowViewModel.Baustelle),includeProperties:"LVPosition"); lvPositionen = new List(); + // TODO auslagern foreach(BaustelleLeistungsverzeichnisReferenz referenz in baustelleLeistungsverzeichnis) { if((model.LeistungsverzeichnisPosition != null) && (model.LeistungsverzeichnisPosition.GuidNr.Equals(referenz.LVPosition.GuidNr))) @@ -115,6 +116,7 @@ namespace KanSan.ViewModel } lvPositionen.Add(referenz.LVPosition); } + //MainWindowViewModel.LVPositionen = lvPositionen; var x = LVPositionen.Equals(leistungsverzeichnis); } diff --git a/KanSan/KanSan.csproj b/KanSan/KanSan.csproj index 30ef310..4676b73 100644 --- a/KanSan/KanSan.csproj +++ b/KanSan/KanSan.csproj @@ -15,11 +15,11 @@ - - - - - + + + + + @@ -27,4 +27,10 @@ + + + PreserveNewest + + + \ No newline at end of file diff --git a/KanSan/KanSan.csproj.user b/KanSan/KanSan.csproj.user index c5da6b8..d553e6f 100644 --- a/KanSan/KanSan.csproj.user +++ b/KanSan/KanSan.csproj.user @@ -67,6 +67,9 @@ Code + + Code + @@ -138,5 +141,8 @@ Designer + + Designer + \ No newline at end of file diff --git a/KanSan/MainWindow.xaml.cs b/KanSan/MainWindow.xaml.cs index 8380c37..97885a6 100644 --- a/KanSan/MainWindow.xaml.cs +++ b/KanSan/MainWindow.xaml.cs @@ -18,6 +18,7 @@ using KanSan.Base.Models; using KanSan.ViewModel; using Microsoft.EntityFrameworkCore; using Syncfusion.Windows.Shared; +using Syncfusion.XlsIO; namespace KanSan { @@ -38,7 +39,10 @@ namespace KanSan public MainWindow() { InitializeComponent(); + + this.DataContext = new MainWindowViewModel(); + (this.DataContext as MainWindowViewModel).GenerateExcelFile(); #if DEBUG System.Diagnostics.PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Critical; #endif diff --git a/KanSan/SampleData/TätigkeitNewViewModelSampleData.cs b/KanSan/SampleData/TätigkeitNewViewModelSampleData.cs new file mode 100644 index 0000000..02e7304 --- /dev/null +++ b/KanSan/SampleData/TätigkeitNewViewModelSampleData.cs @@ -0,0 +1,28 @@ +using KanSan.Base.Interfaces.UI; +using KanSan.Base.Models; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace KanSan.SampleData +{ + class TätigkeitNewViewModelSampleData : ITätigkeitNewViewModel + { + List lvPositionen = new List(); + public List LVPositionen => lvPositionen; + + public TätigkeitNewViewModelSampleData() + { + + for (int i = 1; i <= 10; i++) + { + lvPositionen.Add(new Base.Models.LeistungsverzeichnisPosition() + { + Beschreibung = "TV Inspektion DN " + i + "00" + }); + } + + } + } +} diff --git a/KanSan/UI/Schäden/UCSchaedenList.xaml b/KanSan/UI/Schäden/UCSchaedenList.xaml index 313944f..3a090e1 100644 --- a/KanSan/UI/Schäden/UCSchaedenList.xaml +++ b/KanSan/UI/Schäden/UCSchaedenList.xaml @@ -21,6 +21,7 @@ + @@ -52,5 +53,6 @@