settings and bugfixes

This commit is contained in:
leca 2025-03-23 20:55:34 +03:00
parent e58d6068e0
commit d17695a7fa
14 changed files with 487 additions and 395 deletions

View File

@ -82,6 +82,7 @@ set(TRANSLATION_SOURCES
main.cpp main.cpp
mainwindow.cpp mainwindow.h scenes/mainwindow.ui mainwindow.cpp mainwindow.h scenes/mainwindow.ui
outputdialog.h outputdialog.cpp scenes/outputdialog.ui outputdialog.h outputdialog.cpp scenes/outputdialog.ui
settingsdialog.h settingsdialog.cpp scenes/settingsdialog.ui
) )
if (BUILD_EMAIL_TO_TEXT_MODE) if (BUILD_EMAIL_TO_TEXT_MODE)

View File

@ -1,4 +1,4 @@
from checks_parser_base_ubuntu FROM checks_parser_base_ubuntu
#for envsubst #for envsubst
RUN DEBIAN_FRONTEND=noninteractive apt install -y gettext RUN DEBIAN_FRONTEND=noninteractive apt install -y gettext

View File

@ -3,7 +3,7 @@ services:
image: checks_parser_base_ubuntu:latest image: checks_parser_base_ubuntu:latest
build: build:
context: . context: .
dockerfile: deploy/base-docker/ubuntu.Dockerfile dockerfile: deploy/base-docker/ubuntu/Dockerfile
appimage: appimage:
image: checks_parser_appimage:latest image: checks_parser_appimage:latest
build: build:

View File

