Compare commits

..

No commits in common. "master" and "v1.8.0" have entirely different histories.

27 changed files with 201 additions and 84 deletions

View file

@ -31,11 +31,11 @@ BinPackArguments: true
BinPackParameters: true BinPackParameters: true
BraceWrapping: BraceWrapping:
AfterCaseLabel: false AfterCaseLabel: false
AfterClass: true AfterClass: false
AfterControlStatement: Never AfterControlStatement: Never
AfterEnum: false AfterEnum: false
AfterFunction: true AfterFunction: false
AfterNamespace: true AfterNamespace: false
AfterObjCDeclaration: false AfterObjCDeclaration: false
AfterStruct: false AfterStruct: false
AfterUnion: false AfterUnion: false
@ -51,6 +51,10 @@ BraceWrapping:
BreakBeforeBinaryOperators: None BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: true BreakBeforeConceptDeclarations: true
BreakBeforeBraces: Custom BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterFunction: true
AfterNamespace: true
BreakBeforeInheritanceComma: false BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true BreakBeforeTernaryOperators: true

6
.gitmodules vendored
View file

@ -0,0 +1,6 @@
[submodule "subprojects/nlohmann_json"]
path = subprojects/nlohmann_json
url = https://github.com/nlohmann/json.git
[submodule "subprojects/singleapplication"]
path = subprojects/singleapplication/singleapplication.git
url = https://github.com/itay-grudev/SingleApplication.git

View file

@ -1,14 +1,13 @@
cmake_minimum_required(VERSION 3.30) cmake_minimum_required(VERSION 3.10)
project(kima2 VERSION 1.9.2) project(kima2 VERSION 1.8.0)
set(CMAKE_MODULE_PATH "${CMAKE_HOME_DIRECTORY}/cmake") set(CMAKE_MODULE_PATH "${CMAKE_HOME_DIRECTORY}/cmake")
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
# For SingleApplication and nlohmann_json #include(InstallRequiredSystemLibraries)
include(FetchContent)
if(MSVC) if(MSVC)
add_compile_options(/W4 /WX) add_compile_options(/W4 /WX)
@ -30,6 +29,7 @@ if(KIMA2_USE_EXTERNAL_JSON)
find_package(nlohmann_json REQUIRED) find_package(nlohmann_json REQUIRED)
endif() endif()
add_subdirectory(subprojects)
add_subdirectory(src) add_subdirectory(src)
#if(NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE MATCHES Debug) #if(NOT CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE MATCHES Debug)
@ -98,9 +98,9 @@ if( MINGW )
${MINGW_PATH}/libwinpthread-1.dll ${MINGW_PATH}/libwinpthread-1.dll
${MINGW_PATH}/libsqlite3-0.dll ${MINGW_PATH}/libsqlite3-0.dll
${MINGW_PATH}/libusb-1.0.dll ${MINGW_PATH}/libusb-1.0.dll
${MINGW_PATH}/libicuuc76.dll ${MINGW_PATH}/libicuuc73.dll
${MINGW_PATH}/libicuin76.dll ${MINGW_PATH}/libicuin73.dll
${MINGW_PATH}/libicudt76.dll ${MINGW_PATH}/libicudt73.dll
${MINGW_PATH}/libpcre2-16-0.dll ${MINGW_PATH}/libpcre2-16-0.dll
${MINGW_PATH}/libpcre2-8-0.dll ${MINGW_PATH}/libpcre2-8-0.dll
${MINGW_PATH}/zlib1.dll ${MINGW_PATH}/zlib1.dll
@ -111,12 +111,13 @@ if( MINGW )
${MINGW_PATH}/libgraphite2.dll ${MINGW_PATH}/libgraphite2.dll
${MINGW_PATH}/libbz2-1.dll ${MINGW_PATH}/libbz2-1.dll
${MINGW_PATH}/libintl-8.dll ${MINGW_PATH}/libintl-8.dll
${MINGW_PATH}/libpcre-1.dll
${MINGW_PATH}/libdouble-conversion.dll ${MINGW_PATH}/libdouble-conversion.dll
${MINGW_PATH}/libzstd.dll ${MINGW_PATH}/libzstd.dll
${MINGW_PATH}/libmd4c.dll ${MINGW_PATH}/libmd4c.dll
${MINGW_PATH}/libbrotlicommon.dll ${MINGW_PATH}/libbrotlicommon.dll
${MINGW_PATH}/libbrotlidec.dll ${MINGW_PATH}/libbrotlidec.dll
#${MINGW_PATH}/libfmt.dll ${MINGW_PATH}/libfmt.dll
${MINGW_PATH}/libb2-1.dll ${MINGW_PATH}/libb2-1.dll
${MINGW_PATH}/libiconv-2.dll) ${MINGW_PATH}/libiconv-2.dll)
install(FILES ${MINGW_PATH}/../share/qt6/plugins/platforms/qwindows.dll install(FILES ${MINGW_PATH}/../share/qt6/plugins/platforms/qwindows.dll
@ -128,9 +129,10 @@ if( MINGW )
${MINGW_PATH}/../share/qt6/translations/qt_de.qm ${MINGW_PATH}/../share/qt6/translations/qt_de.qm
${MINGW_PATH}/../share/qt6/translations/qt_help_de.qm ${MINGW_PATH}/../share/qt6/translations/qt_help_de.qm
${MINGW_PATH}/../share/qt6/translations/qtmultimedia_de.qm ${MINGW_PATH}/../share/qt6/translations/qtmultimedia_de.qm
DESTINATION bin/share/qt6/translations) #${MINGW_PATH}/../share/qt6/translations/qtquickcontrols_de.qm
install(FILES ${MINGW_PATH}/../share/qt6/plugins/styles/qmodernwindowsstyle.dll #${MINGW_PATH}/../share/qt6/translations/qtscript_de.qm
DESTINATION bin/styles) #${MINGW_PATH}/../share/qt6/translations/qtxmlpatterns_de.qm
DESTINATION bin/translations)
endif( MINGW ) endif( MINGW )
include(InstallRequiredSystemLibraries) include(InstallRequiredSystemLibraries)

