/// <summary> /// Opdaterer ViewModel for kontoen. /// </summary> /// <param name="kontoViewModel">ViewModel for kontoen, som skal opdateres.</param> /// <param name="kontoModel">Model for kontoen, som ViewModel for kontoen skal opdateres med.</param> /// <param name="kontogruppeViewModels">ViewModels for kontogrupper.</param> private static void HandleResult(IKontoViewModel kontoViewModel, IKontoModel kontoModel, IEnumerable <IKontogruppeViewModel> kontogruppeViewModels) { if (kontoViewModel == null) { throw new ArgumentNullException("kontoViewModel"); } if (kontoModel == null) { throw new ArgumentNullException("kontoModel"); } if (kontogruppeViewModels == null) { throw new ArgumentNullException("kontogruppeViewModels"); } var kontogruppeViewModel = kontogruppeViewModels.SingleOrDefault(m => m.Nummer == kontoModel.Kontogruppe); if (kontogruppeViewModel == null) { throw new IntranetGuiSystemException(Resource.GetExceptionMessage(ExceptionMessage.AccountGroupNotFound, kontoModel.Kontogruppe)); } kontoViewModel.Kontonavn = kontoModel.Kontonavn; kontoViewModel.Beskrivelse = kontoModel.Beskrivelse; kontoViewModel.Notat = kontoModel.Notat; kontoViewModel.Kontogruppe = kontogruppeViewModel; kontoViewModel.StatusDato = kontoModel.StatusDato; kontoViewModel.Kredit = kontoModel.Kredit; kontoViewModel.Saldo = kontoModel.Saldo; }
/// <summary> /// Finder og returnerer elementer med historiske data for en given konto. /// </summary> /// <param name="localeDataDocument">XML dokument, hvorfra elementer skal returneres.</param> /// <param name="kontoModel">Model for kontoen, hvortil historiske data skal returneres.</param> /// <returns>Elementer indeholdende historiske data til den givne konto.</returns> public static IEnumerable <XElement> GetHistorikElements(this XDocument localeDataDocument, IKontoModel kontoModel) { if (localeDataDocument == null) { throw new ArgumentNullException("localeDataDocument"); } if (kontoModel == null) { throw new ArgumentNullException("kontoModel"); } var regnskabElement = localeDataDocument.GetRegnskabElement(kontoModel.Regnskabsnummer); if (regnskabElement == null) { return(new List <XElement>(0)); } var historikElements = regnskabElement.Elements(XName.Get("KontoHistorik", regnskabElement.Name.NamespaceName)).Where(m => m.Attribute(XName.Get("kontonummer", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("kontonummer", string.Empty)).Value, kontoModel.Kontonummer, StringComparison.Ordinal) == 0 && m.Attribute(XName.Get("dato", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, GetHistorikDato(kontoModel.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 konto i det lokale datalager. /// </summary> /// <param name="kontoModel">Model for en konto.</param> /// <param name="localeDataDocument">XML dokument, hvori data skal gemmes.</param> public static void StoreInDocument(this IKontoModel kontoModel, XDocument localeDataDocument) { if (kontoModel == null) { throw new ArgumentNullException("kontoModel"); } if (localeDataDocument == null) { throw new ArgumentNullException("localeDataDocument"); } var regnskabElement = localeDataDocument.GetRegnskabElement(kontoModel.Regnskabsnummer); if (regnskabElement == null) { return; } XElement kontoHistorikElement; var kontoElement = regnskabElement.Elements(XName.Get("Konto", regnskabElement.Name.NamespaceName)).SingleOrDefault(m => m.Attribute(XName.Get("kontonummer", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("kontonummer", string.Empty)).Value, kontoModel.Kontonummer, StringComparison.Ordinal) == 0); if (kontoElement == null) { kontoElement = new XElement(XName.Get("Konto", regnskabElement.Name.NamespaceName)); kontoElement.UpdateAttribute(XName.Get("kontonummer", string.Empty), kontoModel.Kontonummer); kontoElement.UpdateAttribute(XName.Get("kontonavn", string.Empty), kontoModel.Kontonavn); kontoElement.UpdateAttribute(XName.Get("kontogruppe", string.Empty), kontoModel.Kontogruppe.ToString(CultureInfo.InvariantCulture)); kontoElement.UpdateAttribute(XName.Get("beskrivelse", string.Empty), kontoModel.Beskrivelse, false); kontoElement.UpdateAttribute(XName.Get("note", string.Empty), kontoModel.Notat, false); regnskabElement.Add(kontoElement); kontoHistorikElement = new XElement(XName.Get("KontoHistorik", regnskabElement.Name.NamespaceName)); kontoHistorikElement.UpdateAttribute(XName.Get("kontonummer", string.Empty), kontoModel.Kontonummer); kontoHistorikElement.UpdateAttribute(XName.Get("dato", string.Empty), GetHistorikDato(kontoModel.StatusDato)); kontoHistorikElement.UpdateAttribute(XName.Get("kredit", string.Empty), kontoModel.Kredit.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); kontoHistorikElement.UpdateAttribute(XName.Get("saldo", string.Empty), kontoModel.Saldo.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(kontoHistorikElement); return; } kontoElement.UpdateAttribute(XName.Get("kontonavn", string.Empty), kontoModel.Kontonavn); kontoElement.UpdateAttribute(XName.Get("kontogruppe", string.Empty), kontoModel.Kontogruppe.ToString(CultureInfo.InvariantCulture)); kontoElement.UpdateAttribute(XName.Get("beskrivelse", string.Empty), kontoModel.Beskrivelse, false); kontoElement.UpdateAttribute(XName.Get("note", string.Empty), kontoModel.Notat, false); var kontoHistorikDato = GetHistorikDato(kontoModel.StatusDato); kontoHistorikElement = localeDataDocument.GetHistorikElements(kontoModel).FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, kontoHistorikDato, StringComparison.Ordinal) == 0); if (kontoHistorikElement == null) { var makeHistoric = true; kontoHistorikElement = localeDataDocument.GetHistorikElements(kontoModel).FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, kontoHistorikDato, StringComparison.Ordinal) < 0); if (kontoHistorikElement != null) { var prevStatusDato = DateTime.ParseExact(kontoHistorikElement.Attribute(XName.Get("dato", string.Empty)).Value, "yyyyMMdd", CultureInfo.InvariantCulture); var prevKredit = decimal.Parse(kontoHistorikElement.Attribute(XName.Get("kredit", string.Empty)).Value, NumberStyles.Any, CultureInfo.InvariantCulture); var prevSaldo = decimal.Parse(kontoHistorikElement.Attribute(XName.Get("saldo", string.Empty)).Value, NumberStyles.Any, CultureInfo.InvariantCulture); makeHistoric = (kontoModel.StatusDato.Year != prevStatusDato.Year) || (kontoModel.StatusDato.Year == prevStatusDato.Year && kontoModel.StatusDato.Month != prevStatusDato.Month) || (kontoModel.Kredit != prevKredit) || (kontoModel.Saldo != prevSaldo); } if (!makeHistoric) { return; } kontoHistorikElement = new XElement(XName.Get("KontoHistorik", regnskabElement.Name.NamespaceName)); kontoHistorikElement.UpdateAttribute(XName.Get("kontonummer", string.Empty), kontoModel.Kontonummer); kontoHistorikElement.UpdateAttribute(XName.Get("dato", string.Empty), kontoHistorikDato); kontoHistorikElement.UpdateAttribute(XName.Get("kredit", string.Empty), kontoModel.Kredit.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); kontoHistorikElement.UpdateAttribute(XName.Get("saldo", string.Empty), kontoModel.Saldo.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(kontoHistorikElement); return; } kontoHistorikElement.UpdateAttribute(XName.Get("kredit", string.Empty), kontoModel.Kredit.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); kontoHistorikElement.UpdateAttribute(XName.Get("saldo", string.Empty), kontoModel.Saldo.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); }