using KanSan.Base; using KanSan.Base.Interfaces; using KanSan.Base.Interfaces.UI; using KanSan.Base.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; namespace KanSan.ViewModel { public class LeistungsverzeichnisViewPosition : ILeistungsverzeichnisViewPosition { Guid guid; string positionsnummer; string beschreibung; string einheit; string tag; bool isActiveInBaustelle; public Guid GuidNr { get => guid; set => guid = value; } public string Positionsnummer { get => positionsnummer; set => positionsnummer = value; } public string Beschreibung { get => beschreibung; set => beschreibung = value; } public string Einheit { get => einheit; set => einheit = value; } public string Tag { get => tag; set => tag = value; } public bool IsActiveInBaustelle { get => isActiveInBaustelle; set => isActiveInBaustelle = value; } } public class LeistungsverzeichnisBaustelleViewModel : PropertyChangedClass, INotifyPropertyChanged, ILeistungsverzeichnisBaustelleViewModel { IUnitOfWork unitOfWork = new UnitOfWork(new KanSanContext()); Baustelle selectedBaustelle = null; List baustellen = new List(); List leistungsverzeichnisViewPositions = new List(); public void Speichern() { unitOfWork.Commit(); } public List Baustellen => baustellen; public List LeistungsverzeichnisPositionen { get => leistungsverzeichnisViewPositions; set { leistungsverzeichnisViewPositions = value; OnPropertyChanged(); } } public void ToggleActive(LeistungsverzeichnisViewPosition leistungsverzeichnisViewPosition) { leistungsverzeichnisViewPosition.IsActiveInBaustelle = !leistungsverzeichnisViewPosition.IsActiveInBaustelle; LeistungsverzeichnisPosition pos = unitOfWork.LeistungsverzeichnisRepository.Get(x => x.GuidNr.Equals(leistungsverzeichnisViewPosition.GuidNr)).ToList().First(); BaustelleLeistungsverzeichnisReferenz bauRef = new BaustelleLeistungsverzeichnisReferenz() { GuidNr = Guid.NewGuid(), Baustelle = selectedBaustelle, LVPosition = pos }; if (leistungsverzeichnisViewPosition.IsActiveInBaustelle) { _bs.Add(bauRef); unitOfWork.LeistungsverzeichnisReferenz.Update(bauRef); } else { BaustelleLeistungsverzeichnisReferenz referenz = _bs.FindLast(x => x.LVPosition.GuidNr.Equals(leistungsverzeichnisViewPosition.GuidNr) && x.Baustelle.Equals(selectedBaustelle)); Trace.WriteLine(referenz); unitOfWork.LeistungsverzeichnisReferenz.Delete(referenz); } buildLeistungsverzeichnisList(); } public Baustelle SelectedBaustelle { get => selectedBaustelle; set { if (selectedBaustelle == value) return; selectedBaustelle = value; buildLeistungsverzeichnisList(); } } List _bs = null; private bool IsActive(LeistungsverzeichnisPosition ps) { if(_bs == null) { if (selectedBaustelle == null) return false; _bs = unitOfWork.LeistungsverzeichnisReferenz.Get(x => x.Baustelle.Equals(selectedBaustelle)).ToList(); } //return false; List d = _bs.FindAll(x => x.LVPosition.GuidNr.Equals(ps.GuidNr)); return (d.Count > 0); } private void buildLeistungsverzeichnisList() { List poses = new List(); List allePositionen = unitOfWork.LeistungsverzeichnisRepository.Get().ToList(); foreach (LeistungsverzeichnisPosition pos in allePositionen) { poses.Add(new LeistungsverzeichnisViewPosition() { GuidNr = pos.GuidNr, Beschreibung = pos.Beschreibung, IsActiveInBaustelle = IsActive(pos), Einheit = pos.Einheit, Positionsnummer = pos.Positionsnummer, Tag = pos.Tag }); } LeistungsverzeichnisPositionen = poses; } public LeistungsverzeichnisBaustelleViewModel() { baustellen = unitOfWork.BaustelleRepository.Get().ToList(); } } }