private void updateAmount()
        {
            dtgRevenue2.CommitEdit();
            double amount = 0;

            for (int rowIdx = 0; rowIdx < dtgRevenue2.Items.Count; rowIdx++)
            {
                var currentRow = dtgRevenue2.GetRow(rowIdx);
                if (currentRow == null)
                {
                    continue;
                }
                var actualRevenue = (RevenueModel)currentRow.Item;

                if (!actualRevenue.revAmount.Equals(""))
                {
                    try
                    {
                        amount += Convert.ToDouble(actualRevenue.revAmount.Replace(".", ","));
                    }
                    catch
                    { }
                    lblAmount.Content = SafeStringParser.safeParseToMoney(amount, true);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Druck des Kassenabschlussberichts
        /// </summary>
        /// <param name="cashClosureID">Kassenabschluss-ID</param>
        /// <param name="reprint">Nachdruck</param>
        public static void printCashClosureReport(int cashClosureID, bool reprint)
        {
            if (!LibreOffice.isLibreOfficeInstalled())
            {
                string warning = IniParser.GetSetting("ERRORMSG", "libre");
                MessageBoxEnhanced.Error(warning);
            }

            CashClosureReport report;

            try
            {
                var reports = CashClosureReport.GetCashClosureReports(null, cashClosureID);
                report = reports.FirstOrDefault();
            }
            catch
            {
                return;
            }

            string currentDir = System.IO.Directory.GetCurrentDirectory();
            string path       = IniParser.GetSetting("DOCUMENTS", "path").Replace("%PROGRAMPATH%", currentDir) + "\\" + IniParser.GetSetting("DOCUMENTS", "cashClosureReport");

            List <string> toReplace = new List <string>();
            List <string> replaceSt = new List <string>();

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Nachdruck&gt;</text:placeholder>");
            if (reprint)
            {
                replaceSt.Add(SafeStringParser.safeParseToStr(IniParser.GetSetting("DOCUMENTS", "reprint")));
            }
            else
            {
                replaceSt.Add("");
            }

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kassenabschlussdatum&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(report.CashClosure.ClosureDate));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kassenabschlussnummer&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(report.CashClosure.CashClosureID));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Einnahmen&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToMoney(report.CashClosure.Revenue, true));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Ausgaben&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToMoney(report.CashClosure.Expense, true));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Saldo&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToMoney(report.CashClosure.Sum, true));

            string tmpFilePath;
            bool   success = LibreOffice.replaceXMLstringInODT(path, toReplace, replaceSt, out tmpFilePath);

            if (success)
            {
                LibreOffice.openWithWriter(tmpFilePath, true, true);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Füllt die Felder aus
        /// Benötigt Kassenabschluss-Instanz und die zugehörigen Kassenabrechnung-Instanz und Kassenabschlussbeleg-Instanz
        /// </summary>
        /// <param name="cashClosure">Kassenabschluss-Instanz</param>
        /// <param name="cashClosureReport">Kassenabschlussbeleg-Instanz</param>
        /// <param name="cashClosureReceipt">Kassenabrechnung-Instanz</param>
        public CashClosureManagerDataGridModel(CashClosure cashClosure, CashClosureReport cashClosureReport, CashClosureReceipt cashClosureReceipt)
        {
            this.cashClosure        = cashClosure;
            this.cashClosureReport  = cashClosureReport;
            this.cashClosureReceipt = cashClosureReceipt;

            this.cashClosureID        = cashClosure.CashClosureID;
            this.closureDate          = SafeStringParser.safeParseToStr(cashClosure.ClosureDate, true);
            this.comment              = SafeStringParser.safeParseToStr(cashClosure.Comment);
            this.revenues             = SafeStringParser.safeParseToMoney(cashClosure.Revenue, true);
            this.expenses             = SafeStringParser.safeParseToMoney(cashClosure.Expense, true);
            this.sum                  = SafeStringParser.safeParseToMoney(cashClosure.Sum, true);
            this.reportPrinted        = cashClosureReport.PrintDone;
            this.reportPrintDate      = SafeStringParser.safeParseToStr(cashClosureReport.PrintDate, true);
            this.reportDone           = cashClosureReport.Done;
            this.reportDoneBoxEnabled = !(cashClosureReport.Done);
            this.reportDoneDate       = SafeStringParser.safeParseToStr(cashClosureReport.DoneDate, true);
            this.receiptPrinted       = cashClosureReceipt.PrintDone;
            this.receiptPrintedDate   = SafeStringParser.safeParseToStr(cashClosureReceipt.PrintDate, true);

            if (cashClosure.ClosureUserAccount != null)
            {
                this.closureUser = SafeStringParser.safeParseToStr(cashClosure.ClosureUserAccount.Username);
            }
            else
            {
                this.closureUser = "";
            }

            if (cashClosureReport.PrintUserAccount != null)
            {
                this.reportPrintUser = SafeStringParser.safeParseToStr(cashClosureReport.PrintUserAccount.Username);
            }
            else
            {
                this.reportPrintUser = "";
            }

            if (cashClosureReport.DoneUserAccount != null)
            {
                this.reportDoneUser = SafeStringParser.safeParseToStr(cashClosureReport.DoneUserAccount.Username);
            }
            else
            {
                this.reportDoneUser = "";
            }

            if (cashClosureReceipt.PrintUserAccount != null)
            {
                this.receiptPrintedUser = SafeStringParser.safeParseToStr(cashClosureReceipt.PrintUserAccount.Username);
            }
            else
            {
                this.receiptPrintedUser = "";
            }
        }
 /// <summary>
 /// Füllt die Felder
 /// </summary>
 /// <param name="account">Konto-Referenz</param>
 /// <param name="oldBalance">bisheriger Kontostand</param>
 /// <param name="revenues">Einnahmen</param>
 /// <param name="expenses">Ausgaben</param>
 /// <param name="newBalance">Neuer Kontostand</param>
 public CashClosureAccountsDataGridModel(Account account, double oldBalance, double revenues, double expenses, double newBalance)
 {
     this.account          = account;
     this.name             = SafeStringParser.safeParseToStr(account.Name);
     this.number           = SafeStringParser.safeParseToStr(account.Number);
     this.description      = SafeStringParser.safeParseToStr(account.Description);
     this.zeroPeriod       = zeroPeriodToString(account.ZeroPeriodEnum);
     this.oldBalance       = SafeStringParser.safeParseToMoney(oldBalance, true);
     this.revenues         = SafeStringParser.safeParseToMoney(revenues, true);
     this.expenses         = SafeStringParser.safeParseToMoney(expenses, true);
     this.newBalance       = SafeStringParser.safeParseToMoney(newBalance, true);
     this.newBalanceDOUBLE = newBalance;
 }
        /// <summary>
        /// Setzt in der GUI die Ausgaben dieses und des letzten Jahres.
        /// </summary>
        private void SetExpenses()
        {
            CashClosureHelper helper = new CashClosureHelper(false);
            int currentYear          = DateTime.Now.Year;

            //Expenses of this year
            DateTime from = BookingsHelper.makeDateSmall(new DateTime(currentYear, 1, 1));
            DateTime to   = BookingsHelper.makeDateGreat(DateTime.Today);

            expensesThisYear = helper.getAllExpensesForPeriod(from, to);

            //Expenses of last year
            from             = BookingsHelper.makeDateSmall(new DateTime(currentYear - 1, 1, 1));
            to               = BookingsHelper.makeDateGreat(new DateTime(currentYear - 1, 12, 31));
            expensesLastYear = helper.getAllExpensesForPeriod(from, to);

            lExpensesThisYear.Content = SafeStringParser.safeParseToMoney(expensesThisYear, true);
            lExpensesLastYear.Content = SafeStringParser.safeParseToMoney(expensesLastYear, true);
        }
        /// <summary>
        /// DataGrid aktualisieren
        /// </summary>
        private void refreshDataGrid()
        {
            CashClosureHelper cashClosureHelper = new CashClosureHelper();
            List <Account>    closureAccounts   = cashClosureHelper.closureAccounts;

            this.accountModels.Clear();

            double sumRevenues    = 0;
            double sumExpenses    = 0;
            double sumNewBalances = 0;

            // Berechne für jedes Kassenschluss-Konto die Summen
            foreach (var account in closureAccounts)
            {
                double oldBalance = cashClosureHelper.getOldBalanceForAccount(account.AccountID);
                double revenues   = cashClosureHelper.getRevenuesForAccount(account.AccountID);
                double expenses   = cashClosureHelper.getExpensesForAccount(account.AccountID);
                double newBalance = oldBalance + revenues - expenses;

                CashClosureAccountsDataGridModel model = new CashClosureAccountsDataGridModel(account, oldBalance, revenues, expenses, newBalance);
                accountModels.Add(model);

                sumRevenues    += revenues;
                sumExpenses    += expenses;
                sumNewBalances += newBalance;
            }
            AccountsDataGrid.ItemsSource = accountModels;
            AccountsDataGrid.Items.Refresh();

            // Zeige Gesamt-Summen an
            lbRevenues.Content = SafeStringParser.safeParseToMoney(sumRevenues, true);
            lbExpenses.Content = SafeStringParser.safeParseToMoney(sumExpenses, true);
            lbSum.Content      = SafeStringParser.safeParseToMoney(sumNewBalances, true);

            this.expensesTotal = sumExpenses;
            this.revenuesTotal = sumRevenues;
        }
Beispiel #7
0
        /// <summary>
        /// Summen berechnen
        /// </summary>
        /// <param name="bookingModels"></param>
        private void calculateAndShowSums(List <BookingDataGridModel> bookingModels)
        {
            double revenues, sum, expenses;

            // Wenn "alle Eigenkapitalkonten" ausgewählt, dann summiere alle Eigenkapitalkonten
            if (this.currentAccountNumber == -1)
            {
                // Einnahmen: Buchungen mit Eigenkapital-Konto als Zielkonto
                revenues = bookingModels.Where(b => b.targetAccountIsCapital).Sum(b => b.amountDOUBLE);

                // Ausgaben: Buchungen mit Eigenkapital-Konto als QuellKonto
                expenses = bookingModels.Where(b => b.sourceAccountIsCapital).Sum(b => b.amountDOUBLE);

                sum = revenues - expenses;
            }
            // Ansonsten summiere für das ausgewählte Konto
            else
            {
                // Einnahmen: Buchungen mit Filter-Konto als Zielkonto
                revenues = bookingModels.Where(b => b.targetAccountNumberINT == this.currentAccountNumber).Sum(b => b.amountDOUBLE);

                // Ausgaben: Buchungen mit Filter-Konto als QuellKonto
                expenses = bookingModels.Where(b => b.sourceAccountNumberINT == this.currentAccountNumber).Sum(b => b.amountDOUBLE);

                sum = revenues - expenses;
            }

            // Zeige Beträge an
            lbExpenses.Content = SafeStringParser.safeParseToMoney(expenses, true);
            lbRevenues.Content = SafeStringParser.safeParseToMoney(revenues, true);
            lbSum.Content      = SafeStringParser.safeParseToMoney(sum, true);

            Account currentAccount = Account.GetAccounts(null, null, this.currentAccountNumber).FirstOrDefault();

            lbLatestBalance.Content = SafeStringParser.safeParseToMoney(currentAccount.LatestBalance, true);
        }
Beispiel #8
0
        /// <summary>
        /// Lege neues Modell an
        /// </summary>
        /// <param name="booking">zugehörige Buchung</param>
        /// <param name="lastCashClosure">Datum letzter Kassenabschluss</param>
        public BookingDataGridModel(Booking booking, DateTime lastCashClosure)
        {
            this.booking                 = booking;
            this.bookingID               = booking.BookingID;
            this.amount                  = SafeStringParser.safeParseToMoney(booking.Amount, true);
            this.amountDOUBLE            = booking.Amount;
            this.date                    = booking.Date;
            this.dateString              = SafeStringParser.safeParseToStr(booking.Date, true);
            this.description             = SafeStringParser.safeParseToStr(booking.Description);
            this.sourceAccountString     = SafeStringParser.safeParseToStr(booking.SourceAccount.Name) + " (" + SafeStringParser.safeParseToStr(booking.SourceAccount.Number) + ")";
            this.targetAccountString     = SafeStringParser.safeParseToStr(booking.TargetAccount.Name) + " (" + SafeStringParser.safeParseToStr(booking.TargetAccount.Number) + ")";
            this.sourceAccountNumber     = SafeStringParser.safeParseToStr(booking.SourceAccount.Number);
            this.targetAccountNumber     = SafeStringParser.safeParseToStr(booking.TargetAccount.Number);
            this.sourceAccountNumberINT  = booking.SourceAccount.Number;
            this.targetAccountNumberINT  = booking.TargetAccount.Number; this.sourceAccountName = SafeStringParser.safeParseToStr(booking.SourceAccount.Name);
            this.targetAccountName       = SafeStringParser.safeParseToStr(booking.TargetAccount.Name);
            this.sourceAccountIsOfficial = booking.SourceAccount.IsOfficial;
            this.targetAccountIsOfficial = booking.TargetAccount.IsOfficial;
            this.sourceAccountIsCapital  = booking.SourceAccount.IsCapital;
            this.targetAccountIsCapital  = booking.TargetAccount.IsCapital;

            if (booking.UserAccount != null)
            {
                this.user = SafeStringParser.safeParseToStr(booking.UserAccount.Username);
            }
            else
            {
                this.user = "";
            }

            if (booking.Person != null)
            {
                this.customer = SafeStringParser.safeParseToStr(booking.Person.TableNo);
            }
            else
            {
                this.customer = "";
            }

            // Korrekturbuchung-Button wird nur angezeigt wenn Datum vor dem letzten Kassenschluss
            if (booking.Date <= lastCashClosure)
            {
                this.visibilityCorrection = Visibility.Visible;
            }
            else
            {
                this.visibilityCorrection = Visibility.Hidden;
            }

            // Löschen/Edit-Button wird nur angezeigt wenn Datum nach dem letzten Kassenschluss
            if (booking.Date > lastCashClosure)
            {
                this.visibilityDelete = Visibility.Visible;
                this.visibilityEdit   = Visibility.Visible;
            }
            else
            {
                this.visibilityDelete = Visibility.Hidden;
                this.visibilityEdit   = Visibility.Hidden;
            }

            // Korrekturbuchungen sind nicht editierbar/korrigierbar
            if (booking.IsCorrection)
            {
                this.visibilityEdit       = Visibility.Hidden;
                this.visibilityCorrection = Visibility.Hidden;
            }
        }
 /// <summary>
 /// Setzt in der GUI den Gewinn dieses und des letzten Jahres.
 /// </summary>
 private void SetProfit()
 {
     lProfitThisYear.Content = SafeStringParser.safeParseToMoney((revenuesThisYear - expensesThisYear), true);
     lProfitLastYear.Content = SafeStringParser.safeParseToMoney((revenuesLastYear - expensesLastYear), true);
 }
        public void fillRevenuesDataGrid(IEnumerable <Revenue> revenues)
        {
            //Bisheriger Gesamtbetrag
            double amount = 0;

            IEnumerable <DB.RevenueType> revTypes = DB.RevenueType.GetRevenueTypes();

            // Combobox mit den RevenueTypes befüllen!
            var types   = revTypes.ToList();
            var cbItems = types.ToList().Select(n => new CBItem
            {
                Name = n.Name
            });

            List <CBItem> tmpRevTypes = new List <CBItem>();

            tmpRevTypes.Add(null);

            foreach (CBItem cI in cbItems)
            {
                tmpRevTypes.Add(cI);
            }

            DateTime defaultDate = DateTime.Today;

            //DB.RevenueDetail revDetail = new RevenueDetail();
            //revDetail.Amount = 0;
            //revDetail.EndDate = defaultDate;
            //revDetail.StartDate = defaultDate;

            //vorhandene Revenues eintragen


            foreach (Revenue rev in revenues)
            {
                //Combobox individuell füllen Selektiertes zuerst.

                List <CBItem> existingRevType = new List <CBItem>();

                foreach (CBItem cI in cbItems)
                {
                    if (cI.Name == rev.RevenueType.Name)
                    {
                        existingRevType.Add(cI);
                    }
                }

                foreach (CBItem cI in cbItems)
                {
                    if (cI.Name != rev.RevenueType.Name)
                    {
                        existingRevType.Add(cI);
                    }
                }


                RevenueModel existingRev = new RevenueModel();
                existingRev.revType        = existingRevType;
                existingRev.revDescription = rev.Description;
                existingRev.revAmount      = rev.Amount.ToString();
                amount += rev.Amount;
                existingRev.isAdded      = true;
                existingRev.revStartDate = rev.StartDate;
                existingRev.revEndDate   = (DateTime)rev.EndDate;
                existingRev.revenueID    = rev.RevenueID;


                this._Revenues.Add(existingRev);
            }


            //eine Neue Zeile hinzufügen
            RevenueModel newRev = new RevenueModel();

            newRev.revType        = tmpRevTypes;
            newRev.revDescription = "";
            newRev.revStartDate   = defaultDate;
            newRev.revEndDate     = defaultDate;
            newRev.revenueID      = 0;
            newRev.revAmount      = "0";
            newRev.isAdded        = false;

            this._Revenues.Add(newRev);
            dtgRevenue2.Items.Refresh();
            dtgRevenue2.ItemsSource = this._Revenues;
            dtgRevenue2.Items.Refresh();

            //Gesamtbetrag vorbelegen
            lblAmount.Content = SafeStringParser.safeParseToMoney(amount, true);
        }
Beispiel #11
0
        /// <summary>
        /// Druck der Kassenabrechnung
        /// </summary>
        /// <param name="cashClosureID">Kassenabschluss-ID</param>
        /// <param name="reprint">Nachdruck</param>
        public static void printCashClosureReceipt(int cashClosureID, bool reprint)
        {
            if (!LibreOffice.isLibreOfficeInstalled())
            {
                string warning = IniParser.GetSetting("ERRORMSG", "libre");
                MessageBoxEnhanced.Error(warning);
            }

            CashClosureReceipt receipt;

            try
            {
                IEnumerable <CashClosureReceipt> receipts = CashClosureReceipt.GetCashClosureReceipts(null, cashClosureID);
                receipt = receipts.FirstOrDefault();
            }
            catch
            {
                return;
            }

            string currentDir = System.IO.Directory.GetCurrentDirectory();
            string path       = IniParser.GetSetting("DOCUMENTS", "path").Replace("%PROGRAMPATH%", currentDir) + "\\" + IniParser.GetSetting("DOCUMENTS", "cashClosureReceipt");

            List <string> toReplace = new List <string>();
            List <string> replaceSt = new List <string>();

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kassenabschlussdatum&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(receipt.CashClosure.ClosureDate));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Einnahmen&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToMoney(receipt.CashClosure.Revenue, true));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Ausgaben&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToMoney(receipt.CashClosure.Expense, true));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Saldo&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToMoney(receipt.CashClosure.Sum, true));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;abgerechnet_durch&gt;</text:placeholder>");
            try
            {
                // Hole CashClosure Objekt direkt aus der DB, da die Referenz von CashClosureReceipt auf CashClosure manchmal nicht gültig ist(?)
                CashClosure cashClosure = CashClosure.GetCashClosures(cashClosureID).FirstOrDefault();
                string      username    = cashClosure.ClosureUserAccount.Username;
                replaceSt.Add(SafeStringParser.safeParseToStr(username));
            }
            catch
            {
                replaceSt.Add("-");
            }

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Nachdruck&gt;</text:placeholder>");
            if (reprint)
            {
                replaceSt.Add(SafeStringParser.safeParseToStr(IniParser.GetSetting("DOCUMENTS", "reprint")));
            }
            else
            {
                replaceSt.Add("");
            }


            string tmpFilePath;
            bool   success = LibreOffice.replaceXMLstringInODT(path, toReplace, replaceSt, out tmpFilePath);

            if (success)
            {
                LibreOffice.openWithWriter(tmpFilePath, true, true);
            }
        }
