Compare commits

..

No commits in common. "d13f9d2824ad22e4fda94dc3fd6eab6607d2968d" and "ad895abd355ed57436f97317230f59ba0748a603" have entirely different histories.

31 changed files with 81 additions and 152 deletions

6
.gitmodules vendored
View file

@ -1,9 +1,9 @@
[submodule "3rdparty/nlohmann_json"] [submodule "3rdparty/nlohmann_json"]
path = subprojects/nlohmann_json path = 3rdparty/nlohmann_json
url = https://github.com/nlohmann/json.git url = https://github.com/nlohmann/json.git
[submodule "3rdparty/singleapplication"] [submodule "3rdparty/singleapplication"]
path = subprojects/singleapplication/singleapplication.git path = 3rdparty/singleapplication
url = https://github.com/itay-grudev/SingleApplication.git url = https://github.com/itay-grudev/SingleApplication.git
[submodule "3rdparty/csv-parser"] [submodule "3rdparty/csv-parser"]
path = subprojects/csv-parser path = 3rdparty/csv-parser
url = https://github.com/vincentlaucsb/csv-parser.git url = https://github.com/vincentlaucsb/csv-parser.git

View file

@ -1,20 +1,3 @@
project('kima2', 'cpp', default_options : ['cpp_std=c++17'], version : '1.6.0') project('kima2', 'cpp')
conf_data = configuration_data()
conf_data.set('PROJECT_VERSION', '"' + meson.project_version() + '"')
configure_file(output : 'config.h',
configuration : conf_data)
configuration_inc = include_directories('.')
cmake = import('cmake')
#csv = cmake.subproject('csv-parser')
#csv_lib = csv.dependency('csv')
nlohmann = cmake.subproject('nlohmann_json', cmake_options : ['-DJSON_BuildTests=OFF', '-DCMAKE_BUILD_TYPE=Release'])
nlohmann_lib = nlohmann.dependency('nlohmann_json')
singleapp_proj = subproject('singleapplication')
singleapp_lib = singleapp_proj.get_variable('singleapp_lib')
singleapp_dep = singleapp_proj.get_variable('singleapp_dep')
subdir('src') subdir('src')

View file

@ -29,11 +29,11 @@ set(CORE_SOURCES
add_library(core STATIC ${CORE_SOURCES}) add_library(core STATIC ${CORE_SOURCES})
target_include_directories(core PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/csv-parser/include) target_include_directories(core PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/csv-parser/include)
if (WIN32) if (WIN32)
target_link_libraries(core PRIVATE Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARY} csv) target_link_libraries(core PRIVATE printer Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARY} csv)
target_link_libraries(core PRIVATE bcrypt) target_link_libraries(core PRIVATE bcrypt)
else() else()
target_link_libraries(core PRIVATE Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARIES} csv) target_link_libraries(core PRIVATE printer Boost::boost Boost::date_time sqlite3 nlohmann_json::nlohmann_json ${XLNT_LIBRARIES} csv)
endif() endif()
#target_include_directories(core PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/csv-parser) #target_include_directories(core PRIVATE ${PROJECT_SOURCE_DIR}/3rdparty/csv-parser)
target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

View file

@ -2,8 +2,7 @@
#include "utils.h" #include "utils.h"
#include <fstream> #include <fstream>
#include "../../subprojects/csv-parser/single_include/csv.hpp" #include <csv.hpp>
//#include <csv.hpp>
namespace fs = std::filesystem; namespace fs = std::filesystem;

View file

@ -6,8 +6,4 @@ src = ['database.cpp', 'entity.cpp', 'entityint.cpp', 'entityuuid.cpp',
'seller.cpp', 'article.cpp', 'sale.cpp', 'marketplace.cpp', 'seller.cpp', 'article.cpp', 'sale.cpp', 'marketplace.cpp',
'excelreader.cpp', 'csvreader.cpp', 'jsonutil.cpp', 'utils.cpp'] 'excelreader.cpp', 'csvreader.cpp', 'jsonutil.cpp', 'utils.cpp']
core_inc = include_directories('..') core_lib = static_library('core', src, dependencies :[boost, xlnt, sqlite])
core_lib = static_library('core', src, dependencies :[boost, xlnt, sqlite, nlohmann_lib])
core_dep = declare_dependency(link_with : core_lib, include_directories : core_inc)

View file

