Implemented camp wizard and service methods for camp calculation.
This commit is contained in:
@@ -1,9 +1,16 @@
|
||||
#include "campwizard.h"
|
||||
#include "ui_campwizard.h"
|
||||
#include "campservice.h"
|
||||
#include "addservicedialog.h"
|
||||
|
||||
#include <core.h>
|
||||
#include <addressbookservice.h>
|
||||
#include <accservice.h>
|
||||
|
||||
////////////////////////////////////
|
||||
/// \brief AddressHelper::AddressHelper
|
||||
/// \param parent
|
||||
///
|
||||
AddressHelper::AddressHelper(QObject *parent)
|
||||
:QObject(parent)
|
||||
{
|
||||
@@ -51,6 +58,39 @@ AddressbookDataPtr AddressHelper::copyAddress()
|
||||
return m_copyAddress;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
/// \brief SaleHelper::SaleHelper
|
||||
/// \param parent
|
||||
///
|
||||
SaleHelper::SaleHelper(QObject *parent) :QObject(parent)
|
||||
{
|
||||
m_sale = SalePtr(new Sale);
|
||||
}
|
||||
|
||||
SalePtr SaleHelper::salePtr() const
|
||||
{
|
||||
return m_sale;
|
||||
}
|
||||
|
||||
void SaleHelper::setSalePtr(const SalePtr &sale)
|
||||
{
|
||||
m_sale = sale;
|
||||
}
|
||||
|
||||
QSharedPointer<QObject> SaleHelper::sale() const
|
||||
{
|
||||
return m_sale;
|
||||
}
|
||||
|
||||
void SaleHelper::setSale(const QSharedPointer<QObject> &sale)
|
||||
{
|
||||
if (qobject_cast<Sale*>(sale.data()) != NULL)
|
||||
{
|
||||
m_sale = qSharedPointerDynamicCast<Sale, QObject>(sale);
|
||||
emit saleChanged();
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
/// \brief CampWizard::CampWizard
|
||||
/// \param parent
|
||||
@@ -76,6 +116,8 @@ CampWizard::CampWizard(QWidget *parent) :
|
||||
m_dataBinder = new ObjectBinder(this);
|
||||
m_dataBinder->registerBinding(ui->start);
|
||||
m_dataBinder->registerBinding(ui->end);
|
||||
m_dataBinder->registerBinding(ui->totalPrice);
|
||||
m_dataBinder->registerBinding(ui->totalSale);
|
||||
|
||||
m_addrHelper = new AddressHelper(this);
|
||||
|
||||
@@ -103,6 +145,47 @@ CampWizard::CampWizard(QWidget *parent) :
|
||||
m_addressBinder->bindToUi();
|
||||
|
||||
m_bindAddrCombo = true;
|
||||
|
||||
Service<AccService> serviceSrv;
|
||||
m_servicesModel = new AutoTableModel<AccService>(this);
|
||||
m_servicesModel->setData(serviceSrv.all());
|
||||
ui->tableServices->setModel(m_servicesModel);
|
||||
|
||||
ui->tableServices->hideColumn(1);
|
||||
ui->tableServices->hideColumn(3);
|
||||
ui->tableServices->hideColumn(4);
|
||||
ui->tableServices->hideColumn(5);
|
||||
ui->tableServices->hideColumn(6);
|
||||
|
||||
ui->tableServices->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
|
||||
|
||||
m_itemsModel = new AutoTableModel<ServiceItem>();
|
||||
ui->tableItems->setModel(m_itemsModel);
|
||||
|
||||
ui->tableItems->hideColumn(1);
|
||||
ui->tableItems->hideColumn(4);
|
||||
ui->tableItems->hideColumn(5);
|
||||
ui->tableItems->hideColumn(6);
|
||||
|
||||
ui->tableItems->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
|
||||
|
||||
connect(ui->tableServices->selectionModel(), &QItemSelectionModel::currentRowChanged, [this](QModelIndex current, QModelIndex){
|
||||
ui->btnAddService->setEnabled(current.isValid());
|
||||
});
|
||||
|
||||
connect(ui->tableItems->selectionModel(), &QItemSelectionModel::currentRowChanged, [this](QModelIndex, QModelIndex){
|
||||
ui->btnRemoveService->setEnabled(!m_data->services().isEmpty());
|
||||
});
|
||||
|
||||
m_saleHelper = new SaleHelper(this);
|
||||
m_saleBinder = new ObjectBinder(this);
|
||||
Service<Sale> saleSrv;
|
||||
m_saleBinder->registerBinding(ui->sale, ComboData::createComboData(saleSrv.all()));
|
||||
m_saleBinder->setData(m_saleHelper);
|
||||
m_saleBinder->bindToUi();
|
||||
|
||||
ui->tabPeople->setModel(m_peopleModel);
|
||||
ui->tabServices->setModel(m_itemsModel);
|
||||
}
|
||||
|
||||
CampWizard::~CampWizard()
|
||||
@@ -117,6 +200,9 @@ void CampWizard::setData(const CampDataPtr &data)
|
||||
m_dataBinder->setData(data.data());
|
||||
m_dataBinder->bindToUi();
|
||||
m_addrHelperBinder->bindToUi();
|
||||
|
||||
m_peopleModel->setData(data->people());
|
||||
m_itemsModel->setData(data->services());
|
||||
}
|
||||
|
||||
void CampWizard::on_btnAdd_clicked()
|
||||
@@ -192,5 +278,119 @@ void CampWizard::on_groupNew_clicked(bool checked)
|
||||
|
||||
void CampWizard::on_CampWizard_currentIdChanged(int id)
|
||||
{
|
||||
if (id == 2)
|
||||
{
|
||||
CampService srv;
|
||||
srv.calculate(m_data);
|
||||
|
||||
m_dataBinder->bindToUi();
|
||||
m_itemsModel->setData(m_data->services());
|
||||
|
||||
ui->lFrom->setText(m_data->start().toString());
|
||||
ui->lTo->setText(m_data->end().toString());
|
||||
ui->lDays->setText(QString::number(m_data->start().daysTo(m_data->end())));
|
||||
ui->lOwner->setText(m_data->ownerAddress());
|
||||
}
|
||||
}
|
||||
|
||||
void CampWizard::on_btnAddService_clicked()
|
||||
{
|
||||
AccServicePtr service = m_servicesModel->itemFromIndex(ui->tableServices->currentIndex());
|
||||
AddServiceDialog *dialog = new AddServiceDialog(service, this);
|
||||
|
||||
dialog->setAttribute(Qt::WA_DeleteOnClose);
|
||||
|
||||
connect(dialog, &QDialog::accepted, [=](){
|
||||
CampService srv;
|
||||
srv.addService(m_data, service, dialog->price(), dialog->description());
|
||||
m_itemsModel->setData(m_data->services());
|
||||
});
|
||||
|
||||
dialog->show();
|
||||
}
|
||||
|
||||
void CampWizard::on_btnRemoveService_clicked()
|
||||
{
|
||||
ServiceItemPtr item = m_itemsModel->itemFromIndex(ui->tableItems->currentIndex());
|
||||
m_data->removeServiceItem(item);
|
||||
m_itemsModel->setData(m_data->services());
|
||||
|
||||
ui->btnRemoveService->setEnabled(false);
|
||||
}
|
||||
|
||||
void CampWizard::on_checkSale_clicked()
|
||||
{
|
||||
ui->sale->setEnabled(ui->checkSale->isChecked());
|
||||
applySale();
|
||||
}
|
||||
|
||||
void CampWizard::applySale()
|
||||
{
|
||||
if (m_data.isNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (ui->checkSale->isChecked())
|
||||
{
|
||||
m_saleBinder->bindToData();
|
||||
m_data->setSale(m_saleHelper->salePtr()->sale());
|
||||
m_data->setFixedSale(m_saleHelper->salePtr()->fixed());
|
||||
}
|
||||
else
|
||||
{
|
||||
m_data->setSale(QDecDouble(0));
|
||||
}
|
||||
}
|
||||
|
||||
void CampWizard::on_sale_currentIndexChanged(int)
|
||||
{
|
||||
applySale();
|
||||
}
|
||||
|
||||
bool CampWizard::validateCurrentPage()
|
||||
{
|
||||
m_dataBinder->bindToData();
|
||||
|
||||
if (currentPage() == ui->peoplePage && m_data->people().isEmpty())
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("Add people."));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (currentPage() == ui->peoplePage && m_data->start() >= m_data->end())
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("Start date is after or equals end date."));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (currentPage() == ui->servicePage && m_data->services().isEmpty())
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("Add service."));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CampWizard::accept()
|
||||
{
|
||||
CampService srv;
|
||||
srv.saveCamp(m_data);
|
||||
bool success = true;
|
||||
|
||||
connect(&srv, &IService::dbError, [this, &success](QString msg){
|
||||
QMessageBox::critical(this, tr("Database error"), tr(msg.toStdString().c_str()));
|
||||
success = false;
|
||||
});
|
||||
|
||||
connect(&srv, &IService::permissionDenied, [this, &success](QString msg){
|
||||
QMessageBox::critical(this, "Permission denied", msg.toStdString().c_str());
|
||||
success = false;
|
||||
});
|
||||
|
||||
if (success)
|
||||
{
|
||||
QDialog::accept();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user