From 00f870b0c3a269074d23cd00827fb8148c92f604 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Thu, 16 Aug 2018 12:40:19 +0200 Subject: [PATCH] save csv with correct umlauts even on windows --- src/core/marketplace.cpp | 6 ++++-- src/core/marketplace.h | 4 +++- src/gui/mainwindow.cpp | 3 ++- src/gui/reportdialog.cpp | 24 ++++++++++++++---------- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/core/marketplace.cpp b/src/core/marketplace.cpp index e88b3a2..c58dd96 100644 --- a/src/core/marketplace.cpp +++ b/src/core/marketplace.cpp @@ -8,6 +8,8 @@ #include #include +namespace fs = std::filesystem; + Marketplace::Marketplace() { auto seller = std::make_unique("Max", "Mustermann"); @@ -168,10 +170,10 @@ void Marketplace::setSalesToDelete(int cashPointNo) }); } -void Marketplace::exportReportToCSV(const std::string& filename, int feeInPercent, int maxFeeInEuro) +void Marketplace::exportReportToCSV(const fs::path& filePath, int feeInPercent, int maxFeeInEuro) { const char delimiter = ','; - std::ofstream file(filename); + std::ofstream file(filePath); file << "Verk.Nr." << delimiter << "Nachname" << delimiter << "Vorname" << delimiter << "Anz. gemeldet" << delimiter << "Anz. verkauft" << delimiter << "Umsatz" << delimiter diff --git a/src/core/marketplace.h b/src/core/marketplace.h index 5671cf2..758f758 100644 --- a/src/core/marketplace.h +++ b/src/core/marketplace.h @@ -5,6 +5,7 @@ #include "sale.h" #include "seller.h" +#include #include class ExcelReader; @@ -52,7 +53,8 @@ class Marketplace void clear(); - void exportReportToCSV(const std::string& filename, int feeInPercent, int maxFeeInEuro); + void exportReportToCSV(const std::filesystem::path& filePath, int feeInPercent, + int maxFeeInEuro); friend class ExcelReader; diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 356918c..46bc41c 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -360,7 +360,8 @@ void MainWindow::onPrintSaleReceiptButtonClicked([[maybe_unused]] bool checked) auto indexes = selModel->selectedRows(); auto& sale = marketplace_->getSales().at(indexes[0].row()); - auto printerDevice = convertToPosPrinterDevice(posPrinterDevice.toStdString(), posPrinterEndpoint.toStdString()); + auto printerDevice = + convertToPosPrinterDevice(posPrinterDevice.toStdString(), posPrinterEndpoint.toStdString()); std::unique_ptr printer; diff --git a/src/gui/reportdialog.cpp b/src/gui/reportdialog.cpp index 297f08f..53fc9b1 100644 --- a/src/gui/reportdialog.cpp +++ b/src/gui/reportdialog.cpp @@ -5,6 +5,8 @@ #include #include +#include + #include #include #include @@ -12,6 +14,8 @@ #include #include +namespace fs = std::filesystem; + ReportDialog::ReportDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f) { ui_.setupUi(this); @@ -37,14 +41,15 @@ void ReportDialog::onExportCsvButtonClicked() int feeInPercent = settings.value("global/feeInPercent").toInt(); int maxFeeInEuro = settings.value("global/maxFeeInEuro").toInt(); - QFileDialog fileDialog(this); - fileDialog.setFileMode(QFileDialog::AnyFile); - fileDialog.setNameFilter("CSV Files (*.csv)"); - fileDialog.setAcceptMode(QFileDialog::AcceptSave); - if (fileDialog.exec()) { - market_->exportReportToCSV(fileDialog.selectedFiles().at(0).toStdString(), feeInPercent, - maxFeeInEuro); - } + auto filename = QFileDialog::getSaveFileName(this, "Verkäufer exportieren", QString(), + "CSV Dateien (*.csv)"); + + if (filename.isEmpty()) + return; + + fs::path filePath(filename.toStdWString()); + + market_->exportReportToCSV(filePath, feeInPercent, maxFeeInEuro); } void ReportDialog::onPrintReportButtonClicked() @@ -159,8 +164,7 @@ void ReportDialog::onPrintReportButtonClicked() content += QString("Verkaufte Artikel: %1 (%L2 %)\n\n") .arg(numArticlesSold, 6) .arg(percentArticlesSold, 0, 'f', 2); - content += - QString("Gesamtumsatz: %1\n").arg(market_->getOverallSumAsString().c_str(), 10); + content += QString("Gesamtumsatz: %1\n").arg(market_->getOverallSumAsString().c_str(), 10); content += QString("Ausgezahlt: %1\n") .arg(market_->getOverallPaymentAsString(feeInPercent, maxFeeInEuro * 100).c_str(), 10);