#include "outputdialog.h" #include "check/check.h" #include "output/output_options.h" #include "ui_outputdialog.h" #include #include #include #include #include #include #include #include "settings/settings.h" #include "utils/utils.h" OutputDialog::OutputDialog(QWidget *parent, std::vector *checks) : QDialog(parent), ui(new Ui::OutputDialog), checks(checks), options(OutputOptions()) { Settings settings(get_path_relative_to_home(".local/share/checks_parser/settings.json")); ui->setupUi(this); columns = new std::vector; columns->push_back(OutputColumn(tr("Date"), ColumnType::date)); columns->push_back(OutputColumn(tr("Goods name"), ColumnType::goods_name)); columns->push_back(OutputColumn(tr("Goods price per unit"), ColumnType::goods_price_per_unit)); columns->push_back(OutputColumn(tr("Goods quantity"), ColumnType::goods_quantity)); columns->push_back(OutputColumn(tr("Goods net weight"), ColumnType::goods_net_weight)); columns->push_back(OutputColumn(tr("Goods total"), ColumnType::goods_total)); OutputColumnModel *model = new OutputColumnModel(&(*columns), this); ui->listView->setModel(model); // ui->tableWidget->item(0, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["date"]["name"])); // ui->tableWidget->item(0, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["date"]["position"])); // ui->tableWidget->item(1, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_name"]["name"])); // ui->tableWidget->item(1, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_name"]["position"])); // ui->tableWidget->item(2, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_price_per_unit"]["name"])); // ui->tableWidget->item(2, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_price_per_unit"]["position"])); // ui->tableWidget->item(3, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_quantity"]["name"])); // ui->tableWidget->item(3, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_quantity"]["position"])); // ui->tableWidget->item(4, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_net_weight"]["name"])); // ui->tableWidget->item(4, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_net_weight"]["position"])); // ui->tableWidget->item(5, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_total"]["name"])); // ui->tableWidget->item(5, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_total"]["position"])); ui->printHeaderCheckBox->setChecked(settings.get_all_settings()["print_header"]); ui->printTotalCheckBox->setChecked(settings.get_all_settings()["print_total"]); } OutputDialog::~OutputDialog() { delete ui; } void OutputDialog::on_buttonBox_accepted() { std::ofstream output_file(this->options.get_path()); print_header(&output_file); for (Check &check : *checks) { int row_number = 0; for (auto it = check.get_goods().begin(); it != check.get_goods().end(); it++, row_number++) { for (int i = 0; i < columns->size(); i ++) { OutputColumn &column = columns->at(i); std::cout << column.get_text().toStdString() << std::endl; switch (column.get_column_type()) { case ColumnType::date: if (row_number == 0) output_file << check.get_date(); break; case ColumnType::goods_name: output_file << it->get_name(); break; case ColumnType::goods_price_per_unit: output_file << std::fixed << std::setprecision(2) << it->get_price_per_unit(); break; case ColumnType::goods_quantity: output_file << std::fixed << std::setprecision(2) << it->get_quantity(); break; case ColumnType::goods_net_weight: output_file << it->get_net_weight(); break; case ColumnType::goods_total: output_file << std::fixed << std::setprecision(2) << it->calculate_total_price(); break; } if (i < columns->size() - 1) { output_file << ","; } else { output_file << "\n"; } } } if (this->options.get_print_total()) { output_file << "Total: " << std::fixed << std::setprecision(2) << check.calculae_total_price() << std::endl; } } output_file.close(); } // void update_settings(OutputOptions &options, ColumnType t, std::string name, // int value) { // Column column; // column.type = t; // column.name = name; // column.position = value; // if (value) { // options.add_or_update_column(column); // } else { // options.remove_column(t); // } // } void OutputDialog::on_chooseFileButton_clicked() { QString filename = QFileDialog::getSaveFileName(); this->options.set_path(filename.toStdString()); ui->pathLabel->setText("Path to export: " + filename); } void OutputDialog::on_printHeaderCheckBox_stateChanged(int value) { this->options.set_print_header(value); } void OutputDialog::on_printTotalCheckBox_stateChanged(int value) { this->options.set_print_total(value); } void OutputDialog::print_header(std::ofstream *output_file) { if (options.get_print_header()) { for (unsigned int i = 0; i < columns->size(); i ++) { OutputColumn column = columns->at(i); (*output_file) << column.get_text().toStdString() << (i == columns->size() - 1 ? "" : ","); } *output_file << std::endl; } }