@ -21,6 +21,31 @@ std::string formatCentAsEuroString(const int cent, int width)
return currStream.str(); return currStream.str();
} }
std::optional<PrinterDevice> convertToPosPrinterDevice(const std::string& device,
const std::string& endpoint)
{
if (device.empty()) {
return std::nullopt;
}
PrinterDevice printerDevice;
std::string delimiter = ":";
try {
printerDevice.idVendor = std::stoi(device.substr(0, device.find(delimiter)), 0, 16);
printerDevice.idProduct = std::stoi(device.substr(device.find(delimiter) + 1), 0, 16);
if (endpoint.empty()) {
printerDevice.endpoint = 0x03;
} else {
printerDevice.endpoint = std::stoi(endpoint, 0, 16);
}
} catch (std::exception& ex) {
throw ex;
}
return printerDevice;
}
std::string& ltrim(std::string& str, const std::string& chars) std::string& ltrim(std::string& str, const std::string& chars)
{ {
str.erase(0, str.find_first_not_of(chars)); str.erase(0, str.find_first_not_of(chars));
@ -46,4 +71,4 @@ bool case_insensitive_match(std::string s1, std::string s2)
if (s1.compare(s2) == 0) if (s1.compare(s2) == 0)
return true; // The strings are same return true; // The strings are same
return false; // not matched return false; // not matched
} }

View file

@ -1,11 +1,15 @@
#ifndef CORE_UTILS_H #ifndef UTILS_H
#define CORE_UTILS_H #define UTILS_H
#include "posprinter.h"
#include <locale> #include <locale>
#include <optional> #include <optional>
#include <string> #include <string>
std::string formatCentAsEuroString(const int cent, int width = 10); std::string formatCentAsEuroString(const int cent, int width = 10);
std::optional<PrinterDevice> convertToPosPrinterDevice(const std::string& vendor,
const std::string& endpoint);
std::string& ltrim(std::string& str, const std::string& chars = "\t\n\v\f\r "); std::string& ltrim(std::string& str, const std::string& chars = "\t\n\v\f\r ");
std::string& rtrim(std::string& str, const std::string& chars = "\t\n\v\f\r "); std::string& rtrim(std::string& str, const std::string& chars = "\t\n\v\f\r ");
std::string& trim(std::string& str, const std::string& chars = "\t\n\v\f\r "); std::string& trim(std::string& str, const std::string& chars = "\t\n\v\f\r ");

View file

@ -1,7 +1,7 @@
#ifndef BASKET_MODEL_H #ifndef BASKET_MODEL_H
#define BASKET_MODEL_H #define BASKET_MODEL_H
#include <core/marketplace.h> #include <marketplace.h>
#include <QAbstractTableModel> #include <QAbstractTableModel>
@ -27,4 +27,4 @@ class BasketModel : public QAbstractTableModel
Marketplace* marketplace_; Marketplace* marketplace_;
}; };
#endif #endif

View file

@ -1,19 +1,19 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "basketmodel.h" #include "basketmodel.h"
#include <config.h> #include "config.h"
#include "jsonutil.h"
#include "pricedialog.h" #include "pricedialog.h"
#include "reportdialog.h" #include "reportdialog.h"
#include "salemodel.h" #include "salemodel.h"
#include "sellerdialog.h" #include "sellerdialog.h"
#include "settingsdialog.h" #include "settingsdialog.h"
#include <core/csvreader.h> #include <utils.h>
#include <core/excelreader.h>
#include <core/jsonutil.h> #include <csvreader.h>
#include <core/utils.h> #include <excelreader.h>
#include <printer/posprinter.h> #include <posprinter.h>
#include <printer/utils.h>
#include <exception> #include <exception>
#include <filesystem> #include <filesystem>

View file

@ -3,7 +3,7 @@
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include <core/marketplace.h> #include <marketplace.h>
#include <QMainWindow> #include <QMainWindow>
#include <QtGui/QCloseEvent> #include <QtGui/QCloseEvent>
@ -53,4 +53,4 @@ class MainWindow : public QMainWindow
std::unique_ptr<Marketplace> marketplace_; std::unique_ptr<Marketplace> marketplace_;
}; };
#endif #endif

View file

