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); } } }
/// <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\"><Nachdruck></text:placeholder>"); if (reprint) { replaceSt.Add(SafeStringParser.safeParseToStr(IniParser.GetSetting("DOCUMENTS", "reprint"))); } else { replaceSt.Add(""); } toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kassenabschlussdatum></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(report.CashClosure.ClosureDate)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kassenabschlussnummer></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(report.CashClosure.CashClosureID)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Einnahmen></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToMoney(report.CashClosure.Revenue, true)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Ausgaben></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToMoney(report.CashClosure.Expense, true)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Saldo></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); } }
/// <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; }
/// <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); }
/// <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); }
/// <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\"><Kassenabschlussdatum></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(receipt.CashClosure.ClosureDate)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Einnahmen></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToMoney(receipt.CashClosure.Revenue, true)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Ausgaben></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToMoney(receipt.CashClosure.Expense, true)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Saldo></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToMoney(receipt.CashClosure.Sum, true)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><abgerechnet_durch></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\"><Nachdruck></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); } }
/// <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\"><Vorname></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.FirstName)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Nachname></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.LastName)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Strasse></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.Street)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><PLZ></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.ZipCode)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Ort></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.City)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Geburtstag></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.DateOfBirth)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Staatsangehoerigkeit></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.Nationality)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Geburtsland></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.CountryOfBirth)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Familienstand></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.FamilyState.Name)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Vorname_Partner></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalFirstName)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Nachname_Partner></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalLastName)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Geburtstag_Partner></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalBirthday)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Staatsangehoerigkeit_Partner></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.MaritalNationality)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Datum></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(DateTime.Now)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Gueltigkeitsende></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.ValidityEnd)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><KNR></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(person.TableNo)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Erfasser></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\"><Kind_Index_" + childIndex + "></text:placeholder>"); replaceSt.Add("#" + childIndex); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kind_Vorname_" + childIndex + "></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(child.FirstName)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kind_Nachname_" + childIndex + "></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(child.LastName)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kind_Geburtstag_" + childIndex + "></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\"><Kind_Index_" + i + "></text:placeholder>"); replaceSt.Add(""); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kind_Vorname_" + i + "></text:placeholder>"); replaceSt.Add(""); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kind_Nachname_" + i + "></text:placeholder>"); replaceSt.Add(""); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Kind_Geburtstag_" + i + "></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\"><Einkunft_" + revenueIndex + "></text:placeholder>"); replaceSt.Add(revenue.RevenueType.Name + ": " + revenue.Description); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Bescheid_" + revenueIndex + "></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(revenue.StartDate)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Bewilligt_" + revenueIndex + "></text:placeholder>"); replaceSt.Add(SafeStringParser.safeParseToStr(revenue.EndDate)); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Hoehe_" + revenueIndex + "></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\"><Einkunft_" + i + "></text:placeholder>"); replaceSt.Add(""); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Bescheid_" + i + "></text:placeholder>"); replaceSt.Add(""); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Bewilligt_" + i + "></text:placeholder>"); replaceSt.Add(""); toReplace.Add("<text:placeholder text:placeholder-type=\"text\"><Hoehe_" + i + "></text:placeholder>"); replaceSt.Add(""); } string tmpFilePath; bool success = LibreOffice.replaceXMLstringInODT(path, toReplace, replaceSt, out tmpFilePath); if (success) { LibreOffice.openWithWriter(tmpFilePath, true, true); } }