Zdenek Jonak 8 years ago
commit 1d393cf3fb

@ -8,7 +8,7 @@
"default" : "",
"CZ" : ""
},
"schemaVersion" : 1,
"schemaVersion" : 2,
"sql" : [
"CREATE TABLE \"AddressbookData\" (
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
@ -21,10 +21,14 @@
\"addressCity\" TEXT NULL,
\"addressStreet\" TEXT NULL,
\"addressHouseNumber\" TEXT NULL,
\"addressZipCode\" TEXT NULL);"
\"addressZipCode\" TEXT NULL);
",
"ALTER TABLE AddressbookData ADD \"country\" INTEGER NULL;
"
],
"dependencies" : [],
"dependencies" : [ "COUNTRYREGISTER" ],
"translations" : {
"CZ" : {
"title" : "Titul",

@ -32,6 +32,7 @@ include(../config_plugin.pri)
ODB_FILES = addressbook/data/addressbookdata.h
H_DIR = $$PWD/data/*.h
ODB_OTHER_INCLUDES = -I $$PWD/../countryregister/data
include(../odb.pri)
OTHER_FILES += \
@ -43,3 +44,11 @@ FORMS += \
RESOURCES += \
addressbookrc.qrc
TRANSLATIONS = translations/addressbook_cs_CZ.ts
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -lcountryregister
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -lcountryregister
else:unix: LIBS += -L$$OUT_PWD/../plugins/ -lcountryregister
INCLUDEPATH += $$PWD/../countryregister/data
INCLUDEPATH += $$PWD/../countryregister

@ -1,5 +1,6 @@
#include "addressbookform.h"
#include "ui_addressbookform.h"
#include <countrydata.h>
AddressbookForm::AddressbookForm(QWidget *parent) :
AutoForm<AddressbookData>(parent),
@ -22,3 +23,9 @@ AddressbookForm::~AddressbookForm()
{
delete ui;
}
void AddressbookForm::registerCombos()
{
Service<CountryData> srv;
registerBinding(ui->country, ComboData::createComboData(srv.all()));
}

@ -20,6 +20,10 @@ public:
private:
Ui::AddressbookForm *ui;
// FormBinder interface
protected:
void registerCombos();
};

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<width>610</width>
<height>407</height>
</rect>
</property>
<property name="windowTitle">
@ -115,8 +115,35 @@
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>Country</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QComboBox" name="country">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>title</tabstop>
<tabstop>firstName</tabstop>
<tabstop>lastName</tabstop>
<tabstop>birthDate</tabstop>
<tabstop>idCardNumber</tabstop>
<tabstop>ztp</tabstop>
<tabstop>addressCity</tabstop>
<tabstop>addressStreet</tabstop>
<tabstop>addressHouseNumber</tabstop>
<tabstop>addressZipCode</tabstop>
<tabstop>country</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

@ -3,6 +3,7 @@
AddressbookData::AddressbookData(QObject * parent)
:ComboItem(parent)
{
m_ztp = false;
}
QString AddressbookData::title() const
@ -105,6 +106,19 @@ void AddressbookData::setId(int id)
m_id = id;
}
QSharedPointer<QObject> AddressbookData::country() const
{
return m_country;
}
void AddressbookData::setCountry(const QSharedPointer<QObject> &country)
{
if (qobject_cast<CountryData*>(country.data()) != NULL)
{
m_country = qSharedPointerDynamicCast<CountryData, QObject>(country);
}
}
bool AddressbookData::eq(ComboItem *other)
{
AddressbookData *adb = qobject_cast<AddressbookData*>(other);

@ -6,8 +6,10 @@
#include <QDate>
#include <odb/core.hxx>
#include <QtCore/qglobal.h>
#include <QSharedPointer>
#include <data/comboitem.h>
#include <countrydata.h>
#if defined(ADDRESSBOOK_LIBRARY)
# define ADDRESSBOOKSHARED_EXPORT Q_DECL_EXPORT
@ -29,6 +31,7 @@ class ADDRESSBOOKSHARED_EXPORT AddressbookData : public ComboItem
Q_PROPERTY(QString addressStreet READ addressStreet WRITE setAddressStreet)
Q_PROPERTY(QString addressHouseNumber READ addressHouseNumber WRITE setAddressHouseNumber)
Q_PROPERTY(QString addressZipCode READ addressZipCode WRITE setAddressZipCode)
Q_PROPERTY(QSharedPointer<QObject> country READ country WRITE setCountry)
public:
AddressbookData(QObject *parent = 0);
@ -65,6 +68,9 @@ public:
int id() const;
void setId(int id);
QSharedPointer<QObject> country() const;
void setCountry(const QSharedPointer<QObject> &country);
private:
friend class odb::access;
#pragma db id auto
@ -79,6 +85,7 @@ private:
QString m_addressStreet;
QString m_addressHouseNumber;
QString m_addressZipCode;
CountryDataPtr m_country;
// ComboItem interface
public:
@ -86,4 +93,6 @@ public:
virtual QString toString();
};
typedef QSharedPointer<AddressbookData> AddressbookDataPtr;
#endif // ADDRESSBOOKDATA_H

@ -178,3 +178,13 @@ void MainWindow::on_actionCountry_register_triggered()
}
}
void MainWindow::on_actionAbout_Qt_triggered()
{
QMessageBox::aboutQt(this);
}
void MainWindow::on_actionAbout_triggered()
{
QMessageBox::about(this, tr("About prodejna"), tr("Modular cash register software under GPL license.\n(C) 2015 - 2017 Josef Rokos, Zdenek Jonák"));
}

@ -39,6 +39,10 @@ private slots:
void on_actionCountry_register_triggered();
void on_actionAbout_Qt_triggered();
void on_actionAbout_triggered();
private:
Ui::MainWindow *ui;
LoginDialog *m_loginDialog;

@ -60,7 +60,7 @@
<x>0</x>
<y>0</y>
<width>1000</width>
<height>20</height>
<height>25</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@ -79,8 +79,16 @@
<addaction name="actionPost_register"/>
<addaction name="actionCountry_register"/>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
</property>
<addaction name="actionAbout"/>
<addaction name="actionAbout_Qt"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuRegisters"/>
<addaction name="menuHelp"/>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
@ -126,12 +134,22 @@
</action>
<action name="actionPost_register">
<property name="text">
<string>Post register</string>
<string>&amp;Post register</string>
</property>
</action>
<action name="actionCountry_register">
<property name="text">
<string>Country register</string>
<string>&amp;Country register</string>
</property>
</action>
<action name="actionAbout">
<property name="text">
<string>About</string>
</property>
</action>
<action name="actionAbout_Qt">
<property name="text">
<string>About Qt</string>
</property>
</action>
</widget>

@ -2,6 +2,7 @@
#include "campgrid.h"
#include "campform.h"
#include "settings/campsettingsform.h"
Camp::Camp()
{
@ -9,8 +10,10 @@ Camp::Camp()
void Camp::initServiceUi()
{
m_service = new Service<CampData>();
m_ui = new CampGrid();
((CampGrid*)m_ui)->setForm(new CampForm());
m_settingsUi = new CampSettingsForm();
}
QIcon Camp::pluginIcon()

@ -8,16 +8,19 @@
"default" : "",
"CZ" : ""
},
"schemaVersion" : 1,
"schemaVersion" : 2,
"sql" : [
"CREATE TABLE \"CampData\" (
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
\"numSer\" TEXT NULL,
\"start\" TEXT NULL,
\"end\" TEXT NULL,
\"ownerFirstame\" TEXT NULL,
\"ownerLastname\" TEXT NULL,
\"ownerAddress\" TEXT NULL,
\"totalPrice\" INTEGER NOT NULL,
\"sale\" INTEGER NOT NULL,
\"fixedSale\" INTEGER NOT NULL,
\"season\" INTEGER NULL,
CONSTRAINT \"season_fk\"
FOREIGN KEY (\"season\")
@ -29,11 +32,21 @@ CREATE TABLE \"AddressItem\" (
\"firstName\" TEXT NULL,
\"lastName\" TEXT NULL,
\"address\" TEXT NULL,
\"adbItem\" INTEGER NULL,
\"price\" INTEGER NOT NULL,
\"campData\" INTEGER NOT NULL,
\"personPrice\" INTEGER NULL,
CONSTRAINT \"adbItem_fk\"
FOREIGN KEY (\"adbItem\")
REFERENCES \"AddressbookData\" (\"id\")
DEFERRABLE INITIALLY DEFERRED,
CONSTRAINT \"campData_fk\"
FOREIGN KEY (\"campData\")
REFERENCES \"CampData\" (\"id\")
DEFERRABLE INITIALLY DEFERRED,
CONSTRAINT \"personPrice_fk\"
FOREIGN KEY (\"personPrice\")
REFERENCES \"PersonPrice\" (\"id\")
DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE \"ServiceItem\" (
@ -48,7 +61,24 @@ CREATE TABLE \"ServiceItem\" (
FOREIGN KEY (\"campData\")
REFERENCES \"CampData\" (\"id\")
DEFERRABLE INITIALLY DEFERRED);
CREATE TABLE \"Sale\" (
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
\"sale\" INTEGER NOT NULL,
\"fixed\" INTEGER NOT NULL);
CREATE TABLE \"PersonPrice\" (
\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
\"description\" TEXT NULL,
\"fromAge\" INTEGER NOT NULL,
\"toAge\" INTEGER NOT NULL,
\"price\" INTEGER NOT NULL,
\"active\" INTEGER NOT NULL);
",
"ALTER TABLE Sale ADD \"description\" TEXT NULL;
"
],
"dependencies" : [ "ADDRESSBOOK", "SHOP", "SERVICES" ],
"translations" : {

@ -27,7 +27,12 @@ SOURCES += camp.cpp \
data/addressitem.cpp \
data/serviceitem.cpp \
campgrid.cpp \
campform.cpp
campform.cpp \
data/sale.cpp \
settings/campsettingsform.cpp \
data/personprice.cpp \
settings/campsettings.cpp \
campwizard.cpp
HEADERS += camp.h\
camp_global.h \
@ -36,13 +41,18 @@ HEADERS += camp.h\
data/serviceitem.h \
data/camp-data.h \
campgrid.h \
campform.h
campform.h \
data/sale.h \
settings/campsettingsform.h \
data/personprice.h \
settings/campsettings.h \
campwizard.h
include(../config_plugin.pri)
ODB_FILES = camp/data/camp-data.h
H_DIR = $$PWD/data/*.h
ODB_OTHER_INCLUDES = -I $$PWD/../shop -I $$PWD/../addressbook/data -I $$PWD/../services/data
ODB_OTHER_INCLUDES = -I $$PWD/../shop -I $$PWD/../addressbook/data -I $$PWD/../countryregister/data -I $$PWD/../services/data
include(../odb.pri)
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -lshop
@ -57,8 +67,12 @@ else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -laddre
else:unix: LIBS += -L$$OUT_PWD/../plugins/ -laddressbook
INCLUDEPATH += $$PWD/../addressbook
INCLUDEPATH += $$PWD/../addressbook/data
DEPENDPATH += $$PWD/../addressbook
INCLUDEPATH += $$PWD/../countryregister/data
INCLUDEPATH += $$PWD/../countryregister
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -lservices
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../plugins/ -lservices
else:unix: LIBS += -L$$OUT_PWD/../plugins/ -lservices
@ -74,4 +88,6 @@ RESOURCES += \
camprc.qrc
FORMS += \
campform.ui
campform.ui \
settings/campsettingsform.ui \
campwizard.ui

@ -1,21 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<author/>
<comment/>
<exportmacro/>
<class>CampForm</class>
<widget class="QWidget" name="CampForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<width>462</width>
<height>403</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
</widget>
<pixmapfunction/>
<resources/>
<connections/>
</ui>

@ -1,6 +1,20 @@
#include "campgrid.h"
#include "campwizard.h"
CampGrid::CampGrid(QWidget *parent) : GridForm<CampData>(parent)
{
setTableModel(new AutoTableModel<CampData>);
}
void CampGrid::handleNewRecord()
{
CampWizard *wizard = new CampWizard();
wizard->setAttribute(Qt::WA_DeleteOnClose);
wizard->show();
}
void CampGrid::handleEditRecord()
{
}

@ -9,6 +9,11 @@ class CampGrid : public GridForm<CampData>
{
public:
CampGrid(QWidget *parent = NULL);
// IGridForm interface
protected:
void handleNewRecord();
void handleEditRecord();
};
#endif // CAMPGRID_H

@ -0,0 +1,30 @@
#include "campwizard.h"
#include "ui_campwizard.h"
CampWizard::CampWizard(QWidget *parent) :
QWizard(parent),
ui(new Ui::CampWizard)
{
ui->setupUi(this);
m_dataBinder = new ObjectBinder(this);
m_dataBinder->registerBinding(ui->start);
m_dataBinder->registerBinding(ui->end);
}
CampWizard::~CampWizard()
{
delete ui;
}
void CampWizard::setData(const CampDataPtr &data)
{
m_data = data;
m_dataBinder->setData(data.data());
}
void CampWizard::on_btnAdd_clicked()
{
}

@ -0,0 +1,31 @@
#ifndef CAMPWIZARD_H
#define CAMPWIZARD_H
#include <QWizard>
#include "data/camp-data.h"
#include <objectbinder.h>
namespace Ui {
class CampWizard;
}
class CampWizard : public QWizard
{
Q_OBJECT
public:
explicit CampWizard(QWidget *parent = 0);
~CampWizard();
void setData(const CampDataPtr &data);
private slots:
void on_btnAdd_clicked();
private:
Ui::CampWizard *ui;
CampDataPtr m_data;
ObjectBinder *m_dataBinder;
};
#endif // CAMPWIZARD_H

@ -0,0 +1,721 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CampWizard</class>
<widget class="QWizard" name="CampWizard">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>948</width>
<height>684</height>
</rect>
</property>
<property name="windowTitle">
<string>Camp record</string>
</property>
<property name="windowIcon">
<iconset resource="camprc.qrc">
<normaloff>:/icons/campPlugin.svg</normaloff>:/icons/campPlugin.svg</iconset>
</property>
<property name="wizardStyle">
<enum>QWizard::ClassicStyle</enum>
</property>
<widget class="QWizardPage" name="peoplePage">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>From</string>
</property>
</widget>
</item>
<item>
<widget class="QDateEdit" name="start">
<property name="displayFormat">
<string>d. M. yyyy</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>To</string>
</property>
</widget>
</item>
<item>
<widget class="QDateEdit" name="end">
<property name="displayFormat">
<string>d. M. yyyy</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>People</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QWidget" name="widget_3" native="true">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Existing address</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="btnAdd">
<property name="text">
<string>Add</string>
</property>
<property name="icon">
<iconset resource="../core/rc.qrc">
<normaloff>:/icons/new.svg</normaloff>:/icons/new.svg</iconset>
</property>
</widget>
</item>
<item row="1" column="0" colspan="4">
<widget class="QGroupBox" name="groupNew">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>450</width>
<height>0</height>
</size>
</property>
<property name="title">
<string>New address</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Title</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="title"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>First name</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="firstName"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Last name</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="lastName"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Date of birth</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDateEdit" name="birthDate">
<property name="displayFormat">
<string>d. MM. yyyy</string>
</property>
<property name="calendarPopup">
<bool>true</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>ID card</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="idCardNumber"/>
</item>
<item row="5" column="1">
<widget class="QCheckBox" name="ztp">
<property name="text">
<string>ZTP</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Street</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="addressStreet"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_10">
<property name="text">
<string>House number</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="addressHouseNumber"/>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>ZIP code</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLineEdit" name="addressZipCode"/>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_12">
<property name="text">
<string>City</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="addressCity"/>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_13">
<property name="text">
<string>Country</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QComboBox" name="country">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="1" colspan="3">
<widget class="QComboBox" name="address">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_8" native="true">
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="widget_9" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="btnRemove">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Remove</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../core/rc.qrc">
<normaloff>:/icons/remove.svg</normaloff>:/icons/remove.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnOwner">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Owner</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../core/rc.qrc">
<normaloff>:/icons/ok.svg</normaloff>:/icons/ok.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>24</width>
<height>24</height>
</size>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTableView" name="tablePeople"/>
</item>
</layout>
<zorder>widget_9</zorder>
<zorder>tableView</zorder>
<zorder>tablePeople</zorder>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWizardPage" name="servicePage">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Services</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QTableView" name="tableView_2"/>
</item>
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="toolButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButton_2">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTableView" name="tableView_3"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>Sale</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>Apply sale</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QComboBox" name="sale"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWizardPage" name="finishPage">
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>Summary</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QWidget" name="widget_4" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>From:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_17">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>To:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_5" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_20">
<property name="text">
<string>Days:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_21">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>People:</string>
</property>
</widget>
</item>
<item>
<widget class="QTableView" name="tableView_4"/>
</item>
<item>
<widget class="QLabel" name="label_15">
<property name="text">
<string>Services:</string>
</property>
</widget>
</item>
<item>
<widget class="QTableView" name="tableView_5"/>
</item>
<item>
<widget class="QWidget" name="widget_6" native="true">
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Sale:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_23">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_24">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Total:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_25">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_7" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Print</string>
</property>
<property name="icon">
<iconset resource="../core/rc.qrc">
<normaloff>:/icons/print.svg</normaloff>:/icons/print.svg</iconset>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<tabstops>
<tabstop>start</tabstop>
<tabstop>end</tabstop>
<tabstop>address</tabstop>
<tabstop>groupNew</tabstop>
<tabstop>title</tabstop>
<tabstop>firstName</tabstop>
<tabstop>lastName</tabstop>
<tabstop>birthDate</tabstop>
<tabstop>idCardNumber</tabstop>
<tabstop>ztp</tabstop>
<tabstop>addressStreet</tabstop>
<tabstop>addressHouseNumber</tabstop>
<tabstop>addressZipCode</tabstop>
<tabstop>addressCity</tabstop>
<tabstop>country</tabstop>
<tabstop>btnAdd</tabstop>
<tabstop>btnRemove</tabstop>
<tabstop>btnOwner</tabstop>
<tabstop>tablePeople</tabstop>
<tabstop>toolButton</tabstop>
<tabstop>toolButton_2</tabstop>
<tabstop>tableView_3</tabstop>
<tabstop>tableView_4</tabstop>
<tabstop>tableView_5</tabstop>
<tabstop>pushButton_2</tabstop>
<tabstop>checkBox_2</tabstop>
<tabstop>sale</tabstop>
<tabstop>tableView_2</tabstop>
</tabstops>
<resources>
<include location="../core/rc.qrc"/>
<include location="camprc.qrc"/>
</resources>
<connections/>
</ui>

@ -3,7 +3,8 @@
AddressItem::AddressItem(QObject *parent) : QObject(parent)
{
m_id = 0;
m_price = 0;
}
int AddressItem::id() const
@ -65,3 +66,23 @@ void AddressItem::setCampData(const QWeakPointer<CampData> &campData)
{
m_campData = campData;
}
PersonPricePtr AddressItem::personPrice() const
{
return m_personPrice;
}
void AddressItem::setPersonPrice(const PersonPricePtr &personPrice)
{
m_personPrice = personPrice;
}
AddressbookDataPtr AddressItem::adbItem() const
{
return m_adbItem;
}
void AddressItem::setAdbItem(const AddressbookDataPtr &adbItem)
{
m_adbItem = adbItem;
}

@ -8,6 +8,8 @@
#include <QDecDouble.hh>
#include <odb/core.hxx>
#include <addressbookdata.h>
class CampData;
#pragma db object
@ -40,6 +42,12 @@ public:
QWeakPointer<CampData> campData() const;
void setCampData(const QWeakPointer<CampData> &campData);
PersonPricePtr personPrice() const;
void setPersonPrice(const PersonPricePtr &personPrice);
AddressbookDataPtr adbItem() const;
void setAdbItem(const AddressbookDataPtr &adbItem);
private:
friend class odb::access;
#pragma db id auto
@ -47,9 +55,11 @@ private:
QString m_firstName;
QString m_lastName;
QString m_address;
AddressbookDataPtr m_adbItem;
int m_price;
#pragma db not_null
QWeakPointer<CampData> m_campData;
PersonPricePtr m_personPrice;
};
#endif // ADDRESSITEM_H

@ -6,13 +6,19 @@
class CampData;
class AddressItem;
class ServiceItem;
class Sale;
class PersonPrice;
typedef QSharedPointer<CampData> CampDataPtr;
typedef QSharedPointer<ServiceItem> ServiceItemPtr;
typedef QSharedPointer<AddressItem> AddressItemPtr;
typedef QSharedPointer<Sale> SalePtr;
typedef QSharedPointer<PersonPrice> PersonPricePtr;
#include "campdata.h"
#include "addressitem.h"
#include "serviceitem.h"
#include "sale.h"
#include "personprice.h"
#endif // CAMP_DATA_H

@ -3,7 +3,10 @@
CampData::CampData(QObject *parent) : QObject(parent)
{
m_id = 0;
m_totalPrice = 0;
m_sale = 0;
m_ownerFirstame = false;
}
int CampData::id() const
@ -115,3 +118,33 @@ void CampData::setSeason(const SeasonPtr &season)
{
m_season = season;
}
QDecDouble CampData::sale() const
{
return TO_DEC(m_sale);
}
void CampData::setSale(QDecDouble sale)
{
m_sale = FROM_DEC(sale);
}
bool CampData::fixedSale() const
{
return m_fixedSale;
}
void CampData::setFixedSale(bool fixedSale)
{
m_fixedSale = fixedSale;
}
QString CampData::numSer() const
{
return m_numSer;
}
void CampData::setNumSer(const QString &numSer)
{
m_numSer = numSer;
}

@ -14,12 +14,15 @@
class CampData : public QObject
{
Q_OBJECT
Q_PROPERTY(QString numSer READ numSer WRITE setNumSer)
Q_PROPERTY(QDate start READ start WRITE setStart)
Q_PROPERTY(QDate end READ end WRITE setEnd)
Q_PROPERTY(QString ownerFirstame READ ownerFirstame WRITE setOwnerFirstame)
Q_PROPERTY(QString ownerLastname READ ownerLastname WRITE setOwnerLastname)
Q_PROPERTY(QString ownerAddress READ ownerAddress WRITE setOwnerAddress)
Q_PROPERTY(QDecDouble totalPrice READ totalPrice WRITE setTotalPrice)
Q_PROPERTY(QDecDouble sale READ sale WRITE setSale)
Q_PROPERTY(bool fixedSale READ fixedSale WRITE setFixedSale)
public:
explicit CampData(QObject *parent = 0);
@ -56,10 +59,20 @@ public:
SeasonPtr season() const;
void setSeason(const SeasonPtr &season);
QDecDouble sale() const;
void setSale(QDecDouble sale);
bool fixedSale() const;
void setFixedSale(bool fixedSale);
QString numSer() const;
void setNumSer(const QString &numSer);
private:
friend class odb::access;
#pragma db id auto
int m_id;
QString m_numSer;
QDate m_start;
QDate m_end;
QString m_ownerFirstame;
@ -70,6 +83,8 @@ private:
#pragma db value_not_null inverse(m_campData)
QOdbList<AddressItemPtr> m_people;
int m_totalPrice;
int m_sale;
bool m_fixedSale;
SeasonPtr m_season;
};

@ -0,0 +1,71 @@
#include "personprice.h"
#include <define.h>
PersonPrice::PersonPrice(QObject *parent) : QObject(parent)
{
m_id = 0;
m_fromAge = 0;
m_toAge = 0;
m_price = 0;
m_active = true;
}
int PersonPrice::id() const
{
return m_id;
}
void PersonPrice::setId(int id)
{
m_id = id;
}
QString PersonPrice::description() const
{
return m_description;
}
void PersonPrice::setDescription(const QString &description)
{
m_description = description;
}
int PersonPrice::fromAge() const
{
return m_fromAge;
}
void PersonPrice::setFromAge(int fromAge)
{
m_fromAge = fromAge;
}
int PersonPrice::toAge() const
{
return m_toAge;
}
void PersonPrice::setToAge(int toAge)
{
m_toAge = toAge;
}
QDecDouble PersonPrice::price() const
{
return TO_DEC(m_price);
}
void PersonPrice::setPrice(QDecDouble price)
{
m_price = FROM_DEC(price);
}
bool PersonPrice::active() const
{
return m_active;
}
void PersonPrice::setActive(bool active)
{
m_active = active;
}

@ -0,0 +1,50 @@
#ifndef PERSONPRICE_H
#define PERSONPRICE_H
#include <QObject>
#include <QDecDouble.hh>
#include <odb/core.hxx>
#pragma db object
class PersonPrice : public QObject
{
Q_OBJECT
Q_PROPERTY(QString description READ description WRITE setDescription)
Q_PROPERTY(int fromAge READ fromAge WRITE setFromAge)
Q_PROPERTY(int toAge READ toAge WRITE setToAge)
Q_PROPERTY(QDecDouble price READ price WRITE setPrice)
Q_PROPERTY(bool active READ active WRITE setActive)
public:
explicit PersonPrice(QObject *parent = 0);
int id() const;
void setId(int id);
QString description() const;
void setDescription(const QString &description);
int fromAge() const;
void setFromAge(int fromAge);
int toAge() const;
void setToAge(int toAge);
QDecDouble price() const;
void setPrice(QDecDouble price);
bool active() const;
void setActive(bool active);
private:
friend class odb::access;
#pragma db id auto
int m_id;
QString m_description;
int m_fromAge;
int m_toAge;
int m_price;
bool m_active;
};
#endif // PERSONPRICE_H

@ -0,0 +1,49 @@
#include "sale.h"
#include <define.h>
Sale::Sale(QObject *parent) : QObject(parent)
{
m_id = 0;
m_sale = 0;
m_fixed = false;
}
int Sale::id() const
{
return m_id;
}
void Sale::setId(int id)
{
m_id = id;
}
QDecDouble Sale::sale() const
{
return TO_DEC(m_sale);
}
void Sale::setSale(QDecDouble sale)
{
m_sale = FROM_DEC(sale);
}
bool Sale::fixed() const
{
return m_fixed;
}
void Sale::setFixed(bool fixed)
{
m_fixed = fixed;
}
QString Sale::description() const
{
return m_description;
}
void Sale::setDescription(const QString &description)
{
m_description = description;
}

@ -0,0 +1,40 @@
#ifndef SALE_H
#define SALE_H
#include <QObject>
#include <odb/core.hxx>
#include <QDecDouble.hh>
#pragma db object
class Sale : public QObject
{
Q_OBJECT
Q_PROPERTY(QString description READ description WRITE setDescription)
Q_PROPERTY(QDecDouble sale READ sale WRITE setSale)
Q_PROPERTY(bool fixed READ fixed WRITE setFixed)
public:
explicit Sale(QObject *parent = 0);
int id() const;
void setId(int id);
QDecDouble sale() const;
void setSale(QDecDouble sale);
bool fixed() const;
void setFixed(bool fixed);
QString description() const;
void setDescription(const QString &description);
private:
friend class odb::access;
#pragma db id auto
int m_id;
QString m_description;
int m_sale;
bool m_fixed;
};
#endif // SALE_H

@ -3,7 +3,10 @@
ServiceItem::ServiceItem(QObject *parent) : QObject(parent)
{
m_id = 0;
m_salePossible = false;
m_price = 0;
m_type = AccService::OTHER;
}
int ServiceItem::id() const

@ -0,0 +1,40 @@
#include "campsettings.h"
#include <define.h>
#include <QDebug>
CampSettings::CampSettings(QObject *parent) : QObject(parent)
{
m_accFee = 0;
m_rounding = Enums::R_MATH;
m_decimalPlaces = 0;
}
QDecDouble CampSettings::accFee() const
{
return TO_DEC(m_accFee);
}
void CampSettings::setAccFee(QDecDouble accFee)
{
m_accFee = FROM_DEC(accFee);
}
Enums::Rounding CampSettings::rounding() const
{
return m_rounding;
}
void CampSettings::setRounding(const Enums::Rounding &rounding)
{
m_rounding = rounding;
}
int CampSettings::decimalPlaces() const
{
return m_decimalPlaces;
}
void CampSettings::setDecimalPlaces(int decimalPlaces)
{
m_decimalPlaces = decimalPlaces;
}

@ -0,0 +1,36 @@
#ifndef CAMPSETTINGS_H
#define CAMPSETTINGS_H
#include <QObject>
#include <enums.h>
#include <QDecDouble.hh>
#include <QSharedPointer>
class CampSettings : public QObject
{
Q_OBJECT
Q_PROPERTY(QDecDouble accFee READ accFee WRITE setAccFee)
Q_PROPERTY(Enums::Rounding rounding READ rounding WRITE setRounding)
Q_PROPERTY(int decimalPlaces READ decimalPlaces WRITE setDecimalPlaces)
public:
explicit CampSettings(QObject *parent = 0);
QDecDouble accFee() const;
void setAccFee(QDecDouble accFee);
Enums::Rounding rounding() const;
void setRounding(const Enums::Rounding &rounding);
int decimalPlaces() const;
void setDecimalPlaces(int decimalPlaces);
private:
int m_accFee;
Enums::Rounding m_rounding;
int m_decimalPlaces;
};
typedef QSharedPointer<CampSettings> CampSettingsPtr;
#endif // CAMPSETTINGS_H

@ -0,0 +1,172 @@
#include "camp-odb.hxx"
#include "campsettingsform.h"
#include "ui_campsettingsform.h"
#include <settingsservice.h>
#include <QScroller>
#include <QMessageBox>
CampSettingsForm::CampSettingsForm(QWidget *parent) :
FormBinder<CampSettings>(parent),
ui(new Ui::CampSettingsForm)
{
ui->setupUi(this);
m_personPriceModel = new AutoTableModel<PersonPrice>();
m_personPriceModel->setEditableCols(QList<int>() << 0 << 1 << 2 << 3);
m_saleModel = new AutoTableModel<Sale>();
m_saleModel->setEditableCols(QList<int>() << 0 << 1 << 2);
ui->tablePersonPrices->setModel(m_personPriceModel);
ui->tableSales->setModel(m_saleModel);
ui->tablePersonPrices->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->tableSales->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
QScroller::grabGesture(ui->tablePersonPrices, QScroller::LeftMouseButtonGesture);
QScroller::grabGesture(ui->tableSales, QScroller::LeftMouseButtonGesture);
connect(ui->tablePersonPrices->selectionModel(), &QItemSelectionModel::currentRowChanged, [this](){
ui->btnPriceDisable->setEnabled(ui->tablePersonPrices->currentIndex().isValid());
ui->btnPriceRemove->setEnabled(ui->tablePersonPrices->currentIndex().isValid());
ui->btnPriceDisable->setChecked(m_personPriceModel->itemFromIndex(ui->tablePersonPrices->currentIndex())->active());
});
connect(ui->tableSales->selectionModel(), &QItemSelectionModel::currentRowChanged, [this](){
ui->btnSaleRemove->setEnabled(ui->tableSales->currentIndex().isValid());
});
registerBinding(ui->accFee);
registerBinding(ui->decimalPlaces);
QList<ComboData> roundings ;
roundings << ComboData(Enums::R_NONE, tr("None"))
<< ComboData(Enums::R_UP, tr("Up"))
<< ComboData(Enums::R_DOWN, tr("Down"))
<< ComboData(Enums::R_MATH, tr("Mathematic"));
registerBinding(ui->rounding, roundings);
}
CampSettingsForm::~CampSettingsForm()
{
delete ui;
}
bool CampSettingsForm::saveRecord()
{
bindToData();
SettingsService srv("CAMP");
srv.saveSettings(entity());
Service<PersonPrice> personSrv;
Service<Sale> saleSrv;
bool ret = true;
connect(&personSrv, &IService::dbErrorDelete, [&ret, this](QString){
QMessageBox::critical(this, tr("Cannot delete"), tr("Price already used"));
ret = false;
});
foreach (PersonPricePtr p, personSrv.all()) {
bool found = false;
foreach (PersonPricePtr price, m_personPriceModel->list()) {
if (price->id() == p->id())
{
found = true;
break;
}
}
if (!found)
{
personSrv.erase(p);
}
}
foreach (PersonPricePtr p, m_personPriceModel->list()) {
bool found = false;
foreach (PersonPricePtr price, personSrv.all()) {
if (price->id() == p->id())
{
found = true;
break;
}
}
if (!found)
{
personSrv.save(p);
}
else
{
personSrv.update(p);
}
}
foreach (SalePtr s, saleSrv.all()) {
saleSrv.erase(s);
}
foreach (SalePtr s, m_saleModel->list()) {
saleSrv.save(s);
}
return ret;
}
void CampSettingsForm::loadEntity()
{
SettingsService srv("CAMP");
CampSettingsPtr settings = srv.loadSettings<CampSettings>();
setEntity(settings);
Service<PersonPrice> personSrv;
Service<Sale> saleSrv;
m_personPriceModel->setData(personSrv.all());
m_saleModel->setData(saleSrv.all());
ui->btnPriceDisable->setEnabled(false);
ui->btnPriceRemove->setEnabled(false);
ui->btnSaleRemove->setEnabled(false);
}
void CampSettingsForm::on_btnPriceAdd_clicked()
{
PersonPricePtr price(new PersonPrice());
m_personPriceModel->addRow(price);
}
void CampSettingsForm::on_btnSaleAdd_clicked()
{
SalePtr sale(new Sale());
m_saleModel->addRow(sale);
}
void CampSettingsForm::on_btnPriceRemove_clicked()
{
m_personPriceModel->removeRowAt(ui->tablePersonPrices->currentIndex());
}
void CampSettingsForm::on_btnPriceDisable_clicked()
{
PersonPricePtr price = m_personPriceModel->itemFromIndex(ui->tablePersonPrices->currentIndex());
price->setActive(!price->active());
}
void CampSettingsForm::on_btnPriceFilter_clicked()
{
Service<PersonPrice> srv;
if (ui->btnPriceFilter->isChecked())
{
m_personPriceModel->setData(srv.all("active = 1"));
}
else
{
m_personPriceModel->setData(srv.all());
}
}
void CampSettingsForm::on_btnSaleRemove_clicked()
{
m_saleModel->removeRowAt(ui->tableSales->currentIndex());
}

@ -0,0 +1,51 @@
#ifndef CAMPSETTINGSFORM_H
#define CAMPSETTINGSFORM_H
#include <QWidget>
#include <QList>
#include "campsettings.h"
#include "data/camp-data.h"
#include <formbinder.h>
#include <autotablemodel.h>
namespace Ui {
class CampSettingsForm;
}
class CampSettingsForm : public FormBinder<CampSettings>
{
Q_OBJECT
public:
explicit CampSettingsForm(QWidget *parent = 0);
~CampSettingsForm();
// IForm interface
public slots:
bool saveRecord();
// IForm interface
public:
void loadEntity();
private slots:
void on_btnPriceAdd_clicked();
void on_btnSaleAdd_clicked();
void on_btnPriceRemove_clicked();
void on_btnPriceDisable_clicked();
void on_btnPriceFilter_clicked();
void on_btnSaleRemove_clicked();
private:
Ui::CampSettingsForm *ui;
AutoTableModel<PersonPrice> *m_personPriceModel;
AutoTableModel<Sale> *m_saleModel;
};
#endif // CAMPSETTINGSFORM_H

@ -0,0 +1,282 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CampSettingsForm</class>
<widget class="QWidget" name="CampSettingsForm">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>696</width>
<height>489</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Person prices</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QToolButton" name="btnPriceAdd">
<property name="toolTip">
<string>Add</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../core/rc.qrc">
<normaloff>:/icons/new.svg</normaloff>:/icons/new.svg</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnPriceRemove">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Remove</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../core/rc.qrc">
<normaloff>:/icons/remove.svg</normaloff>:/icons/remove.svg</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnPriceDisable">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Deactivate</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../core/rc.qrc">
<normaloff>:/icons/ok.svg</normaloff>:/icons/ok.svg</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnPriceFilter">
<property name="toolTip">
<string>Filter active</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../core/rc.qrc">
<normaloff>:/icons/filter.svg</normaloff>:/icons/filter.svg</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTableView" name="tablePersonPrices"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Sales</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QToolButton" name="btnSaleAdd">
<property name="toolTip">
<string>Add</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../core/rc.qrc">
<normaloff>:/icons/new.svg</normaloff>:/icons/new.svg</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btnSaleRemove">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Remove</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../core/rc.qrc">
<normaloff>:/icons/remove.svg</normaloff>:/icons/remove.svg</iconset>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QTableView" name="tableSales"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Other settings</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Accommodation fee</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Rounding</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="rounding"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="decimalPlaceslab">
<property name="text">
<string>Decimal places</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDoubleSpinBox" name="decimalPlaces">
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="decimals">
<number>0</number>
</property>
<property name="maximum">
<double>100000.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="accFee">
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<double>99999.990000000005239</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="../../core/rc.qrc"/>
</resources>
<connections/>
</ui>

@ -6,6 +6,7 @@
#include <QMetaProperty>
#include <QModelIndex>
#include <QDebug>
#include <QDecDouble.hh>
#include "../qdecimal/src/QDecDouble.hh"
@ -264,7 +265,14 @@ public:
QSharedPointer<T> entity = m_list.at(index.row());
QObject *rawEntity = (QObject*)entity.data();
rawEntity->setProperty(rawEntity->metaObject()->property(index.column() + 1).name(), value);
QVariant val = value;
if (rawEntity->property(rawEntity->metaObject()->property(index.column() + 1).name()).canConvert<QDecDouble>())
{
QDecDouble dec(val.toDouble());
val = QVariant::fromValue(dec);
}
rawEntity->setProperty(rawEntity->metaObject()->property(index.column() + 1).name(), val);
}
if (role == Qt::CheckStateRole)

@ -63,7 +63,9 @@ SOURCES += \
reporting/report.cpp \
reporting/reportviewer.cpp \
reporting/reportdialog.cpp \
csvimporter.cpp
csvimporter.cpp \
importdialog.cpp \
importprogress.cpp
HEADERS += core.h\
core_global.h \
@ -126,7 +128,9 @@ HEADERS += core.h\
reporting/reportdialog.h \
iimporter.h \
csvimporter.h \
iimportprogress.h
iimportprogress.h \
importdialog.h \
importprogress.h
unix {
target.path = /usr/lib
@ -161,7 +165,9 @@ FORMS += \
settings/globalsettingsform.ui \
settings/seasonnamedialog.ui \
reporting/reportviewer.ui \
reporting/reportdialog.ui
reporting/reportdialog.ui \
importdialog.ui \
importprogress.ui
OTHER_FILES += \
users/metaData.json \

@ -9,6 +9,7 @@ class CORESHARED_EXPORT Enums : public QObject
Q_OBJECT
Q_ENUMS(VatType)
Q_ENUMS(Rounding)
public:
enum VatType
@ -19,6 +20,14 @@ public:
SECOND_LOWER
};
enum Rounding
{
R_NONE,
R_UP,
R_DOWN,
R_MATH
};
Enums()
{
}

@ -5,6 +5,8 @@
#include <QMessageBox>
#include <QHeaderView>
#include <QLayout>
#include <QToolButton>
#include <QDesktopWidget>
#include "autoform.h"
#include "autotablemodel.h"
@ -12,6 +14,9 @@
#include "iplugin.h"
#include "igridform.h"
#include "iservice.h"
#include "importdialog.h"
#include "csvimporter.h"
#include "importprogress.h"
template<class T>
class GridForm : public IGridForm
@ -164,9 +169,11 @@ private:
bool m_serviceConnected;
bool m_permissionDenied;
private slots:
// IGridForm interface
protected:
void handleNewRecord() override
virtual void handleNewRecord() override
{
if (m_form == NULL)
{
@ -179,7 +186,7 @@ protected:
m_formHandler->showForm(m_form);
}
void handleEditRecord() override
virtual void handleEditRecord() override
{
if (m_form == NULL || m_tableModel == NULL || tableView()->currentIndex().row() < 0)
{
@ -216,6 +223,42 @@ protected:
}
}
}
void showImportButton()
{
QHBoxLayout *tbLayout = qobject_cast<QHBoxLayout*>(this->toolbar()->layout());
if (tbLayout != NULL)
{
QToolButton *btnImport = new QToolButton(this->toolbar());
btnImport->setIcon(QIcon(":/icons/import.svg"));
btnImport->setAutoRaise(true);
btnImport->setIconSize(QSize(24, 24));
btnImport->setToolTip(tr("Import"));
tbLayout->insertWidget(tbLayout->count() - 1, btnImport);
connect(btnImport, &QToolButton::clicked, [this](){
ImportDialog *dlg = new ImportDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();
connect(dlg, &QDialog::accepted, [this, dlg](){
T dataObj;
CsvImporter importer(dataObj.metaObject());
importer.setImportFile(dlg->fileName());
importer.setSeparator(dlg->separator());
ImportProgress *progress = new ImportProgress();
progress->move(QApplication::desktop()->screen()->rect().center() - progress->rect().center());
progress->setWindowModality(Qt::ApplicationModal);
progress->show();
service()->importData(&importer, progress);
});
});
}
}
};
#endif // GRIDFORM_H

Before

Width:  |  Height:  |  Size: 820 B

After

Width:  |  Height:  |  Size: 820 B

@ -0,0 +1,36 @@
#include "importdialog.h"
#include "ui_importdialog.h"
#include "importprogress.h"
#include "csvimporter.h"
#include <QFileDialog>
#include <QApplication>
#include <QDesktopWidget>
ImportDialog::ImportDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ImportDialog)
{
ui->setupUi(this);
}
ImportDialog::~ImportDialog()
{
delete ui;
}
QString ImportDialog::fileName()
{
return ui->editFile->text();
}
QString ImportDialog::separator()
{
return ui->editSeparator->text();
}
void ImportDialog::on_btnFile_clicked()
{
QString file = QFileDialog::getOpenFileName(this, tr("Import file"), "", tr("All Files (*.*)"));
ui->editFile->setText(file);
}

@ -2,6 +2,8 @@
#define IMPORTDIALOG_H
#include <QDialog>
#include <QMetaObject>
#include "iservice.h"
namespace Ui {
class ImportDialog;
@ -15,9 +17,10 @@ public:
explicit ImportDialog(QWidget *parent = 0);
~ImportDialog();
private slots:
void on_buttonBox_accepted();
QString fileName();
QString separator();
private slots:
void on_btnFile_clicked();
private:

@ -6,33 +6,44 @@
<rect>
<x>0</x>
<y>0</y>
<width>518</width>
<height>152</height>
<width>454</width>
<height>115</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
<string>Import data</string>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="horizontalSpacing">
<number>10</number>
</property>
<property name="verticalSpacing">
<number>10</number>
</property>
<item row="1" column="0">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>CSV file</string>
<string>File</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Separator</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="editSeparator"/>
</item>
<item row="2" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>3</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
@ -58,30 +69,6 @@
</layout>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Field separator</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="editSparator">
<property name="text">
<string>;</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>

@ -0,0 +1,34 @@
#include "importprogress.h"
#include "ui_importprogress.h"
ImportProgress::ImportProgress(QWidget *parent) :
QWidget(parent),
ui(new Ui::ImportProgress)
{
ui->setupUi(this);
ui->progressBar->setRange(0, 100);
ui->progressBar->setValue(0);
m_terminate = false;
}
ImportProgress::~ImportProgress()
{
delete ui;
}
void ImportProgress::on_btnCancel_clicked()
{
m_terminate = true;
this->close();
}
void ImportProgress::updateProgress(int currentPos)
{
ui->progressBar->setValue(currentPos);
}
bool ImportProgress::terminate()
{
return m_terminate;
}

@ -0,0 +1,32 @@
#ifndef IMPORTPROGRESS_H
#define IMPORTPROGRESS_H
#include <QWidget>
#include "iimportprogress.h"
namespace Ui {
class ImportProgress;
}
class ImportProgress : public QWidget, public IImportProgress
{
Q_OBJECT
public:
explicit ImportProgress(QWidget *parent = 0);
~ImportProgress();
private slots:
void on_btnCancel_clicked();
private:
Ui::ImportProgress *ui;
bool m_terminate;
// IImportProgress interface
public:
void updateProgress(int currentPos);
bool terminate();
};
#endif // IMPORTPROGRESS_H

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ImportProgressForm</class>
<widget class="QWidget" name="ImportProgressForm">
<class>ImportProgress</class>
<widget class="QWidget" name="ImportProgress">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>369</width>
<height>134</height>
<width>400</width>
<height>165</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
<string>Import progress</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@ -24,7 +24,7 @@
<item>
<widget class="QPushButton" name="btnCancel">
<property name="text">
<string>Cancel</string>
<string>Cenacel</string>
</property>
</widget>
</item>

@ -24,5 +24,6 @@
<file>icons/zoomIn.svg</file>
<file>icons/zoomOut.svg</file>
<file>icons/report.svg</file>
<file>icons/import.svg</file>
</qresource>
</RCC>

@ -8,6 +8,7 @@
#include <QMetaProperty>
#include <QDecDouble.hh>
#include <QDebug>
#include "data/system.h"
#include "service.h"
@ -50,8 +51,19 @@ public:
{
QDecDouble dec(TO_DEC(varVal.toInt()));
varVal = QVariant::fromValue(dec);
objSettings->setProperty(propName, varVal);
continue;
}
// all other numbers are int
if (varVal.toInt() > 0)
{
objSettings->setProperty(propName, varVal.toInt());
}
else
{
objSettings->setProperty(propName, varVal);
}
objSettings->setProperty(propName, varVal);
}
return settingsObj;

@ -4,6 +4,7 @@
CountryRegisterGrid::CountryRegisterGrid(QWidget *parent) : GridForm<CountryData>(parent)
{
setTableModel(new AutoTableModel<CountryData>());
showImportButton();
}
bool CountryRegisterGrid::canAddRecord()

@ -1,6 +1,6 @@
#include "countrydata.h"
CountryData::CountryData(QObject *parent) : QObject(parent)
CountryData::CountryData(QObject *parent) : ComboItem(parent)
{
}
@ -74,3 +74,20 @@ void CountryData::setEnglishName(const QString &englishName)
{
m_englishName = englishName;
}
bool CountryData::eq(ComboItem *other)
{
CountryData *obj = qobject_cast<CountryData*>(other);
if (obj == NULL)
{
return false;
}
return this == obj || (m_id == obj->m_id && m_code2 == obj->m_code2 && m_code3 == obj->m_code3);
}
QString CountryData::toString()
{
return m_code3 + " - " + m_czechFullName;
}

@ -4,9 +4,11 @@
#include <QString>
#include <QObject>
#include <odb/core.hxx>
#include <QSharedPointer>
#include <data/comboitem.h>
#pragma db object
class CountryData : public QObject
class CountryData : public ComboItem
{
Q_OBJECT
Q_PROPERTY(QString code2 READ code2 WRITE setCode2)
@ -50,6 +52,13 @@ private:
QString m_englishFullName;
QString m_englishName;
// ComboItem interface
public:
bool eq(ComboItem *other);
QString toString();
};
typedef QSharedPointer<CountryData> CountryDataPtr;
#endif // COUNTRYDATA_H

@ -1,46 +0,0 @@
#include "importdialog.h"
#include "ui_importdialog.h"
#include <service.h>
#include <csvimporter.h>
#include <QDesktopWidget>
#include <QFileDialog>
#include "data/postdata.h"
#include "postregister-odb.hxx"
#include "importprogressform.h"
ImportDialog::ImportDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ImportDialog)
{
ui->setupUi(this);
}
ImportDialog::~ImportDialog()
{
delete ui;
}
void ImportDialog::on_buttonBox_accepted()
{
QString fileName = ui->editFile->text();
Service<PostData> service;
PostData pd;
CsvImporter importer(pd.metaObject());
importer.setImportFile(fileName);
importer.setSeparator(ui->editSparator->text());
ImportProgressForm *progress = new ImportProgressForm();
progress->move(QApplication::desktop()->screen()->rect().center() - progress->rect().center());
progress->setWindowModality(Qt::ApplicationModal);
progress->show();
service.importData(&importer, progress);
}
void ImportDialog::on_btnFile_clicked()
{
QString file = QFileDialog::getOpenFileName(this, tr("Import file"), "", tr("All Files (*.*)"));
ui->editFile->setText(file);
}

@ -1,34 +0,0 @@
#include "importprogressform.h"
#include "ui_importprogressform.h"
ImportProgressForm::ImportProgressForm(QWidget *parent) :
QWidget(parent),
ui(new Ui::ImportProgressForm)
{
ui->setupUi(this);
ui->progressBar->setRange(0, 100);
ui->progressBar->setValue(0);
m_terminate = false;
}
ImportProgressForm::~ImportProgressForm()
{
delete ui;
}
void ImportProgressForm::on_btnCancel_clicked()
{
m_terminate = true;
this->close();
}
void ImportProgressForm::updateProgress(int currentPos)
{
ui->progressBar->setValue(currentPos);
}
bool ImportProgressForm::terminate()
{
return m_terminate;
}

@ -1,32 +0,0 @@
#ifndef IMPORTPROGRESSFORM_H
#define IMPORTPROGRESSFORM_H
#include <QWidget>
#include <iimportprogress.h>
namespace Ui {
class ImportProgressForm;
}
class ImportProgressForm : public QWidget, public IImportProgress
{
Q_OBJECT
public:
explicit ImportProgressForm(QWidget *parent = 0);
~ImportProgressForm();
private slots:
void on_btnCancel_clicked();
private:
Ui::ImportProgressForm *ui;
bool m_terminate;
// IImportProgress interface
public:
void updateProgress(int currentPos);
bool terminate();
};
#endif // IMPORTPROGRESSFORM_H

@ -24,16 +24,12 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += postregister.cpp \
data/postdata.cpp \
postregistergrid.cpp \
importdialog.cpp \
importprogressform.cpp
postregistergrid.cpp
HEADERS += postregister.h\
postregister_global.h \
data/postdata.h \
postregistergrid.h \
importdialog.h \
importprogressform.h
postregistergrid.h
include(../config_plugin.pri)
@ -44,9 +40,6 @@ include(../odb.pri)
DISTFILES += \
postregister.json
FORMS += \
importdialog.ui \
importprogressform.ui
FORMS +=
RESOURCES += \
postregisterrc.qrc
RESOURCES +=

@ -3,30 +3,12 @@
#include <QToolButton>
#include "postregister-odb.hxx"
#include "importdialog.h"
PostRegisterGrid::PostRegisterGrid(QWidget *parent)
:GridForm<PostData>(parent)
{
setTableModel(new AutoTableModel<PostData>());
QHBoxLayout *tbLayout = qobject_cast<QHBoxLayout*>(this->toolbar()->layout());
if (tbLayout != NULL)
{
QToolButton *btnImport = new QToolButton(this->toolbar());
btnImport->setIcon(QIcon(":/icons/import.svg"));
btnImport->setAutoRaise(true);
btnImport->setIconSize(QSize(24, 24));
btnImport->setToolTip(tr("Import"));
tbLayout->insertWidget(tbLayout->count() - 1, btnImport);
connect(btnImport, &QToolButton::clicked, [this](){
ImportDialog *dlg = new ImportDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose);
dlg->show();
});
}
showImportButton();
}
bool PostRegisterGrid::canAddRecord()

@ -1,5 +0,0 @@
<RCC>
<qresource prefix="/">
<file>icons/import.svg</file>
</qresource>
</RCC>

@ -28,7 +28,10 @@ QDecDouble& QDecDouble::fromDouble(double d)
#if defined(_MSC_VER)
_snprintf(str, MaxStrSize, "%.*g", QDecNumDigits, d);
#else
char *curLoc = setlocale(LC_NUMERIC, NULL);
setlocale(LC_NUMERIC, "C");
snprintf(str, MaxStrSize, "%.*g", QDecNumDigits, d);
setlocale(LC_NUMERIC, curLoc);
#endif
return fromString(str);

@ -63,7 +63,7 @@ OTHER_FILES += shop.json
ODB_FILES = shop/data/shop-data.h
H_DIR = $$PWD/data/*.h
ODB_OTHER_INCLUDES = -I $$PWD/../addressbook/data -I $$PWD/
ODB_OTHER_INCLUDES = -I $$PWD/../addressbook/data -I $$PWD/../countryregister/data -I $$PWD/
include(../odb.pri)
RESOURCES += \
@ -89,6 +89,9 @@ INCLUDEPATH += $$PWD/../addressbook
INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/../addressbook
INCLUDEPATH += $$PWD/../countryregister/data
INCLUDEPATH += $$PWD/../countryregister
TRANSLATIONS = translations/shop_cs_CZ.ts
win32 {

Loading…
Cancel
Save