@ -1,8 +1,5 @@
qt5 = import('qt5') qt5 = import('qt5')
qt5_dep = dependency('qt5', modules: ['Core', 'Gui', 'PrintSupport', 'Network']) qt5_dep = dependency('qt5', modules: ['Core', 'Gui', 'PrintSupport'])
thread_dep = dependency('threads')
src = ['kima2.cpp', 'mainwindow.cpp', 'sellerdialog.cpp', 'sellermodel.cpp', src = ['kima2.cpp', 'mainwindow.cpp', 'sellerdialog.cpp', 'sellermodel.cpp',
'pricedialog.cpp', 'basketmodel.cpp', 'salemodel.cpp', 'reportdialog.cpp', 'pricedialog.cpp', 'basketmodel.cpp', 'salemodel.cpp', 'reportdialog.cpp',
@ -10,12 +7,9 @@ src = ['kima2.cpp', 'mainwindow.cpp', 'sellerdialog.cpp', 'sellermodel.cpp',
ui = ['mainwindow.ui', 'sellerdialog.ui', 'pricedialog.ui', 'reportdialog.ui', 'settingsdialog.ui'] ui = ['mainwindow.ui', 'sellerdialog.ui', 'pricedialog.ui', 'reportdialog.ui', 'settingsdialog.ui']
processed = qt5.preprocess(moc_headers : ['basketmodel.h', 'mainwindow.h', 'pricedialog.h', processed = qt5.preprocess(moc_headers : ['basketmodel.h', 'mainwindow.h', 'pricedialog.h', 'reportdialog.h', 'sellerdialog.h', 'settingsdialog.h'],
'reportdialog.h', 'sellerdialog.h', 'settingsdialog.h',
'sellermodel.h', 'salemodel.h'],
ui_files : ui, ui_files : ui,
qresources : '../../kima2.qrc', qresources : '../../kima2.qrc',
dependencies: qt5_dep) dependencies: qt5_dep)
kima2 = executable('kima2', sources : [src, processed], dependencies : [qt5_dep, singleapp_dep, core_dep, printer_dep, thread_dep], kima2 = executable('kima2', sources : [src, processed], dependencies : qt5_dep)
include_directories : [configuration_inc])

View file

@ -2,9 +2,8 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <core/utils.h> #include <posprinter.h>
#include <printer/posprinter.h> #include <utils.h>
#include <printer/utils.h>
#include <filesystem> #include <filesystem>

View file

@ -5,7 +5,7 @@
#include "reportmodel.h" #include "reportmodel.h"
#include <core/marketplace.h> #include <marketplace.h>
#include <QDialog> #include <QDialog>
@ -30,4 +30,4 @@ class ReportDialog : public QDialog
std::unique_ptr<ReportModel> model_; std::unique_ptr<ReportModel> model_;
}; };
#endif #endif

View file

@ -1,7 +1,7 @@
#ifndef REPORT_MODEL_H #ifndef REPORT_MODEL_H
#define REPORT_MODEL_H #define REPORT_MODEL_H
#include <core/marketplace.h> #include <marketplace.h>
#include <QAbstractTableModel> #include <QAbstractTableModel>
@ -20,4 +20,4 @@ class ReportModel : public QAbstractTableModel
int maxFeeInCent_{}; int maxFeeInCent_{};
}; };
#endif #endif

View file

@ -1,6 +1,6 @@
#include "salemodel.h" #include "salemodel.h"
#include <core/article.h> #include <article.h>
#include <algorithm> #include <algorithm>

View file

@ -1,7 +1,7 @@
#ifndef SALEMODEL_H #ifndef SALEMODEL_H
#define SALEMODEL_H #define SALEMODEL_H
#include <core/marketplace.h> #include <marketplace.h>
#include <QAbstractItemModel> #include <QAbstractItemModel>
@ -28,4 +28,4 @@ class SaleModel : public QAbstractItemModel
std::unique_ptr<Sale> rootItem{new Sale()}; std::unique_ptr<Sale> rootItem{new Sale()};
}; };
#endif #endif

View file

@ -1,7 +1,7 @@
#ifndef SELLER_MODEL_H #ifndef SELLER_MODEL_H
#define SELLER_MODEL_H #define SELLER_MODEL_H
#include <core/marketplace.h> #include <marketplace.h>
#include <QAbstractTableModel> #include <QAbstractTableModel>
@ -28,4 +28,4 @@ class SellerModel : public QAbstractTableModel
Marketplace* marketplace_; Marketplace* marketplace_;
}; };
#endif #endif

View file

@ -2,10 +2,9 @@
#include "mainwindow.h" #include "mainwindow.h"
#include <core/database.h> #include <database.h>
#include <printer/posprinter.h> #include <posprinter.h>
#include <printer/utils.h> #include <utils.h>
#include <core/utils.h>
#include <exception> #include <exception>
#include <stdexcept> #include <stdexcept>
@ -117,4 +116,4 @@ void SettingsDialog::accept()
} }
QDialog::accept(); QDialog::accept();
} }

View file

