/// <summary> /// Opdaterer ViewModel for budgetkontoen. /// </summary> /// <param name="budgetkontoViewModel">ViewModel for budgetkontoen, som skal opdateres.</param> /// <param name="budgetkontoModel">Model for budgetkontoen, som ViewModel for budgetkontoen skal opdateres med.</param> /// <param name="budgetkontogruppeViewModels">ViewModels for kontogrupper til budgetkonti..</param> private static void HandleResult(IBudgetkontoViewModel budgetkontoViewModel, IBudgetkontoModel budgetkontoModel, IEnumerable <IBudgetkontogruppeViewModel> budgetkontogruppeViewModels) { if (budgetkontoViewModel == null) { throw new ArgumentNullException("budgetkontoViewModel"); } if (budgetkontoModel == null) { throw new ArgumentNullException("budgetkontoModel"); } if (budgetkontogruppeViewModels == null) { throw new ArgumentNullException("budgetkontogruppeViewModels"); } var budgetkontogruppeViewModel = budgetkontogruppeViewModels.SingleOrDefault(m => m.Nummer == budgetkontoModel.Kontogruppe); if (budgetkontogruppeViewModel == null) { throw new IntranetGuiSystemException(Resource.GetExceptionMessage(ExceptionMessage.BudgetAccountGroupNotFound, budgetkontoModel.Kontogruppe)); } budgetkontoViewModel.Kontonavn = budgetkontoModel.Kontonavn; budgetkontoViewModel.Beskrivelse = budgetkontoModel.Beskrivelse; budgetkontoViewModel.Notat = budgetkontoModel.Notat; budgetkontoViewModel.Kontogruppe = budgetkontogruppeViewModel; budgetkontoViewModel.StatusDato = budgetkontoModel.StatusDato; budgetkontoViewModel.Indtægter = budgetkontoModel.Indtægter; budgetkontoViewModel.Udgifter = budgetkontoModel.Udgifter; budgetkontoViewModel.BudgetSidsteMåned = budgetkontoModel.BudgetSidsteMåned; budgetkontoViewModel.BudgetÅrTilDato = budgetkontoModel.BudgetÅrTilDato; budgetkontoViewModel.BudgetSidsteÅr = budgetkontoModel.BudgetSidsteÅr; budgetkontoViewModel.Bogført = budgetkontoModel.Bogført; budgetkontoViewModel.BogførtSidsteMåned = budgetkontoModel.BogførtSidsteMåned; budgetkontoViewModel.BogførtÅrTilDato = budgetkontoModel.BogførtÅrTilDato; budgetkontoViewModel.BogførtSidsteÅr = budgetkontoModel.BogførtSidsteÅr; }
/// <summary> /// Finder og returnerer elementer med historiske data for en given budgetkonto. /// </summary> /// <param name="localeDataDocument">XML dokument, hvorfra elementer skal returneres.</param> /// <param name="budgetkontoModel">Model for budgetkontoen, hvortil historiske data skal returneres.</param> /// <returns>Elementer indeholdende historiske data til den givne budgetkonto.</returns> public static IEnumerable <XElement> GetHistorikElements(this XDocument localeDataDocument, IBudgetkontoModel budgetkontoModel) { if (localeDataDocument == null) { throw new ArgumentNullException("localeDataDocument"); } if (budgetkontoModel == null) { throw new ArgumentNullException("budgetkontoModel"); } var regnskabElement = localeDataDocument.GetRegnskabElement(budgetkontoModel.Regnskabsnummer); if (regnskabElement == null) { return(new List <XElement>(0)); } var historikElements = regnskabElement.Elements(XName.Get("BudgetkontoHistorik", regnskabElement.Name.NamespaceName)).Where(m => m.Attribute(XName.Get("kontonummer", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("kontonummer", string.Empty)).Value, budgetkontoModel.Kontonummer, StringComparison.Ordinal) == 0 && m.Attribute(XName.Get("dato", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, GetHistorikDato(budgetkontoModel.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 budgetkonto i det lokale datalager. /// </summary> /// <param name="budgetkontoModel">Model for en budgetkonto.</param> /// <param name="localeDataDocument">XML dokument, hvori data skal gemmes.</param> public static void StoreInDocument(this IBudgetkontoModel budgetkontoModel, XDocument localeDataDocument) { if (budgetkontoModel == null) { throw new ArgumentNullException("budgetkontoModel"); } if (localeDataDocument == null) { throw new ArgumentNullException("localeDataDocument"); } var regnskabElement = localeDataDocument.GetRegnskabElement(budgetkontoModel.Regnskabsnummer); if (regnskabElement == null) { return; } var sidsteMånedStatusDato = new DateTime(budgetkontoModel.StatusDato.AddMonths(-1).Year, budgetkontoModel.StatusDato.AddMonths(-1).Month, DateTime.DaysInMonth(budgetkontoModel.StatusDato.AddMonths(-1).Year, budgetkontoModel.StatusDato.AddMonths(-1).Month)); var sidsteMånedIndtægter = Math.Abs(budgetkontoModel.BudgetSidsteMåned > 0 ? budgetkontoModel.BudgetSidsteMåned : 0M); var sidsteMånedUdgifter = Math.Abs(budgetkontoModel.BudgetSidsteMåned < 0 ? budgetkontoModel.BudgetSidsteMåned : 0M); XElement budgetkontoHistorikElement; var budgetkontoElement = regnskabElement.Elements(XName.Get("Budgetkonto", regnskabElement.Name.NamespaceName)).SingleOrDefault(m => m.Attribute(XName.Get("kontonummer", string.Empty)) != null && string.Compare(m.Attribute(XName.Get("kontonummer", string.Empty)).Value, budgetkontoModel.Kontonummer, StringComparison.Ordinal) == 0); if (budgetkontoElement == null) { budgetkontoElement = new XElement(XName.Get("Budgetkonto", regnskabElement.Name.NamespaceName)); budgetkontoElement.UpdateAttribute(XName.Get("kontonummer", string.Empty), budgetkontoModel.Kontonummer); budgetkontoElement.UpdateAttribute(XName.Get("kontonavn", string.Empty), budgetkontoModel.Kontonavn); budgetkontoElement.UpdateAttribute(XName.Get("kontogruppe", string.Empty), budgetkontoModel.Kontogruppe.ToString(CultureInfo.InvariantCulture)); budgetkontoElement.UpdateAttribute(XName.Get("beskrivelse", string.Empty), budgetkontoModel.Beskrivelse, false); budgetkontoElement.UpdateAttribute(XName.Get("note", string.Empty), budgetkontoModel.Notat, false); regnskabElement.Add(budgetkontoElement); budgetkontoHistorikElement = new XElement(XName.Get("BudgetkontoHistorik", regnskabElement.Name.NamespaceName)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("kontonummer", string.Empty), budgetkontoModel.Kontonummer); budgetkontoHistorikElement.UpdateAttribute(XName.Get("dato", string.Empty), GetHistorikDato(budgetkontoModel.StatusDato)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("indtaegter", string.Empty), budgetkontoModel.Indtægter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("udgifter", string.Empty), budgetkontoModel.Udgifter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("bogfoert", string.Empty), budgetkontoModel.Bogført.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(budgetkontoHistorikElement); budgetkontoHistorikElement = new XElement(XName.Get("BudgetkontoHistorik", regnskabElement.Name.NamespaceName)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("kontonummer", string.Empty), budgetkontoModel.Kontonummer); budgetkontoHistorikElement.UpdateAttribute(XName.Get("dato", string.Empty), GetHistorikDato(sidsteMånedStatusDato)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("indtaegter", string.Empty), sidsteMånedIndtægter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("udgifter", string.Empty), sidsteMånedUdgifter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("bogfoert", string.Empty), budgetkontoModel.BogførtSidsteMåned.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(budgetkontoHistorikElement); return; } budgetkontoElement.UpdateAttribute(XName.Get("kontonavn", string.Empty), budgetkontoModel.Kontonavn); budgetkontoElement.UpdateAttribute(XName.Get("kontogruppe", string.Empty), budgetkontoModel.Kontogruppe.ToString(CultureInfo.InvariantCulture)); budgetkontoElement.UpdateAttribute(XName.Get("beskrivelse", string.Empty), budgetkontoModel.Beskrivelse, false); budgetkontoElement.UpdateAttribute(XName.Get("note", string.Empty), budgetkontoModel.Notat, false); for (var iteration = 0; iteration < 2; iteration++) { string budgetkontoHistorikDato; switch (iteration) { case 0: budgetkontoHistorikDato = GetHistorikDato(budgetkontoModel.StatusDato); break; default: budgetkontoHistorikDato = GetHistorikDato(sidsteMånedStatusDato); break; } budgetkontoHistorikElement = localeDataDocument.GetHistorikElements(budgetkontoModel).FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, budgetkontoHistorikDato, StringComparison.Ordinal) == 0); if (budgetkontoHistorikElement == null) { var makeHistoric = true; budgetkontoHistorikElement = localeDataDocument.GetHistorikElements(budgetkontoModel).FirstOrDefault(m => string.Compare(m.Attribute(XName.Get("dato", string.Empty)).Value, budgetkontoHistorikDato, StringComparison.Ordinal) < 0); if (budgetkontoHistorikElement != null) { var prevStatusDato = DateTime.ParseExact(budgetkontoHistorikElement.Attribute(XName.Get("dato", string.Empty)).Value, "yyyyMMdd", CultureInfo.InvariantCulture); var prevIndtægter = decimal.Parse(budgetkontoHistorikElement.Attribute(XName.Get("indtaegter", string.Empty)).Value, NumberStyles.Any, CultureInfo.InvariantCulture); var prevUdgifter = decimal.Parse(budgetkontoHistorikElement.Attribute(XName.Get("udgifter", string.Empty)).Value, NumberStyles.Any, CultureInfo.InvariantCulture); var prevBogført = decimal.Parse(budgetkontoHistorikElement.Attribute(XName.Get("bogfoert", string.Empty)).Value, NumberStyles.Any, CultureInfo.InvariantCulture); switch (iteration) { case 0: makeHistoric = (budgetkontoModel.StatusDato.Year != prevStatusDato.Year) || (budgetkontoModel.StatusDato.Year == prevStatusDato.Year && budgetkontoModel.StatusDato.Month != prevStatusDato.Month) || (budgetkontoModel.Indtægter != prevIndtægter) || (budgetkontoModel.Udgifter != prevUdgifter) || (budgetkontoModel.Bogført != prevBogført); break; default: makeHistoric = (budgetkontoModel.StatusDato.Year != prevStatusDato.Year) || (budgetkontoModel.StatusDato.Year == prevStatusDato.Year && budgetkontoModel.StatusDato.Month != prevStatusDato.Month) || (sidsteMånedIndtægter != prevIndtægter) || (sidsteMånedUdgifter != prevUdgifter) || (budgetkontoModel.BogførtSidsteMåned != prevBogført); break; } } if (!makeHistoric) { continue; } budgetkontoHistorikElement = new XElement(XName.Get("BudgetkontoHistorik", regnskabElement.Name.NamespaceName)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("kontonummer", string.Empty), budgetkontoModel.Kontonummer); budgetkontoHistorikElement.UpdateAttribute(XName.Get("dato", string.Empty), budgetkontoHistorikDato); switch (iteration) { case 0: budgetkontoHistorikElement.UpdateAttribute(XName.Get("indtaegter", string.Empty), budgetkontoModel.Indtægter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("udgifter", string.Empty), budgetkontoModel.Udgifter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("bogfoert", string.Empty), budgetkontoModel.Bogført.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(budgetkontoHistorikElement); break; default: budgetkontoHistorikElement.UpdateAttribute(XName.Get("indtaegter", string.Empty), sidsteMånedIndtægter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("udgifter", string.Empty), sidsteMånedUdgifter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("bogfoert", string.Empty), budgetkontoModel.BogførtSidsteMåned.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); regnskabElement.Add(budgetkontoHistorikElement); break; } continue; } switch (iteration) { case 0: budgetkontoHistorikElement.UpdateAttribute(XName.Get("indtaegter", string.Empty), budgetkontoModel.Indtægter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("udgifter", string.Empty), budgetkontoModel.Udgifter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("bogfoert", string.Empty), budgetkontoModel.Bogført.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); break; default: budgetkontoHistorikElement.UpdateAttribute(XName.Get("indtaegter", string.Empty), sidsteMånedIndtægter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("udgifter", string.Empty), sidsteMånedUdgifter.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); budgetkontoHistorikElement.UpdateAttribute(XName.Get("bogfoert", string.Empty), budgetkontoModel.BogførtSidsteMåned.ToString(CurrencyFormat, CultureInfo.InvariantCulture)); break; } } }