View file

@ -1,4 +1,4 @@
Copyright © 2018-2025 Martin Brodbeck Copyright © 2018-2023 Martin Brodbeck
Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der
zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt, zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt,

View file

@ -13,16 +13,17 @@ Verkaufsdaten nach dem Verkaufsende auszutauschen.
Ebenso können über einen ESC/POS-Drucker Quittungen ausgestellt werden. Ebenso können über einen ESC/POS-Drucker Quittungen ausgestellt werden.
## Installation ## Installation
Auf [rustysoft.de](https://www.rustysoft.de/software/kima2/) werden die Installationsmöglichkeiten (Flatpak, Windows-Installer) erläutert. Bitte die Hinweise dort beachten. Auf [rustysoft.de](https://www.rustysoft.de/software/kima2/) werden verschiedene Installationspakete (Arch Linux,
Ubuntu, Windows) angeboten. Bitte die Hinweise dort beachten.
## Selbst compilieren ### Selbst compilieren
KIMA2 benötigt folgende Libraries: KIMA2 benötigt folgende Libraries:
* Qt 6 * Qt 6
* boost >= 1.80 * boost >= 1.80
* libusb-1.0 * libusb-1.0
* nlohmann-json (als 3rdparty submodule vorhanden) * nlohmann-json (als 3rdparty submodule vorhanden)
Da Features aus C++20 sowie von neueren Compilern verwendet werden, sollte als Compiler mindestens GCC 14 verwendet werden. Da Features aus C++20 verwendet werden, sollte als Compiler mindestens GCC 12 verwendet werden.
Die Installationsschritte unter Linux sind wie folgt: Die Installationsschritte unter Linux sind wie folgt:
``` ```

