full rework of the output order
This commit is contained in:
162
outputdialog.cpp
162
outputdialog.cpp
@@ -3,8 +3,12 @@
|
||||
#include "output/output_options.h"
|
||||
#include "ui_outputdialog.h"
|
||||
#include <QFileDialog>
|
||||
#include <QLineEdit>
|
||||
#include <QMainWindow>
|
||||
#include <QStandardItemModel>
|
||||
#include <fstream>
|
||||
#include <outputcolumn.h>
|
||||
#include <outputcolumnmodel.h>
|
||||
#include "settings/settings.h"
|
||||
#include "utils/utils.h"
|
||||
|
||||
@@ -15,29 +19,36 @@ OutputDialog::OutputDialog(QWidget *parent, std::vector<Check> *checks)
|
||||
|
||||
ui->setupUi(this);
|
||||
|
||||
ui->tableWidget->resizeColumnsToContents();
|
||||
ui->tableWidget->verticalHeader()->setSectionsMovable(true);
|
||||
ui->tableWidget->verticalHeader()->setDragDropOverwriteMode(false);
|
||||
ui->tableWidget->verticalHeader()->setDragEnabled(true);
|
||||
ui->tableWidget->verticalHeader()->setDragDropMode(QAbstractItemView::InternalMove);
|
||||
columns = new std::vector<OutputColumn>;
|
||||
|
||||
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"]));
|
||||
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));
|
||||
|
||||
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"]));
|
||||
OutputColumnModel *model = new OutputColumnModel(&(*columns), this);
|
||||
|
||||
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->listView->setModel(model);
|
||||
|
||||
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(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(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(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(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->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"]);
|
||||
@@ -46,65 +57,39 @@ OutputDialog::OutputDialog(QWidget *parent, std::vector<Check> *checks)
|
||||
|
||||
OutputDialog::~OutputDialog() { delete ui; }
|
||||
|
||||
bool compare_position(Column &c1, Column &c2) {
|
||||
return c1.position < c2.position;
|
||||
}
|
||||
|
||||
void OutputDialog::on_buttonBox_accepted() {
|
||||
std::ofstream output_file(this->options.get_path());
|
||||
|
||||
for (int i = 0; i < ui->tableWidget->rowCount(); i++) {
|
||||
int position = ui->tableWidget->item(i, 0)->text().toInt();
|
||||
std::string name = ui->tableWidget->item(i, 1)->text().toStdString();
|
||||
print_header(&output_file);
|
||||
|
||||
Column c;
|
||||
c.type = static_cast<ColumnType>(i);
|
||||
c.position = position;
|
||||
c.name = name;
|
||||
|
||||
this->options.add_or_update_column(c);
|
||||
}
|
||||
|
||||
std::sort(this->options.get_columns().begin(),
|
||||
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()
|
||||
? ""
|
||||
: ",");
|
||||
}
|
||||
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 << 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;
|
||||
}
|
||||
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 (column.position != this->options.get_columns().size()) {
|
||||
if (i < columns->size() - 1) {
|
||||
output_file << ",";
|
||||
} else {
|
||||
output_file << "\n";
|
||||
@@ -119,19 +104,19 @@ void OutputDialog::on_buttonBox_accepted() {
|
||||
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;
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
// if (value) {
|
||||
// options.add_or_update_column(column);
|
||||
// } else {
|
||||
// options.remove_column(t);
|
||||
// }
|
||||
// }
|
||||
|
||||
void OutputDialog::on_chooseFileButton_clicked() {
|
||||
QString filename = QFileDialog::getSaveFileName();
|
||||
@@ -146,3 +131,16 @@ void OutputDialog::on_printHeaderCheckBox_stateChanged(int 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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user