/// <summary> /// Danner ViewModel for en adressekonto. /// </summary> /// <param name="regnskabViewModel">ViewModel for regnskabet, som adressekontoen skal være tilknyttet.</param> /// <param name="adressekontoModel">Model for adressekontoen.</param> /// <param name="displayName">Navn for ViewModel, som kan benyttes til visning i brugergrænsefladen.</param> /// <param name="image">Billede, der illustrerer en adressekontoen.</param> /// <param name="finansstyringRepository">Implementering af repository til finansstyring.</param> /// <param name="exceptionHandlerViewModel">Implementering af ViewModel for en exceptionhandler.</param> public AdressekontoViewModel(IRegnskabViewModel regnskabViewModel, IAdressekontoModel adressekontoModel, string displayName, byte[] image, IFinansstyringRepository finansstyringRepository, IExceptionHandlerViewModel exceptionHandlerViewModel) { if (regnskabViewModel == null) { throw new ArgumentNullException("regnskabViewModel"); } if (adressekontoModel == null) { throw new ArgumentNullException("adressekontoModel"); } if (string.IsNullOrEmpty(displayName)) { throw new ArgumentNullException("displayName"); } if (image == null) { throw new ArgumentNullException("image"); } if (finansstyringRepository == null) { throw new ArgumentNullException("finansstyringRepository"); } if (exceptionHandlerViewModel == null) { throw new ArgumentNullException("exceptionHandlerViewModel"); } _regnskabViewModel = regnskabViewModel; _adressekontoModel = adressekontoModel; _adressekontoModel.PropertyChanged += PropertyChangedOnAdressekontoModelEventHandler; _displayName = displayName; _image = image; _finansstyringRepository = finansstyringRepository; _exceptionHandlerViewModel = exceptionHandlerViewModel; }
/// <summary> /// Finder og returnerer elementer med historiske data for en given adressekonto. /// </summary> /// <param name="localeDataDocument">XML dokument, hvorfra elementer skal returneres.</param> /// <param name="adressekontoModel">Model for adressekontoen, hvortil historiske data skal returneres.</param> /// <returns>Elementer indeholdende historiske data til den givne adressekonto.</returns> public static IEnumerable <XElement> GetHistorikElements(this XDocument localeDataDocument, IAdressekontoModel adressekontoModel) { if (localeDataDocument == null) { throw new ArgumentNullException("localeDataDocument"); } if (adressekontoModel == null) { throw new ArgumentNullException("adressekontoModel"); } var regnskabElement = localeDataDocument.GetRegnskabElement(adressekontoModel.Regnskabsnummer); if (regnskabElement == null) { return(new List <XElement>(0)); } var historikElements = regnskabElement.Elements(XName.Get("AdressekontoHistorik", regnskabElement.Name.NamespaceName)).Where(m => m.Attribute(XName.Get("nummer", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("nummer", string.Empty)).Value, adressekontoModel.Nummer.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal) == 0 && m.Attribute(XName.Get("dato", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, GetHistorikDato(adressekontoModel.StatusDato), StringComparison.Ordinal) <= 0).ToList(); var removeElementUntil = DateTime.Today.AddYears(-2).AddMonths(-1); removeElementUntil = removeElementUntil.AddDays((removeElementUntil.Day) * -1); var elementToDelete = historikElements.FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, GetHistorikDato(removeElementUntil), StringComparison.Ordinal) <= 0); while (elementToDelete != null) { elementToDelete.Remove(); historikElements.Remove(elementToDelete); elementToDelete = historikElements.FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, GetHistorikDato(removeElementUntil), StringComparison.Ordinal) <= 0); } return(historikElements.OrderByDescending(m => m.Attribute(XName.Get("dato", string.Empty)).Value).ToList()); }
/// <summary> /// Gemmer data for en adressekonto i det lokale datalager. /// </summary> /// <param name="adressekontoModel">Model for adressekontoen.</param> /// <param name="localeDataDocument">XML dokument, hvori data skal gemmes.</param> public static void StoreInDocument(this IAdressekontoModel adressekontoModel, XDocument localeDataDocument) { if (adressekontoModel == null) { throw new ArgumentNullException("adressekontoModel"); } if (localeDataDocument == null) { throw new ArgumentNullException("localeDataDocument"); } var regnskabElement = localeDataDocument.GetRegnskabElement(adressekontoModel.Regnskabsnummer); if (regnskabElement == null) { return; } XElement adressekontoHistorikElement; var adressekontoElement = regnskabElement.Elements(XName.Get("Adressekonto", regnskabElement.Name.NamespaceName)).SingleOrDefault(m => m.Attribute(XName.Get("nummer", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("nummer", string.Empty)).Value, adressekontoModel.Nummer.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal) == 0); if (adressekontoElement == null) { adressekontoElement = new XElement(XName.Get("Adressekonto", regnskabElement.Name.NamespaceName)); adressekontoElement.UpdateAttribute(XName.Get("nummer", string.Empty), adressekontoModel.Nummer.ToString(CultureInfo.InvariantCulture)); adressekontoElement.UpdateAttribute(XName.Get("navn", string.Empty), adressekontoModel.Navn); adressekontoElement.UpdateAttribute(XName.Get("primaerTelefon", string.Empty), adressekontoModel.PrimærTelefon, false); adressekontoElement.UpdateAttribute(XName.Get("sekundaerTelefon", string.Empty), adressekontoModel.SekundærTelefon, false); regnskabElement.Add(adressekontoElement); adressekontoHistorikElement = new XElement(XName.Get("AdressekontoHistorik", regnskabElement.Name.NamespaceName)); adressekontoHistorikElement.UpdateAttribute(XName.Get("nummer", string.Empty), adressekontoModel.Nummer.ToString(CultureInfo.InvariantCulture)); adressekontoHistorikElement.UpdateAttribute(XName.Get("dato", string.Empty), GetHistorikDato(adressekontoModel.StatusDato)); adressekontoHistorikElement.UpdateAttribute(XName.Get("saldo", string.Empty), adressekontoModel.Saldo.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(adressekontoHistorikElement); return; } adressekontoElement.UpdateAttribute(XName.Get("navn", string.Empty), adressekontoModel.Navn); adressekontoElement.UpdateAttribute(XName.Get("primaerTelefon", string.Empty), adressekontoModel.PrimærTelefon, false); adressekontoElement.UpdateAttribute(XName.Get("sekundaerTelefon", string.Empty), adressekontoModel.SekundærTelefon, false); var adressekontoHistorikDato = GetHistorikDato(adressekontoModel.StatusDato); adressekontoHistorikElement = localeDataDocument.GetHistorikElements(adressekontoModel).FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, adressekontoHistorikDato, StringComparison.Ordinal) == 0); if (adressekontoHistorikElement == null) { var makeHistoric = true; adressekontoHistorikElement = localeDataDocument.GetHistorikElements(adressekontoModel).FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, adressekontoHistorikDato, StringComparison.Ordinal) < 0); if (adressekontoHistorikElement != null) { var prevSaldo = decimal.Parse(adressekontoHistorikElement.Attribute(XName.Get("saldo", string.Empty)).Value, NumberStyles.Any, CultureInfo.InvariantCulture); makeHistoric = adressekontoModel.Saldo != prevSaldo; } if (!makeHistoric) { return; } adressekontoHistorikElement = new XElement(XName.Get("AdressekontoHistorik", regnskabElement.Name.NamespaceName)); adressekontoHistorikElement.UpdateAttribute(XName.Get("nummer", string.Empty), adressekontoModel.Nummer.ToString(CultureInfo.InvariantCulture)); adressekontoHistorikElement.UpdateAttribute(XName.Get("dato", string.Empty), adressekontoHistorikDato); adressekontoHistorikElement.UpdateAttribute(XName.Get("saldo", string.Empty), adressekontoModel.Saldo.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(adressekontoHistorikElement); return; } adressekontoHistorikElement.UpdateAttribute(XName.Get("saldo", string.Empty), adressekontoModel.Saldo.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); }
/// <summary> /// Opdaterer ViewModel for adressekontoen. /// </summary> /// <param name="adressekontoViewModel">ViewModel for adressenkontoen, der skal opdateres.</param> /// <param name="adressekontoModel">Model for adressekontoen, som ViewModel for adressekontoen skal opdateres med.</param> /// <param name="argument">Argument, der benyttes til opdatering af ViewModel for adressekontoen.</param> private static void HandleResult(IAdressekontoViewModel adressekontoViewModel, IAdressekontoModel adressekontoModel, object argument) { if (adressekontoViewModel == null) { throw new ArgumentNullException("adressekontoViewModel"); } if (adressekontoModel == null) { throw new ArgumentNullException("adressekontoModel"); } if (argument == null) { throw new ArgumentNullException("argument"); } adressekontoViewModel.Navn = adressekontoModel.Navn; adressekontoViewModel.PrimærTelefon = adressekontoModel.PrimærTelefon; adressekontoViewModel.SekundærTelefon = adressekontoModel.SekundærTelefon; adressekontoViewModel.StatusDato = adressekontoModel.StatusDato; adressekontoViewModel.Saldo = adressekontoModel.Saldo; }