VMCPlugin/AppControl.h

243 lines
7.5 KiB
C++

#ifndef APPCONTROL_H
#define APPCONTROL_H
#include <QObject>
#include "version.h"
#include "atb_system.h"
#include "ATBAPP.h"
#include "plugins/PluginManager.h"
#include "plugins/CC/CCInterface.h"
#include "plugins/CalculatePrice/CalculatePriceInterface.h"
#include "support/VendingData.h"
#include "CalculatePrice/CalculatePriceDefault.h"
class VMC;
class ATBHMIconfig;
class VendingData;
class QTimer;
class AppControl : public QObject {
Q_OBJECT
public:
explicit AppControl(QObject *parent = nullptr);
PROGRAM_MODE getCurrentProgramMode();
bool requestProgramMode(PROGRAM_MODE newProgramMode);
bool isProgramModeSELL();
bool isProgramModeSELL_ENABLE();
bool isProgramModeSERVICE();
bool isProgramModeIDLE();
bool isProgramModeOOO();
public slots:
void onRequestOfflineProcessing();
// e.g. by button event,
// by vmc screen command,
// by vmc data display command
// ...
void restartSellModeTimeoutTimer();
// slots for LED configuration:
void LEDs_default();
void LEDs_ooo();
// CC-Plugin
void onCCStartTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result);
void onCCConfirmTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result);
void onCCCancelTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result);
void onCCRevertTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result);
void onCCPreAuthTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result);
void onCCBookTotalTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result);
void onCCCancelPreAuthTransactionResult(nsCCInterface::RESULT_STATE resultState, QString & result);
void onCCRequestCardInfoResult(nsCCInterface::RESULT_STATE resultState, QString & result);
// CalculatePricePlugin
#ifdef USE_CALCULATEPRICE_PLUGIN
void onCalculatePrice(QString & licensePlate);
void onCalculatePrice(uint parktime);
void onCalculatePrice(QString & cardInfo, QString & cardTransactionInfo);
void onCalculatePrice();
void onCalculatedPrice(nsCalculatePriceInterface::RESULT_STATE resultState,
const QString & accessInformation,
const QString & accessInformationType,
const QString & amountDuePeriodStart,
const QString & amountDuePeriodEnd,
const PriceInfo & priceInfo,
const QString & errorCode,
const QString & errorDescription);
void onProcessTransaction(nsCalculatePriceInterface::RESULT_STATE resultState,
const QString & errorCode,
const QString & errorDescription);
QChar private_getAccessInformationField(const QString & accessInformationType);
QString private_calculatedPrice(nsCalculatePriceInterface::RESULT_STATE resultState,
const QString & accessInformation,
const QString & accessInformationType,
const QString & amountDuePeriodStart,
const QString & amountDuePeriodEnd,
const PriceInfo & priceInfo,
const QString & errorCode,
const QString & errorDescription);
#endif // USE_CALCULATEPRICE_PLUGIN
// vmc control
void onVMCFormatedString(FormatedStringList data);
void onVMCSellData(quint8 nr,QString data);
// deprecated vmc control for cc
// this allows cc control by screens
void onVMC_ccStartTransaction();
void onVMC_ccCancelTransaction();
void onVMC_ccConfirmTransaction();
void onVMC_ccStartPreauthorisation();
void onVMC_ccCancelPreauthorisation();
void onVMC_ccConfirmPreauthorisation();
void onVMC_ccStartReadCard();
// new control interface
void onControl_switchMode(quint16 mode);
void onControl_switchScreen(quint16 screen);
void onControl_setText(quint16 screenNr, quint16 textNr, quint16 lang, QString text);
void onShowCurrentIdle();
void onShowCurrentOOO();
// vendingData
void onSetVendingData(QString key, QByteArray value);
signals:
// signals for signaling a mode change to sub-modules:
void changedProgramMode(PROGRAM_MODE newProgramMode);
void changedModeToSELL();
void changedModeToSERVICE();
void changedModeToIDLE();
void changedModeToOOO();
void doOfflineProcessing();
// cc
protected:
bool eventFilter(QObject *obj, QEvent *ev);
private:
PROGRAM_MODE programmode;
ATBHMIconfig *config;
ATB_system *system;
VMC *vmc;
VendingData *vendingData;
PluginManager *pluginManager;
void private_setupProgramModeSELL();
void private_setupProgramModeSELL_ENABLE();
void private_setupProgramModeSERVICE();
void private_setupProgramModeIDLE();
void private_setupProgramModeOOO();
void private_unsetProgramModeSERVICE();
void private_unsetProgramModeOOO();
// plugins
CCInterface *cc;
CalculatePriceInterface *calcPriceBackend;
// init methods called from constructor
void private_initCCPlugin();
void private_initCalculatePricePlugin();
void private_initSimulationPlugin();
// timers
QTimer *sellModeTimeoutTimer;
// flag to prepare for OOO in next idle
quint8 prepareInternalOOO;
// action processing
quint8 startAction(APP_ACTION action);
#if defined (ARCH_DesktopLinux)
void private_screenshot();
#endif
#if defined (CUST00318)
// hack for 00318/Nexobility
void private_CUST00318_handle_CC_ERROR_0x13();
#endif
// mouse detection
#if defined (ARCH_PTU4)
QFileSystemWatcher *pInputDeviceWatcher;
void setMouse(const QString & mouseDeviceFile, const QString & touchDeviceFile);
void closeMouse(const QString & mouseDeviceFile, const QString & touchDeviceFile);
bool mousePresent;
#endif
private slots:
// firstRun -> things done with running event loop
void firstRun();
// timers
void onSellModeTimerTimeout();
/********************************************
* CC - Slots
*/
void onCCStartTransaction();
void onCCStartConfirmTransaction();
void onCCCancelTransaction();
void onCCStartPreauthorisation();
void onCCConfirmPreauthorisation();
void onCCCancelPreauthorisationRequest();
void onCCPrintReceipt();
void onCCErrorBackend(QString & result);
void onCCStartReadCard();
/*******************************************/
// called, if system was woken up
void onWakeUp();
/********************************************
* Barcode / QR-Code - Slots
*/
#ifdef USE_BARCODESCANNER
// called, if a barcode was read from scanner
void onReadBarcode(QString & barcode);
// called, if a new barcode should be created and sent to vmc
void onRequestNewBarcode();
#endif
/*******************************************/
#if defined (Q_WS_QWS)
void onInputDeviceWatcher_directoryChanged(const QString& path);
#endif
/********************************************
* ISMAS
*/
void onProcessed_QRCode(QHash<QString, QByteArray> data);
/********************************************
* Signal System Errors
*/
void onSignalSystemErrors(const QString & errorCode, const QString & errorDescription);
};
#endif // APPCONTROL_H