@ -3,14 +3,12 @@
#include "ui_settingsdialog.h" #include "ui_settingsdialog.h"
#include <core/marketplace.h> #include <marketplace.h>
#include <QDialog> #include <QDialog>
class SettingsDialog : public QDialog class SettingsDialog : public QDialog
{ {
Q_OBJECT
public: public:
SettingsDialog(QWidget* parent = nullptr, SettingsDialog(QWidget* parent = nullptr,
Qt::WindowFlags f = Qt::WindowTitleHint | Qt::WindowSystemMenuHint); Qt::WindowFlags f = Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
@ -23,4 +21,4 @@ class SettingsDialog : public QDialog
Marketplace* market_{}; Marketplace* market_{};
}; };
#endif #endif

View file

@ -1,3 +1,5 @@
printer = dependency('printer_dep', fallback : ['printer', 'printer_dep'])
subdir('core') subdir('core')
subdir('printer') subdir('printer')
subdir('gui') subdir('gui')

View file

@ -11,7 +11,6 @@ endif()
set(PRINTER_SOURCES set(PRINTER_SOURCES
posprinter.cpp posprinter.cpp
utils.cpp
) )
add_library(printer STATIC ${PRINTER_SOURCES}) add_library(printer STATIC ${PRINTER_SOURCES})
@ -20,4 +19,4 @@ if(WIN32)
else() else()
target_link_libraries(printer core ${LibUSB_LIBRARIES}) target_link_libraries(printer core ${LibUSB_LIBRARIES})
endif() endif()
target_include_directories(printer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) target_include_directories(printer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

View file

@ -1,9 +1,5 @@
libusb = dependency('libusb-1.0') libusb = dependency('libusb-1.0')
src = ['posprinter.cpp', 'utils.cpp'] src = ['posprinter.cpp']
printer_inc = include_directories('..') printer_lib = static_library('printer', src, dependencies: [libusb])
printer_lib = static_library('printer', src, dependencies: [libusb, core_dep])
printer_dep = declare_dependency(link_with : printer_lib, include_directories : printer_inc)

View file

@ -1,6 +1,6 @@
#include "posprinter.h" #include "posprinter.h"
#include <core/marketplace.h> #include <marketplace.h>
#include <boost/date_time/posix_time/posix_time.hpp> #include <boost/date_time/posix_time/posix_time.hpp>
@ -213,4 +213,4 @@ bool PosPrinter::isValid()
return true; return true;
else else
return false; return false;
} }

View file

@ -1,8 +1,8 @@
#ifndef POS_PRINTER_H #ifndef POS_PRINTER_H
#define POS_PRINTER_H #define POS_PRINTER_H
#include <core/sale.h> #include <sale.h>
#include <core/seller.h> #include <seller.h>
#include <memory> #include <memory>

View file

@ -1,26 +0,0 @@
#include "utils.h"
std::optional<PrinterDevice> convertToPosPrinterDevice(const std::string& device,
const std::string& endpoint)
{
if (device.empty()) {
return std::nullopt;
}
PrinterDevice printerDevice;
std::string delimiter = ":";
try {
printerDevice.idVendor = std::stoi(device.substr(0, device.find(delimiter)), 0, 16);
printerDevice.idProduct = std::stoi(device.substr(device.find(delimiter) + 1), 0, 16);
if (endpoint.empty()) {
printerDevice.endpoint = 0x03;
} else {
printerDevice.endpoint = std::stoi(endpoint, 0, 16);
}
} catch (std::exception& ex) {
throw ex;
}
return printerDevice;
}

View file

@ -1,12 +0,0 @@
#ifndef PRINTER_UTILS_H
#define PRINTER_UTILS_H
#include "posprinter.h"
#include <optional>
#include <string>
std::optional<PrinterDevice> convertToPosPrinterDevice(const std::string& vendor,
const std::string& endpoint);
#endif

View file

@ -1,27 +0,0 @@
project('singleapplication')
qt5 = import('qt5')
dep_qt5 = dependency('qt5', modules: ['Core', 'Widgets', 'Network'])
singleapp_inc = include_directories('singleapplication.git')
singleapp_moc = qt5.preprocess(
moc_headers: ['singleapplication.git/singleapplication.h', 'singleapplication.git/singleapplication_p.h'],
moc_extra_arguments: ['-DQAPPLICATION_CLASS=QApplication'],
dependencies: dep_qt5
)
singleapp_lib = static_library('SingleApplication',
['singleapplication.git/singleapplication.cpp', 'singleapplication.git/singleapplication_p.cpp', singleapp_moc],
include_directories: singleapp_inc,
cpp_args : '-DQAPPLICATION_CLASS=QApplication',
dependencies: dep_qt5
)
singleapp_dep = declare_dependency(
include_directories: singleapp_inc,
link_with: singleapp_lib
)
# On windows, SingleApplication needs to be linked against advapi32. This is
# done by adding 'advapi32' to cpp_winlibs, where it should be by default.