This commit is contained in:
2025-05-08 21:02:56 +03:00
parent 6706cbec45
commit 86a11faf70
24 changed files with 1022 additions and 460 deletions

View File

@@ -8,28 +8,30 @@
#include "settings/settings.h"
#include "utils/utils.h"
OutputDialog::OutputDialog(QWidget *parent, Check &check)
: QDialog(parent), ui(new Ui::OutputDialog), check(check),
OutputDialog::OutputDialog(QWidget *parent, std::vector<Check> *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);
ui->tableWidget->item(0, 1)->setText(QString::fromStdString(settings.get_all_settings()["output_order"]["goods_name"]["name"]));
ui->tableWidget->item(0, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_name"]["position"]));
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_price_per_unit"]["name"]));
ui->tableWidget->item(1, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_price_per_unit"]["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_quantity"]["name"]));
ui->tableWidget->item(2, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_quantity"]["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_net_weight"]["name"]));
ui->tableWidget->item(3, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_net_weight"]["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_total"]["name"]));
ui->tableWidget->item(4, 0)->setText(QString::number((int)settings.get_all_settings()["output_order"]["goods_total"]["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"]);
@@ -61,6 +63,7 @@ void OutputDialog::on_buttonBox_accepted() {
this->options.get_columns().end(), compare_position);
if (options.get_print_header()) {
// output_file << "date,"
for (auto &column : this->options.get_columns()) {
output_file << column.name
<< (column.position == this->options.get_columns().size()
@@ -69,39 +72,44 @@ void OutputDialog::on_buttonBox_accepted() {
}
output_file << std::endl;
}
for (Check &check : *checks) {
int i = 0;
// auto &goods : check.get_goods()
for (auto it = check.get_goods().begin(); it != check.get_goods().end(); i++, it++) {
for (auto &column : this->options.get_columns()) {
switch (column.type) {
case ColumnType::date:
if (i == 0) output_file << "date goes here";
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;
}
for (auto goods : this->check.get_goods()) {
for (auto &column : this->options.get_columns()) {
switch (column.type) {
case ColumnType::goods_name:
output_file << goods.get_name();
break;
case ColumnType::goods_price_per_unit:
output_file << std::fixed << std::setprecision(2) << goods.get_price_per_unit();
break;
case ColumnType::goods_quantity:
output_file << std::fixed << std::setprecision(2) << goods.get_quantity();
break;
case ColumnType::goods_net_weight:
output_file << goods.get_net_weight();
break;
case ColumnType::goods_total:
output_file << std::fixed << std::setprecision(2) << goods.calculate_total_price();
break;
}
if (column.position != this->options.get_columns().size()) {
output_file << ",";
} else {
output_file << "\n";
if (column.position != this->options.get_columns().size()) {
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;
if (this->options.get_print_total()) {
output_file << "Total: " << std::fixed << std::setprecision(2) << check.calculae_total_price() << std::endl;
}
}
output_file.close();
}