Binary file not shown.

Binary file not shown.

33
meson.build Normal file
View file

@ -0,0 +1,33 @@
project('kima2', 'cpp', default_options : ['cpp_std=c++20'], version : '1.8.0')
conf_data = configuration_data()
conf_data.set('PROJECT_VERSION', '"' + meson.project_version() + '"')
configure_file(output : 'config.h',
configuration : conf_data)
configuration_inc = include_directories('.')
#csv = cmake.subproject('csv-parser')
#csv_lib = csv.dependency('csv')
nlohmann_lib = dependency('nlohmann_json', version : '>=3.5.0', required : false)
if not nlohmann_lib.found()
nlohmann_inc = include_directories('subprojects/nlohmann_json/single_include')
nlohmann_lib = declare_dependency(include_directories : nlohmann_inc)
endif
csv_inc = include_directories('subprojects/csv-parser/single_include')
csv_dep = declare_dependency(include_directories : csv_inc)
singleapp_proj = subproject('singleapplication')
singleapp_lib = singleapp_proj.get_variable('singleapp_lib')
singleapp_dep = singleapp_proj.get_variable('singleapp_dep')
subdir('src')
if build_machine.system() == 'linux'
install_data('misc/kima2.svg', install_dir : get_option('datadir') / 'icons/hicolor/scalable/apps')
install_data('misc/kima2.desktop', install_dir : get_option('datadir') / 'applications')
install_data('manual/Benutzerhandbuch.pdf', install_dir : get_option('datadir') / 'kima2')
endif

View file

@ -3,12 +3,11 @@ set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.78 REQUIRED) find_package(Boost 1.78 REQUIRED)
find_package(SQLite3 REQUIRED) find_package(SQLite3 REQUIRED)
FetchContent_Declare(json URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz) # Because csv-parser needs threads:
FetchContent_MakeAvailable(json)
add_library(core STATIC) find_package(fmt)
target_sources(core PRIVATE set(CORE_SOURCES
database.cpp database.cpp
entity.cpp entity.cpp
entityint.cpp entityint.cpp
@ -22,11 +21,14 @@ target_sources(core PRIVATE
utils.cpp utils.cpp
) )
add_library(core STATIC ${CORE_SOURCES})
#target_include_directories(core PRIVATE ${PROJECT_SOURCE_DIR}/subprojects/csv-parser/single_include)
if (WIN32) if (WIN32)
target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json) target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json fmt::fmt)
target_link_libraries(core PRIVATE bcrypt) target_link_libraries(core PRIVATE bcrypt)
else() else()
target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json) target_link_libraries(core PRIVATE sqlite3 nlohmann_json::nlohmann_json fmt::fmt)
endif() endif()
target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..) target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..)

View file

@ -2,7 +2,7 @@
#include <chrono> #include <chrono>
#include <filesystem> #include <filesystem>
#include <format> #include <fmt/chrono.h>
#include <iostream> #include <iostream>
#include <stdexcept> #include <stdexcept>
#include <vector> #include <vector>
@ -47,7 +47,7 @@ void Database::newDb()
fs::path destPath = sourcePath.parent_path() / sourcePath.stem(); fs::path destPath = sourcePath.parent_path() / sourcePath.stem();
auto chronoTime = std::chrono::system_clock::now(); auto chronoTime = std::chrono::system_clock::now();
std::string timeString = std::format("{0:%FT%H-%M-%S}", chronoTime); std::string timeString = fmt::format("{0:%FT%H-%M-%S}", chronoTime);
destPath += std::string("_") += timeString += ".db"; destPath += std::string("_") += timeString += ".db";

13
src/core/meson.build Normal file
View file