Beispiel #12
0
        /// <summary>
        /// Druck des Aufnahmeformulars
        /// </summary>
        /// <param name="personID">ID der Person</param>
        public static void printClientEnrolmentForm(int personID)
        {
            if (!LibreOffice.isLibreOfficeInstalled())
            {
                string warning = IniParser.GetSetting("ERRORMSG", "libre");
                MessageBoxEnhanced.Error(warning);
            }

            Person person;

            try
            {
                var persons = Person.GetPersons(personID).ToList();
                person = persons.FirstOrDefault();
            }
            catch
            {
                return;
            }

            string currentDir = System.IO.Directory.GetCurrentDirectory();
            string path       = IniParser.GetSetting("DOCUMENTS", "path").Replace("%PROGRAMPATH%", currentDir) + "\\" + IniParser.GetSetting("DOCUMENTS", "enrolmentForm");

            List <string> toReplace    = new List <string>();
            List <string> replaceSt    = new List <string>();
            int           rowsChildren = 6;
            int           rowsRevenues = 8;

            if (person == null)
            {
                return;
            }

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Vorname&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.FirstName));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Nachname&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.LastName));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Strasse&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.Street));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;PLZ&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.ZipCode));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Ort&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.City));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Geburtstag&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.DateOfBirth));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Staatsangehoerigkeit&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.Nationality));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Geburtsland&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.CountryOfBirth));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Familienstand&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.FamilyState.Name));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Vorname_Partner&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalFirstName));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Nachname_Partner&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalLastName));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Geburtstag_Partner&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalBirthday));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Staatsangehoerigkeit_Partner&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalNationality));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Datum&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(DateTime.Now));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Gueltigkeitsende&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.ValidityEnd));
            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;KNR&gt;</text:placeholder>");
            replaceSt.Add(SafeStringParser.safeParseToStr(person.TableNo));

            toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Erfasser&gt;</text:placeholder>");
            if (person.UserAccount != null)
            {
                replaceSt.Add(SafeStringParser.safeParseToStr(person.UserAccount.Username));
            }
            else
            {
                replaceSt.Add("");
            }

            // fülle Kinder
            IEnumerable <Child> children = Child.GetChildren(null, person.PersonID);
            int childIndex = 1;

            foreach (var child in children)
            {
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Index_" + childIndex + "&gt;</text:placeholder>");
                replaceSt.Add("#" + childIndex);
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Vorname_" + childIndex + "&gt;</text:placeholder>");
                replaceSt.Add(SafeStringParser.safeParseToStr(child.FirstName));
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Nachname_" + childIndex + "&gt;</text:placeholder>");
                replaceSt.Add(SafeStringParser.safeParseToStr(child.LastName));
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Geburtstag_" + childIndex + "&gt;</text:placeholder>");
                replaceSt.Add(SafeStringParser.safeParseToStr(child.DateOfBirth));
                childIndex++;
            }
            // Sorge dafür, dass die übrigen Zeilen beim Druck leer sind
            for (int i = childIndex; i <= rowsChildren; i++)
            {
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Index_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Vorname_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Nachname_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Kind_Geburtstag_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
            }

            // fülle Einkünfte
            IEnumerable <Revenue> revenues = Revenue.GetRevenues(null, person.PersonID);
            int revenueIndex = 1;

            foreach (var revenue in revenues)
            {
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Einkunft_" + revenueIndex + "&gt;</text:placeholder>");
                replaceSt.Add(revenue.RevenueType.Name + ": " + revenue.Description);
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Bescheid_" + revenueIndex + "&gt;</text:placeholder>");
                replaceSt.Add(SafeStringParser.safeParseToStr(revenue.StartDate));
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Bewilligt_" + revenueIndex + "&gt;</text:placeholder>");
                replaceSt.Add(SafeStringParser.safeParseToStr(revenue.EndDate));
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Hoehe_" + revenueIndex + "&gt;</text:placeholder>");
                replaceSt.Add(SafeStringParser.safeParseToMoney(revenue.Amount, true));
                revenueIndex++;
            }
            // Sorge dafür, dass die übrigen Zeilen beim Druck leer sind
            for (int i = revenueIndex; i <= rowsRevenues; i++)
            {
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Einkunft_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Bescheid_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Bewilligt_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
                toReplace.Add("<text:placeholder text:placeholder-type=\"text\">&lt;Hoehe_" + i + "&gt;</text:placeholder>");
                replaceSt.Add("");
            }

            string tmpFilePath;
            bool   success = LibreOffice.replaceXMLstringInODT(path, toReplace, replaceSt, out tmpFilePath);

            if (success)
            {
                LibreOffice.openWithWriter(tmpFilePath, true, true);
            }
        }