@ -20,6 +20,7 @@
#include <QStackedLayout> #include <QStackedLayout>
#include <QTextStream> #include <QTextStream>
#include <QTranslator> #include <QTranslator>
#include <settingsdialog.h>
#ifdef BUILD_EMAIL_TO_TEXT_MODE #ifdef BUILD_EMAIL_TO_TEXT_MODE
# include <emailtextscene.h> # include <emailtextscene.h>
#endif #endif
@ -69,8 +70,6 @@ int main(int argc, char *argv[]) {
translator.load(":/translation/" + lang + ".qm"); translator.load(":/translation/" + lang + ".qm");
app.installTranslator(&translator); app.installTranslator(&translator);
QUiLoader loader;
#endif #endif
QWidget *window = new QWidget(); QWidget *window = new QWidget();
@ -81,7 +80,16 @@ int main(int argc, char *argv[]) {
sceneLayout->addWidget(mainwindowscene); sceneLayout->addWidget(mainwindowscene);
for (auto btn : ((MainWindow *)mainwindowscene)->findChildren<QPushButton *>()) { //Settings button setup
QPushButton *settingsButton = ((MainWindow *)mainwindowscene)->findChild<QPushButton *>("settings_button");
QObject::connect(settingsButton, &QPushButton::clicked, [&]() {
SettingsDialog d;
d.show();
d.exec();
});
for (auto &btn : ((MainWindow *)mainwindowscene)->findChildren<QPushButton *>()) {
if (btn->objectName() == "settings_button") continue;
btn->hide(); btn->hide();
} }

View File

@ -5,6 +5,7 @@
<file>scenes/ocrscene.ui</file> <file>scenes/ocrscene.ui</file>
<file>scenes/mainwindow.ui</file> <file>scenes/mainwindow.ui</file>
<file>scenes/ofdscene.ui</file> <file>scenes/ofdscene.ui</file>
<file>scenes/settingsdialog.ui</file>
<file>scenes/solvecaptchadialog.ui</file> <file>scenes/solvecaptchadialog.ui</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -31,32 +31,6 @@
<property name="verticalSpacing"> <property name="verticalSpacing">
<number>6</number> <number>6</number>
</property> </property>
<item row="0" column="1">
<widget class="QPushButton" name="ocr_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Optical Character Recognition</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../build/Desktop-Debug/media.qrc">
<normaloff>:/icons/assets/icons/OCR.svg</normaloff>:/icons/assets/icons/OCR.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>128</width>
<height>128</height>
</size>
</property>
</widget>
</item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QPushButton" name="text_from_email_button"> <widget class="QPushButton" name="text_from_email_button">
<property name="sizePolicy"> <property name="sizePolicy">
@ -101,7 +75,33 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0" colspan="2"> <item row="0" column="1">
<widget class="QPushButton" name="ocr_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Optical Character Recognition</string>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset resource="../build/Desktop-Debug/media.qrc">
<normaloff>:/icons/assets/icons/OCR.svg</normaloff>:/icons/assets/icons/OCR.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>128</width>
<height>128</height>
</size>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="ofd_button"> <widget class="QPushButton" name="ofd_button">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@ -124,6 +124,19 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<widget class="QPushButton" name="settings_button">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Settings</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>

290
scenes/settingsdialog.ui Normal file
View File

@ -0,0 +1,290 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>settingsdialog</class>
<widget class="QDialog" name="settingsdialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>693</width>
<height>786</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>673</width>
<height>724</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout">
<item row="15" column="1">
<widget class="QCheckBox" name="printTotalCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Goods net weight position</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="goodsNamePositionSpin"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Stores modules url</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Goods quantity position</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="OFDModulesDirEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>OFD modules url</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Print header</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="goodsPricePerUnitPositionSpin"/>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="storesModulesURLEdit"/>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Goods quantity alias</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>OFD modules directory</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="goodsNameAliasEdit"/>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Print total</string>
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="QLineEdit" name="goodsTotalAliasEdit"/>
</item>
<item row="8" column="1">
<widget class="QSpinBox" name="goodsQuantityPositionSpin"/>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Goods net weight alias</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QSpinBox" name="goodsNetWeightPositionSpin"/>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="OFDModulesURLEdit"/>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Goods total alias</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="storesModulesDirEdit"/>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="goodsPricePerUnitAliasEdit"/>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="goodsQuantityAliasEdit"/>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="goodsNetWeightAliasEdit"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Goods name position</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QCheckBox" name="printHeaderCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Goods name alias</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Goods price per unit position</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Stores modules directory</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Goods total position</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="OFDModulesDirChooseButton">
<property name="text">
<string>Choose</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QSpinBox" name="goodsTotalPositionSpin"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Goods price per unit alias</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="storedModulesDirChooseButton">
<property name="text">
<string>Choose</string>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Language</string>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QComboBox" name="languageComboBox">
<item>
<property name="text">
<string>en_US</string>
</property>
</item>
<item>
<property name="text">
<string>ru_RU</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Save</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>settingsdialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>settingsdialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1,7 +1,10 @@
#include "settingsdialog.h" #include "settingsdialog.h"
#include "settings/settings.h"
#include "ui_settingsdialog.h" #include "ui_settingsdialog.h"
#include "utils/utils.h"
#include <settings/settings.h>
#include <utils/utils.h>
#include <iostream>
#include <QMessageBox> #include <QMessageBox>
@ -34,10 +37,14 @@ SettingsDialog::SettingsDialog(QWidget *parent)
ui->printHeaderCheckBox->setChecked(this->settings.get_all_settings()["print_header"]); ui->printHeaderCheckBox->setChecked(this->settings.get_all_settings()["print_header"]);
ui->printTotalCheckBox->setChecked(this->settings.get_all_settings()["print_total"]); ui->printTotalCheckBox->setChecked(this->settings.get_all_settings()["print_total"]);
std::cout << settings.get_all_settings() << std::endl;
int currentLanguageIndex = 0; int currentLanguageIndex = 0;
if (!this->settings.get_all_settings().contains("language")) { bool languageSettingPresent = false;
//TODO: check that "language" exists before getting its value
languageSettingPresent = settings.get_all_settings().find("language") != settings.get_all_settings().end();
if (languageSettingPresent) {
currentLanguageIndex = ui->languageComboBox->findText(QLocale::system().name()); currentLanguageIndex = ui->languageComboBox->findText(QLocale::system().name());
if (currentLanguageIndex < 0) { if (currentLanguageIndex < 0) {
currentLanguageIndex = ui->languageComboBox->findText("en_US"); currentLanguageIndex = ui->languageComboBox->findText("en_US");
@ -137,7 +144,11 @@ void SettingsDialog::on_buttonBox_accepted() { this->settings.flush(); }
void SettingsDialog::on_buttonBox_rejected() { this->close(); } void SettingsDialog::on_buttonBox_rejected() { this->close(); }
void SettingsDialog::on_languageComboBox_currentTextChanged(const QString &changed) { void SettingsDialog::on_languageComboBox_currentTextChanged(const QString &changed) {
if (this->settings.get_all_settings().contains("language")) { bool languageSettingPresent = false;
languageSettingPresent = settings.get_all_settings().find("language") != settings.get_all_settings().end();
if (languageSettingPresent) {
if (changed == QString::fromStdString(this->settings.get_all_settings()["language"])) return; if (changed == QString::fromStdString(this->settings.get_all_settings()["language"])) return;
} else { } else {
if (changed == QLocale::system().name()) return; if (changed == QLocale::system().name()) return;
@ -151,4 +162,3 @@ void SettingsDialog::on_languageComboBox_currentTextChanged(const QString &chang
infoDialog.setWindowTitle(tr("Restart required")); infoDialog.setWindowTitle(tr("Restart required"));
infoDialog.exec(); infoDialog.exec();
} }

View File

@ -56,6 +56,8 @@ private slots:
private: private:
Ui::settingsdialog *ui; Ui::settingsdialog *ui;
public:
bool settingsExist();
}; };
#endif // SETTINGSDIALOG_H #endif // SETTINGSDIALOG_H

View File

@ -1,306 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>settingsdialog</class>
<widget class="QDialog" name="settingsdialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>599</width>
<height>799</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>310</x>
<y>740</y>
<width>251</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
</property>
</widget>
<widget class="QScrollArea" name="scrollArea">
<property name="geometry">
<rect>
<x>10</x>
<y>0</y>
<width>541</width>
<height>741</height>
</rect>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>539</width>
<height>739</height>
</rect>
</property>
<widget class="QWidget" name="gridLayoutWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>531</width>
<height>731</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="15" column="1">
<widget class="QCheckBox" name="printTotalCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_15">
<property name="text">
<string>Goods net weight position</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="goodsNamePositionSpin"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Stores modules url</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Goods quantity position</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="OFDModulesDirEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>OFD modules url</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Print header</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="goodsPricePerUnitPositionSpin"/>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="storesModulesURLEdit"/>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_14">
<property name="text">
<string>Goods quantity alias</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>OFD modules directory</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="goodsNameAliasEdit"/>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Print total</string>
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="QLineEdit" name="goodsTotalAliasEdit"/>
</item>
<item row="8" column="1">
<widget class="QSpinBox" name="goodsQuantityPositionSpin"/>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>Goods net weight alias</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QSpinBox" name="goodsNetWeightPositionSpin"/>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="OFDModulesURLEdit"/>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Goods total alias</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="storesModulesDirEdit"/>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="goodsPricePerUnitAliasEdit"/>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="goodsQuantityAliasEdit"/>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="goodsNetWeightAliasEdit"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Goods name position</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QCheckBox" name="printHeaderCheckBox">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Goods name alias</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Goods price per unit position</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Stores modules directory</string>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>Goods total position</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="OFDModulesDirChooseButton">
<property name="text">
<string>Choose</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QSpinBox" name="goodsTotalPositionSpin"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>Goods price per unit alias</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="storedModulesDirChooseButton">
<property name="text">
<string>Choose</string>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QComboBox" name="languageComboBox">
<item>
<property name="text">
<string>en_US</string>
</property>
</item>
<item>
<property name="text">
<string>ru_RU</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>settingsdialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>settingsdialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -211,12 +211,17 @@
<translation>Form</translation> <translation>Form</translation>
</message> </message>
<message> <message>
<location filename="../scenes/mainwindow.ui" line="43"/> <location filename="../scenes/mainwindow.ui" line="87"/>
<source>Optical Character Recognition</source> <source>Optical Character Recognition</source>
<translation>Optical Character Recognition</translation> <translation>Optical Character Recognition</translation>
</message> </message>
<message> <message>
<location filename="../scenes/mainwindow.ui" line="69"/> <location filename="../scenes/mainwindow.ui" line="136"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="43"/>
<source>Text from E-Mail</source> <source>Text from E-Mail</source>
<translation>Text from E-Mail</translation> <translation>Text from E-Mail</translation>
</message> </message>
@ -557,12 +562,14 @@
<context> <context>
<name>SettingsDialog</name> <name>SettingsDialog</name>
<message> <message>
<location filename="../settingsdialog.cpp" line="160"/>
<source>You need to restart program to apply language changes</source> <source>You need to restart program to apply language changes</source>
<translation type="vanished">You need to restart program to apply language changes</translation> <translation>You need to restart program to apply language changes</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="162"/>
<source>Restart required</source> <source>Restart required</source>
<translation type="vanished">Restart required</translation> <translation>Restart required</translation>
</message> </message>
</context> </context>
<context> <context>
@ -586,88 +593,114 @@
<context> <context>
<name>settingsdialog</name> <name>settingsdialog</name>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="14"/>
<source>Dialog</source> <source>Dialog</source>
<translation type="vanished">Dialog</translation> <translation>Dialog</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="153"/>
<source>Goods name position</source> <source>Goods name position</source>
<translation type="vanished">Goods name position</translation> <translation>Goods name position</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="205"/>
<source>Goods price per unit alias</source> <source>Goods price per unit alias</source>
<translation type="vanished">Goods price per unit alias</translation> <translation>Goods price per unit alias</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="219"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>TextLabel</source> <source>TextLabel</source>
<translation type="vanished">Language</translation> <translation type="vanished">Language</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="227"/>
<source>en_US</source> <source>en_US</source>
<translation type="vanished">en_US</translation> <translation>en_US</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="232"/>
<source>ru_RU</source> <source>ru_RU</source>
<translation type="vanished">ru_RU</translation> <translation>ru_RU</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="195"/>
<location filename="../scenes/settingsdialog.ui" line="212"/>
<source>Choose</source> <source>Choose</source>
<translation type="vanished">Choose</translation> <translation>Choose</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="78"/>
<source>Print header</source> <source>Print header</source>
<translation type="vanished">Print header</translation> <translation>Print header</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="121"/>
<source>Goods net weight alias</source> <source>Goods net weight alias</source>
<translation type="vanished">Goods net weight alias</translation> <translation>Goods net weight alias</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="54"/>
<source>Stores modules url</source> <source>Stores modules url</source>
<translation type="vanished">Stores modules url</translation> <translation>Stores modules url</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="134"/>
<source>Goods total alias</source> <source>Goods total alias</source>
<translation type="vanished">Goods total alias</translation> <translation>Goods total alias</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="167"/>
<source>Goods name alias</source> <source>Goods name alias</source>
<translation type="vanished">Goods name alias</translation> <translation>Goods name alias</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="91"/>
<source>Goods quantity alias</source> <source>Goods quantity alias</source>
<translation type="vanished">Goods quantity alias</translation> <translation>Goods quantity alias</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="181"/>
<source>Stores modules directory</source> <source>Stores modules directory</source>
<translation type="vanished">Stores modules directory</translation> <translation>Stores modules directory</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="98"/>
<source>OFD modules directory</source> <source>OFD modules directory</source>
<translation type="vanished">OFD modules directory</translation> <translation>OFD modules directory</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="174"/>
<source>Goods price per unit position</source> <source>Goods price per unit position</source>
<translation type="vanished">Goods price per unit position</translation> <translation>Goods price per unit position</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="44"/>
<source>Goods net weight position</source> <source>Goods net weight position</source>
<translation type="vanished">Goods net weight position</translation> <translation>Goods net weight position</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="71"/>
<source>OFD modules url</source> <source>OFD modules url</source>
<translation type="vanished">OFD modules url</translation> <translation>OFD modules url</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="188"/>
<source>Goods total position</source> <source>Goods total position</source>
<translation type="vanished">Goods total position</translation> <translation>Goods total position</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="61"/>
<source>Goods quantity position</source> <source>Goods quantity position</source>
<translation type="vanished">Goods quantity position</translation> <translation>Goods quantity position</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="108"/>
<source>Print total</source> <source>Print total</source>
<translation type="vanished">Print total</translation> <translation>Print total</translation>
</message> </message>
</context> </context>
</TS> </TS>

View File

@ -211,12 +211,17 @@
<translation>Форма</translation> <translation>Форма</translation>
</message> </message>
<message> <message>
<location filename="../scenes/mainwindow.ui" line="43"/> <location filename="../scenes/mainwindow.ui" line="87"/>
<source>Optical Character Recognition</source> <source>Optical Character Recognition</source>
<translation>Оптическое распознавание символов</translation> <translation>Оптическое распознавание символов</translation>
</message> </message>
<message> <message>
<location filename="../scenes/mainwindow.ui" line="69"/> <location filename="../scenes/mainwindow.ui" line="136"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../scenes/mainwindow.ui" line="43"/>
<source>Text from E-Mail</source> <source>Text from E-Mail</source>
<translation>Текст из электронного письма</translation> <translation>Текст из электронного письма</translation>
</message> </message>
@ -557,12 +562,14 @@
<context> <context>
<name>SettingsDialog</name> <name>SettingsDialog</name>
<message> <message>
<location filename="../settingsdialog.cpp" line="160"/>
<source>You need to restart program to apply language changes</source> <source>You need to restart program to apply language changes</source>
<translation type="vanished">Требуется перезагрузить программу, чтобы применить изменения языка</translation> <translation>Требуется перезагрузить программу, чтобы применить изменения языка</translation>
</message> </message>
<message> <message>
<location filename="../settingsdialog.cpp" line="162"/>
<source>Restart required</source> <source>Restart required</source>
<translation type="vanished">Требуется перезагрузка</translation> <translation>Требуется перезагрузка</translation>
</message> </message>
</context> </context>
<context> <context>
@ -586,88 +593,114 @@
<context> <context>
<name>settingsdialog</name> <name>settingsdialog</name>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="14"/>
<source>Dialog</source> <source>Dialog</source>
<translation type="vanished">Диалог</translation> <translation>Диалог</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="153"/>
<source>Goods name position</source> <source>Goods name position</source>
<translation type="vanished">Позиция имени товара</translation> <translation>Позиция имени товара</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="205"/>
<source>Goods price per unit alias</source> <source>Goods price per unit alias</source>
<translation type="vanished">Алиас цены товара</translation> <translation>Алиас цены товара</translation>
</message>
<message>
<location filename="../scenes/settingsdialog.ui" line="219"/>
<source>Language</source>
<translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>TextLabel</source> <source>TextLabel</source>
<translation type="vanished">Язык</translation> <translation type="vanished">Язык</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="227"/>
<source>en_US</source> <source>en_US</source>
<translation type="vanished">en_US</translation> <translation>en_US</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="232"/>
<source>ru_RU</source> <source>ru_RU</source>
<translation type="vanished">ru_RU</translation> <translation>ru_RU</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="195"/>
<location filename="../scenes/settingsdialog.ui" line="212"/>
<source>Choose</source> <source>Choose</source>
<translation type="vanished">Выбрать</translation> <translation>Выбрать</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="78"/>
<source>Print header</source> <source>Print header</source>
<translation type="vanished">Печатать заголовок</translation> <translation>Печатать заголовок</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="121"/>
<source>Goods net weight alias</source> <source>Goods net weight alias</source>
<translation type="vanished">Алиас массы нетто товара</translation> <translation>Алиас массы нетто товара</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="54"/>
<source>Stores modules url</source> <source>Stores modules url</source>
<translation type="vanished">URL модулей магазина</translation> <translation>URL модулей магазина</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="134"/>
<source>Goods total alias</source> <source>Goods total alias</source>
<translation type="vanished">Алиас всего за продукт</translation> <translation>Алиас всего за продукт</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="167"/>
<source>Goods name alias</source> <source>Goods name alias</source>
<translation type="vanished">Алиас имени товара</translation> <translation>Алиас имени товара</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="91"/>
<source>Goods quantity alias</source> <source>Goods quantity alias</source>
<translation type="vanished">Алиас количества товара</translation> <translation>Алиас количества товара</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="181"/>
<source>Stores modules directory</source> <source>Stores modules directory</source>
<translation type="vanished">Директория модулей магазина</translation> <translation>Директория модулей магазина</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="98"/>
<source>OFD modules directory</source> <source>OFD modules directory</source>
<translation type="vanished">Директория модулей ОФД</translation> <translation>Директория модулей ОФД</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="174"/>
<source>Goods price per unit position</source> <source>Goods price per unit position</source>
<translation type="vanished">Позиция центы товара</translation> <translation>Позиция центы товара</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="44"/>
<source>Goods net weight position</source> <source>Goods net weight position</source>
<translation type="vanished">Позиция массы нетто товара</translation> <translation>Позиция массы нетто товара</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="71"/>
<source>OFD modules url</source> <source>OFD modules url</source>
<translation type="vanished">URL модулей ОФД</translation> <translation>URL модулей ОФД</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="188"/>
<source>Goods total position</source> <source>Goods total position</source>
<translation type="vanished">Позиция всего за товар</translation> <translation>Позиция всего за товар</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="61"/>
<source>Goods quantity position</source> <source>Goods quantity position</source>
<translation type="vanished">Позиция количества товара</translation> <translation>Позиция количества товара</translation>
</message> </message>
<message> <message>
<location filename="../scenes/settingsdialog.ui" line="108"/>
<source>Print total</source> <source>Print total</source>
<translation type="vanished">Печатать Итого</translation> <translation>Печатать Итого</translation>
</message> </message>
</context> </context>
</TS> </TS>

View File

@ -145,16 +145,16 @@ std::vector<std::wstring> find_in_html(std::string& html, std::string regex, std
it != end; it++) { it != end; it++) {
std::wstring found_entry = from_utf8(it->str()); std::wstring found_entry = from_utf8(it->str());
std::wcout << "Found: " << found_entry << std::endl; std::cout << "Found: " << to_utf8(found_entry) << std::endl;
std::wstring extracted = substring_from_to(found_entry, from_utf8(html_start), from_utf8(html_end)); std::wstring extracted = substring_from_to(found_entry, from_utf8(html_start), from_utf8(html_end));
std::wcout << "Extracted: " << extracted << std::endl; std::cout << "Extracted: " << to_utf8(extracted) << std::endl;
parsed.push_back(extracted); parsed.push_back(extracted);
} }
return parsed; return parsed;
} }
std::vector<std::wstring> find_products_in_html(std::string html) { std::vector<std::wstring> find_products_in_html(std::string html) {
return find_in_html(html, "<div class=\"ifw-col ifw-col-1 text-left\"><b>.{10,100}<\\/b><\\/div>", "<div class=\"ifw-col ifw-col-1 text-left\"><b>", "<\\/b><\\/div>"); return find_in_html(html, "<div class=\"ifw-col ifw-col-1 text-left\"><b>.{2,100}<\\/b><\\/div>", "<div class=\"ifw-col ifw-col-1 text-left\"><b>", "<\\/b><\\/div>");
} }
std::vector<std::wstring> find_amounts_in_html(std::string html) { std::vector<std::wstring> find_amounts_in_html(std::string html) {
@ -170,11 +170,16 @@ std::vector<std::wstring> find_net_weights_in_names(std::vector<std::wstring> &n
std::vector<std::wstring> result; std::vector<std::wstring> result;
for (std::wstring &name : names ) { for (std::wstring &name : names ) {
boost::wregex regexp(from_utf8("((\\d+(.|,)?\\d?((м|)л|(к|м|)г|т|ц|шт|(pc|)s|(m|k|)g|(m|)l|t)).?)+"), boost::regex_constants::collate); boost::wregex regexp(from_utf8("((\\d+(.|,)?\\d?((м|)л|(к|м|)г|т|ц|шт|(pc|)s|(m|k|)g|(m|)l|t)).?)+"), boost::regex_constants::collate);
bool found = false;
for (boost::wsregex_iterator it{name.begin(), name.end(), regexp}, end{}; it != end; for (boost::wsregex_iterator it{name.begin(), name.end(), regexp}, end{}; it != end;
it++) { it++) {
result.push_back(it->str()); result.push_back(it->str());
found = true;
break; break;
} }
if (!found) {
result.push_back(from_utf8("?"));
}
} }
return result; return result;
} }
@ -247,6 +252,8 @@ Check parseOfdRuAnswer(std::string html) {
Check c; Check c;
for (int i = 0; i < products.size(); i ++) { for (int i = 0; i < products.size(); i ++) {
std::cout << "Adding to check: ";
std::cout << to_utf8(products[i]) << " " << to_utf8(prices[i]) << " " << to_utf8(net_weights[i]) << " " << to_utf8(amounts[i]) << std::endl;
Goods goods(to_utf8(products[i]), std::stod(prices[i]), to_utf8(net_weights[i]), std::stod(amounts[i])); Goods goods(to_utf8(products[i]), std::stod(prices[i]), to_utf8(net_weights[i]), std::stod(amounts[i]));
c.add_goods(goods); c.add_goods(goods);
} }