@ -0,0 +1,13 @@
boost = dependency('boost', modules: ['date_time'], static: true)
xlnt = dependency('xlnt')
sqlite = dependency('sqlite3')
src = ['database.cpp', 'entity.cpp', 'entityint.cpp', 'entityuuid.cpp',
'seller.cpp', 'article.cpp', 'sale.cpp', 'marketplace.cpp',
'excelreader.cpp', 'csvreader.cpp', 'jsonutil.cpp', 'utils.cpp']
core_inc = include_directories('..')
core_lib = static_library('core', src, dependencies: [boost, xlnt, sqlite, nlohmann_lib, csv_dep])
core_dep = declare_dependency(link_with: core_lib, include_directories : core_inc)

View file

@ -2,13 +2,13 @@
#include <algorithm> #include <algorithm>
#include <clocale> #include <clocale>
#include <format> #include <fmt/format.h>
#include <iomanip> #include <iomanip>
#include <numeric> #include <numeric>
#include <iostream> #include <iostream>
//using namespace fmt; using namespace fmt;
std::string formatCentAsEuroString(const int cent, int width) std::string formatCentAsEuroString(const int cent, int width)
{ {
@ -32,7 +32,7 @@ std::string formatCentAsEuroString(const int cent, int width)
#else #else
std::locale myLocale{"de_DE.utf8"}; std::locale myLocale{"de_DE.utf8"};
#endif #endif
return std::format(myLocale, "{:{}.2Lf} €", cent / 100.0L, width); return fmt::format(myLocale, "{:{}.2Lf} €", cent / 100.0L, width);
} }
std::string &ltrim(std::string &str, const std::string &chars) std::string &ltrim(std::string &str, const std::string &chars)

View file

