Added settings for Camp module. Changed Camp data model.

This commit is contained in:
2017-05-07 23:41:36 +02:00
parent 87ec7098ff
commit 4c00364698
20 changed files with 898 additions and 7 deletions
+40
View File
@@ -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;
}
+36
View File
@@ -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
+137
View File
@@ -0,0 +1,137 @@
#include "camp-odb.hxx"
#include "campsettingsform.h"
#include "ui_campsettingsform.h"
#include <settingsservice.h>
#include <QScroller>
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;
foreach (PersonPricePtr p, personSrv.all()) {
personSrv.erase(p);
}
foreach (PersonPricePtr p, m_personPriceModel->list()) {
personSrv.save(p);
}
foreach (SalePtr s, saleSrv.all()) {
saleSrv.erase(s);
}
foreach (SalePtr s, m_saleModel->list()) {
saleSrv.save(s);
}
return true;
}
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());
}
+51
View File
@@ -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
+282
View File
@@ -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>