/// <summary> /// Liste der Kassenabschlüsse aktualisieren /// </summary> private void refreshCashClosureDataGrid() { IEnumerable <CashClosure> cashClosures = CashClosure.GetCashClosures(); IEnumerable <CashClosureReport> cashClosureReports = CashClosureReport.GetCashClosureReports(); IEnumerable <CashClosureReceipt> cashClosureReceipts = CashClosureReceipt.GetCashClosureReceipts(); List <CashClosureManagerDataGridModel> cashClosureDataGridModels = new List <CashClosureManagerDataGridModel>(); foreach (var cashClosure in cashClosures) { if (cashClosure == null) { return; } try { CashClosureReport cashClosureReport = cashClosureReports.Where(c => c.CashClosure.CashClosureID == cashClosure.CashClosureID).FirstOrDefault(); CashClosureReceipt cashClosureReceipt = cashClosureReceipts.Where(c => c.CashClosure.CashClosureID == cashClosure.CashClosureID).FirstOrDefault(); if (cashClosureReport == null || cashClosureReceipt == null) { return; } cashClosureDataGridModels.Add(new CashClosureManagerDataGridModel(cashClosure, cashClosureReport, cashClosureReceipt)); } catch { } } CashClosureDataGrid.ItemsSource = cashClosureDataGridModels; CashClosureDataGrid.Items.Refresh(); }
/// <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> /// Kassenabschluss durchführen /// </summary> /// <param name="btn">sendender Button</param> private void submitCashClosure(Button btn) { MessageBoxResult result = MessageBoxEnhanced.Warning(IniParser.GetSetting("ACCOUNTING", "cashClosureWarning")); if (result == MessageBoxResult.No) { return; } string comment = tbComment.Text; int cashClosureID = -1; int cashClosureReportID = -1; int cashClosureReceiptID = -1; CashClosureHelper cashClosureHelper = new CashClosureHelper(); try { // Lege CashClosure, CashClosureReport und CashClosureReceipt an cashClosureID = CashClosure.Add(UserSession.userAccountID, DateTime.Now, this.revenuesTotal, this.expensesTotal, comment); cashClosureReportID = CashClosureReport.Add(cashClosureID, false, null, false, null, null, null); cashClosureReceiptID = CashClosureReceipt.Add(cashClosureID, false, null, null); // Setze für Kassenabschluss-Konten NewBalance als LatestBalance foreach (var accModel in this.accountModels) { double latestBalance = accModel.newBalanceDOUBLE; Account.Update(accModel.account.AccountID, accModel.account.Name, accModel.account.Number, accModel.account.ZeroPeriodEnum, accModel.account.IsOfficial, accModel.account.Description, latestBalance, accModel.account.IsCapital, accModel.account.IsFixed); } // Setze für alle anderen Konten den LatestBalance auf 0 bei Überschreitung des Nullzeitraums List <Account> noClosureAccounts = Account.GetAccounts().Where(a => !(a.IsOfficial && a.IsCapital)).ToList(); foreach (var account in noClosureAccounts) { double latestBalance; if (CashClosureHelper.exceededZeroPeriod(account.ZeroPeriodEnum)) { latestBalance = 0.0; } else { latestBalance = account.LatestBalance; } Account.Update(account.AccountID, account.Name, account.Number, account.ZeroPeriodEnum, account.IsOfficial, account.Description, latestBalance, account.IsCapital, account.IsFixed); } MainWindow mainWindow = Application.Current.MainWindow as MainWindow; Type pageType = typeof(pCashClosureManager); mainWindow.switchPage(IniParser.GetSetting("ACCOUNTING", "cashClosure"), pageType); } catch { try { if (cashClosureID != -1) { CashClosure.Delete(cashClosureID); } if (cashClosureReportID != -1) { CashClosureReport.Delete(cashClosureReportID); } if (cashClosureReceiptID != 1) { CashClosureReceipt.Delete(cashClosureReceiptID); } } catch { MessageBoxEnhanced.Error(IniParser.GetSetting("ERRORMSG", "newCashClosure")); } MessageBoxEnhanced.Error(IniParser.GetSetting("ERRORMSG", "newCashClosure")); } }
/// <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> /// Kassenabrechnung drucken /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void printCashClosureReceipt_Click(object sender, RoutedEventArgs e) { try { int closureID = (int)(((Button)sender).CommandParameter); if (!(closureID >= 0)) { throw new Exception(); } CashClosureReceipt closureReceipt = CashClosureReceipt.GetCashClosureReceipts().Where(c => c.CashClosure.CashClosureID == closureID).FirstOrDefault(); CashClosure cashClosure = CashClosure.GetCashClosures(closureID).FirstOrDefault(); DateTime date = cashClosure.ClosureDate; string dateTime = SafeStringParser.safeParseToStr(date, true); bool isReprint = closureReceipt.PrintDone; MessageBoxResult result; // Wenn bereits das Original gedruckt wurde, drucke automatisch den Nachdruck if (isReprint) { result = MessageBoxEnhanced.Question(IniParser.GetSetting("CASHCLOSURE", "questionReceiptCopyPrint").Replace("{0}", dateTime)); } else { result = MessageBoxEnhanced.Question(IniParser.GetSetting("CASHCLOSURE", "questionReceiptOriginalPrint").Replace("{0}", dateTime)); } // Wenn der Benutzer möchte, kann ausgedruckt werden if (result == MessageBoxResult.Yes) { PrintForms.printCashClosureReceipt(closureID, isReprint); } else { return; } // Wenn Nachdruck, dann ändere nichts an dem Datensatz if (isReprint) { return; } // Damit die Nachfrage nicht sofort aufploppt Thread.Sleep(1000); MessageBoxResult success = MessageBoxEnhanced.Question(IniParser.GetSetting("CASHCLOSURE", "questionPrintReceiptSuccess")); if (success == MessageBoxResult.Yes) { int receiptID = closureReceipt.CashClosureReceiptID; bool printDone = true; DateTime printDate = DateTime.Now; int printUserID = UserSession.userAccountID; CashClosureReceipt.Update(receiptID, closureID, printDone, printDate, printUserID); refreshCashClosureDataGrid(); } } catch { MessageBoxEnhanced.Error(IniParser.GetSetting("ERRORMSG", "printCashClosureReceipt")); } }