@ -9,21 +9,15 @@ set(CMAKE_AUTORCC ON)
# Find the QtWidgets library # Find the QtWidgets library
find_package(Qt6 COMPONENTS Widgets Network PrintSupport CONFIG REQUIRED) find_package(Qt6 COMPONENTS Widgets Network PrintSupport CONFIG REQUIRED)
#find_package(Qt5Widgets CONFIG REQUIRED)
#find_package(Qt5PrintSupport CONFIG REQUIRED)
# For SingleApplication: # For SingleApplication:
set(QT_DEFAULT_MAJOR_VERSION 6 CACHE STRING "Qt version to use, defaults to 6") #find_package(Qt5Network CONFIG REQUIRED)
set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication") set(QAPPLICATION_CLASS QApplication)
FetchContent_Declare(
SingleApplication
GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication
GIT_TAG v3.5.2
)
FetchContent_MakeAvailable(SingleApplication)
add_compile_definitions(QAPPLICATION_CLASS=${QAPPLICATION_CLASS}) add_compile_definitions(QAPPLICATION_CLASS=${QAPPLICATION_CLASS})
add_executable(kima2) set(GUI_SOURCES
target_sources(kima2 PRIVATE
kima2.cpp kima2.cpp
mainwindow.cpp mainwindow.cpp
mainwindow.ui mainwindow.ui
@ -40,12 +34,15 @@ target_sources(kima2 PRIVATE
settingsdialog.cpp settingsdialog.cpp
settingsdialog.ui settingsdialog.ui
../../kima2.qrc ../../kima2.qrc
kima2.rc ${PROJECT_SOURCE_DIR}/subprojects/singleapplication/singleapplication.git/singleapplication.cpp
${PROJECT_SOURCE_DIR}/subprojects/singleapplication/singleapplication.git/singleapplication_p.cpp
) )
add_executable(kima2 ${GUI_SOURCES} kima2.rc)
target_include_directories(kima2 PRIVATE ${PROJECT_BINARY_DIR}) target_include_directories(kima2 PRIVATE ${PROJECT_BINARY_DIR})
target_include_directories(kima2 PRIVATE ${PROJECT_SOURCE_DIR}/subprojects/singleapplication/singleapplication.git)
target_link_libraries(kima2 core printer Qt::Core Qt::PrintSupport Qt::Network SingleApplication::SingleApplication) # target_link_libraries(kima2 core printer Qt5::Widgets Qt5::PrintSupport Qt5::Network stdc++fs)
target_link_libraries(kima2 core printer Qt::Core Qt::PrintSupport Qt::Network)
if(WIN32) if(WIN32)
set_target_properties(kima2 PROPERTIES LINK_FLAGS "-mwindows") set_target_properties(kima2 PROPERTIES LINK_FLAGS "-mwindows")

View file

@ -13,11 +13,9 @@
#include <singleapplication.h> #include <singleapplication.h>
#include <stdexcept> #include <stdexcept>
using namespace Qt::Literals::StringLiterals;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
SingleApplication kimaApp(argc, argv, false, SingleApplication::Mode::User | SingleApplication::ExcludeAppPath | SingleApplication::ExcludeAppVersion); SingleApplication kimaApp(argc, argv);
// QCoreApplication::setOrganizationName("RustySoft"); // QCoreApplication::setOrganizationName("RustySoft");
QCoreApplication::setOrganizationDomain("rustysoft.de"); QCoreApplication::setOrganizationDomain("rustysoft.de");
@ -25,7 +23,7 @@ int main(int argc, char *argv[])
QTranslator qtTranslator; QTranslator qtTranslator;
if (qtTranslator.load(QLocale::system(), u"qtbase"_s, u"_"_s, if (qtTranslator.load(QLocale::system(), u"qtbase"_qs, u"_"_qs,
QLibraryInfo::path(QLibraryInfo::TranslationsPath))) { QLibraryInfo::path(QLibraryInfo::TranslationsPath))) {
kimaApp.installTranslator(&qtTranslator); kimaApp.installTranslator(&qtTranslator);
} }

View file

@ -105,7 +105,7 @@ MainWindow::MainWindow()
}); });
connect(m_ui.licenseAction, &QAction::triggered, this, [this]() { connect(m_ui.licenseAction, &QAction::triggered, this, [this]() {
QString licenseText( QString licenseText(
"Copyright © 2018-2025 Martin Brodbeck\n\n" "Copyright © 2018-2023 Martin Brodbeck\n\n"
"Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der " "Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der "
"zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, " "zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, "
"sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, " "sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, "

23
src/gui/meson.build Normal file
View file

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

View file

@ -201,7 +201,7 @@ void ReportDialog::onPrintSellerReceiptButtonClicked()
return; return;
auto indexes = selModel->selectedRows(); auto indexes = selModel->selectedRows();
std::ranges::sort(indexes); auto &seller = m_market->getSellers().at(indexes[0].row());
auto printerDevice = auto printerDevice =
convertToPosPrinterDevice(posPrinterDevice.toStdString(), posPrinterEndpoint.toStdString()); convertToPosPrinterDevice(posPrinterDevice.toStdString(), posPrinterEndpoint.toStdString());
@ -214,14 +214,10 @@ void ReportDialog::onPrintSellerReceiptButtonClicked()
printer = std::make_unique<PosPrinter>(); printer = std::make_unique<PosPrinter>();
} }
if (printer->isValid()) { if (printer->isValid())
for (const auto &index : indexes) {
auto &seller = m_market->getSellers().at(index.row());
printer->printSellerReceipt( printer->printSellerReceipt(
seller.get(), feeInPercent, maxFeeInEuro * 100, seller.get(), feeInPercent, maxFeeInEuro * 100,
settings.value("global/commune", "Dettingen").toString().toStdString()); settings.value("global/commune", "Dettingen").toString().toStdString());
}
}
} }
void ReportDialog::onReportViewSelectionChanged(const QItemSelection &selected, void ReportDialog::onReportViewSelectionChanged(const QItemSelection &selected,

View file

@ -19,7 +19,7 @@
<item> <item>
<widget class="QTableView" name="reportView"> <widget class="QTableView" name="reportView">
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum> <enum>QAbstractItemView::SingleSelection</enum>
</property> </property>
<property name="selectionBehavior"> <property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum> <enum>QAbstractItemView::SelectRows</enum>

3
src/meson.build Normal file
View file

@ -0,0 +1,3 @@
subdir('core')
subdir('printer')
subdir('gui')

View file

@ -9,15 +9,15 @@ else()
pkg_check_modules(LibUSB REQUIRED libusb-1.0) pkg_check_modules(LibUSB REQUIRED libusb-1.0)
endif() endif()
add_library(printer STATIC) set(PRINTER_SOURCES
target_sources(printer PRIVATE
posprinter.cpp posprinter.cpp
utils.cpp utils.cpp
) )
add_library(printer STATIC ${PRINTER_SOURCES})
if(WIN32) if(WIN32)
target_link_libraries(printer core ${LIBUSB_1_LIBRARIES}) target_link_libraries(printer core ${LIBUSB_1_LIBRARIES})
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}/.. ${Boost_INCLUDE_DIRS}) target_include_directories(printer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/..)

9
src/printer/meson.build Normal file
View file

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

View file

@ -19,8 +19,6 @@ const std::string PosPrinter::Command::RIGHT_ALIGN = {0x1b, 0x61, 0x02};
const std::string PosPrinter::Command::FONT_SIZE_BIG = {0x1b, 0x21, 0x10}; const std::string PosPrinter::Command::FONT_SIZE_BIG = {0x1b, 0x21, 0x10};
const std::string PosPrinter::Command::FONT_SIZE_NORMAL = {0x1b, 0x21, 0x00}; const std::string PosPrinter::Command::FONT_SIZE_NORMAL = {0x1b, 0x21, 0x00};
const std::string PosPrinter::Command::FEED = {0x1b, 0x64, 0x03}; const std::string PosPrinter::Command::FEED = {0x1b, 0x64, 0x03};
const std::string PosPrinter::Command::PARTIAL_CUT = {0x1b, 0x69};
const std::string PosPrinter::Command::FULL_CUT = {0x1b, 0x6d};
PosPrinter::PosPrinter() : PosPrinter(PrinterDevice()) {} PosPrinter::PosPrinter() : PosPrinter(PrinterDevice()) {}
@ -204,7 +202,7 @@ void PosPrinter::printSellerReceipt(Seller* seller, const int percent, const int
<< marketFeeAsString(seller->sumInCents(), percent, maxFeeInCent) << "\n"; << marketFeeAsString(seller->sumInCents(), percent, maxFeeInCent) << "\n";
commandStream << "\nAuszahlung............. " commandStream << "\nAuszahlung............. "
<< paymentAsString(seller->sumInCents(), percent, maxFeeInCent) << "\n"; << paymentAsString(seller->sumInCents(), percent, maxFeeInCent) << "\n";
commandStream << Command::FEED << Command::FEED; commandStream << Command::FEED;
write(commandStream.str()); write(commandStream.str());
} }

View file

@ -49,8 +49,6 @@ class PosPrinter
static const std::string FONT_SIZE_BIG; static const std::string FONT_SIZE_BIG;
static const std::string FONT_SIZE_NORMAL; static const std::string FONT_SIZE_NORMAL;
static const std::string FEED; static const std::string FEED;
static const std::string PARTIAL_CUT;
static const std::string FULL_CUT;
}; };
private: private:

View file

@ -0,0 +1,5 @@
if(NOT KIMA2_USE_EXTERNAL_JSON)
set(JSON_BuildTests OFF CACHE INTERNAL "")
add_subdirectory(nlohmann_json EXCLUDE_FROM_ALL)
endif()
#add_subdirectory(csv-parser)

@ -0,0 +1 @@
Subproject commit bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d

View file

@ -0,0 +1,27 @@
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.

@ -0,0 +1 @@
Subproject commit a3ed916f591c300e97b873fde36863fa37b49fa9