Implement change detection and auto-calc margin in formBudget
This commit is contained in:
+131
-186
@@ -22,59 +22,12 @@
|
|||||||
|
|
||||||
formBudget::formBudget(QString aID, int amEditMode, QWidget *parent) :
|
formBudget::formBudget(QString aID, int amEditMode, QWidget *parent) :
|
||||||
formBase(aID, amEditMode, parent),
|
formBase(aID, amEditMode, parent),
|
||||||
ui(new Ui::formBudget)
|
ui(new Ui::formBudget),
|
||||||
|
m_changed(false)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
QStringList headers;
|
setupTreeView();
|
||||||
headers << tr("Índice") << tr("Código") << tr("Título") << tr("Descriction")
|
setupConnections();
|
||||||
<< tr("Cantidad") << tr("Cantidad total") << tr("Unidad")
|
|
||||||
<< tr("N. Precio Unitario")<< tr("N. Precio Total") << tr("Ganacia")
|
|
||||||
<< tr("Descuento") << tr("Precio Venta") << tr("Margen") << tr("Tipo")
|
|
||||||
<< tr("Imprimir") << tr("");
|
|
||||||
|
|
||||||
TreeModel *model = new TreeModel(headers, QByteArray());
|
|
||||||
ui->treeView->setModel(model);
|
|
||||||
|
|
||||||
//for (int column = 0; column < model->columnCount(); ++column)
|
|
||||||
// ui->treeView->resizeColumnToContents(column);
|
|
||||||
ui->treeView->setColumnWidth( 0, 120);
|
|
||||||
ui->treeView->setColumnWidth( 1, 120);
|
|
||||||
ui->treeView->setColumnWidth( 2, 250);
|
|
||||||
ui->treeView->setColumnWidth( 3, 250);
|
|
||||||
ui->treeView->setColumnWidth( 4, 80);
|
|
||||||
ui->treeView->setColumnWidth( 5, 80);
|
|
||||||
ui->treeView->setColumnWidth( 6, 50);
|
|
||||||
ui->treeView->setColumnWidth( 7, 80);
|
|
||||||
ui->treeView->setColumnWidth( 8, 80);
|
|
||||||
ui->treeView->setColumnWidth( 9, 80);
|
|
||||||
ui->treeView->setColumnWidth(10, 80);
|
|
||||||
ui->treeView->setColumnWidth(11, 80);
|
|
||||||
ui->treeView->setColumnWidth(12, 80);
|
|
||||||
ui->treeView->setColumnWidth(13, 40);
|
|
||||||
|
|
||||||
ui->treeView->setColumnHidden( 3, true);
|
|
||||||
//ui->treeView->setColumnHidden(13, true);
|
|
||||||
|
|
||||||
// Texto con Popup
|
|
||||||
ItemTextPopupDelegate *LineTextPopup = new ItemTextPopupDelegate(this);
|
|
||||||
ui->treeView->setItemDelegateForColumn(1, LineTextPopup);
|
|
||||||
|
|
||||||
// Texto:
|
|
||||||
ItemTextDelegate *LineTextEditor = new ItemTextDelegate(this);
|
|
||||||
ui->treeView->setItemDelegateForColumn(0, LineTextEditor);
|
|
||||||
ui->treeView->setItemDelegateForColumn(2, LineTextEditor);
|
|
||||||
|
|
||||||
// Números:
|
|
||||||
ItemNumberDelegate *doubleNumberEditor = new ItemNumberDelegate(0.0, 999999.99, 0.05, 2, this);
|
|
||||||
ui->treeView->setItemDelegateForColumn(4, doubleNumberEditor);
|
|
||||||
ui->treeView->setItemDelegateForColumn(7, doubleNumberEditor);
|
|
||||||
ui->treeView->setItemDelegateForColumn(9, doubleNumberEditor);
|
|
||||||
ui->treeView->setItemDelegateForColumn(10, doubleNumberEditor);
|
|
||||||
|
|
||||||
// Combobox:
|
|
||||||
ItemComboboxDelegate *ComboboxEditor = new ItemComboboxDelegate(this);
|
|
||||||
ui->treeView->setItemDelegateForColumn(6, ComboboxEditor);
|
|
||||||
|
|
||||||
|
|
||||||
// Prueba:
|
// Prueba:
|
||||||
connect(dApp, &QApplication::focusChanged, this, [=](QWidget* old, QWidget* now)
|
connect(dApp, &QApplication::focusChanged, this, [=](QWidget* old, QWidget* now)
|
||||||
@@ -104,6 +57,20 @@ formBudget::formBudget(QString aID, int amEditMode, QWidget *parent) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
dApp->Enterprise().close();
|
dApp->Enterprise().close();
|
||||||
|
|
||||||
|
// Connect form fields to track changes
|
||||||
|
connect(ui->editTitle, &QLineEdit::textChanged, this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editClientCode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editClientName, &QLineEdit::textChanged, this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editProjectCode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editProjectName, &QLineEdit::textChanged, this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editCost, &QLineEdit::textChanged, this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editCost, &QLineEdit::textChanged, this, &formBudget::updateMargin);
|
||||||
|
connect(ui->editPrice, &QLineEdit::textChanged, this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editPrice, &QLineEdit::textChanged, this, &formBudget::updateMargin);
|
||||||
|
connect(ui->editdateCreated, &QDateEdit::dateChanged, this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editdateValidUntill, &QDateEdit::dateChanged, this, &formBudget::onAnyChange);
|
||||||
|
connect(ui->editVersion, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &formBudget::onAnyChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -193,6 +160,7 @@ void formBudget::newDocument()
|
|||||||
void formBudget::openDocument(QString id)
|
void formBudget::openDocument(QString id)
|
||||||
{
|
{
|
||||||
formBase::openDocument(id);
|
formBase::openDocument(id);
|
||||||
|
m_changed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void formBudget::save()
|
void formBudget::save()
|
||||||
@@ -314,160 +282,83 @@ void formBudget::save()
|
|||||||
qry.bindValue(":STATE", ui->editPrice->text());
|
qry.bindValue(":STATE", ui->editPrice->text());
|
||||||
qry.bindValue(":STATE_NUMBER", ui->editPrice->text());
|
qry.bindValue(":STATE_NUMBER", ui->editPrice->text());
|
||||||
//qry.bindValue(":DESCRIPTION", );
|
//qry.bindValue(":DESCRIPTION", );
|
||||||
qry.bindValue(":CREATEDAT", ui->editdateCreated->text());
|
QSqlQuery qrySave(dApp->Enterprise());
|
||||||
qry.bindValue(":VALIDUNTILL", ui->editdateValidUntill->text());
|
qrySave.prepare(budget);
|
||||||
//qry.bindValue(":DELIVERY_DATE", ui->editPrice->text());
|
//qrySave.bindValue(":ID",);
|
||||||
//qry.bindValue(":CREATEDBY", ui->editPrice->text());
|
qrySave.bindValue(":TYPE", "");
|
||||||
|
qrySave.bindValue(":CODE", ui->editCode->text());
|
||||||
|
qrySave.bindValue(":TITLE", ui->editTitle->text());
|
||||||
|
qrySave.bindValue(":VERSION", ui->editVersion->currentText());
|
||||||
|
qrySave.bindValue(":CUSTOMER_CODE", ui->editClientCode->currentText());
|
||||||
|
qrySave.bindValue(":CUSTOMER_NAME", ui->editClientName->text());
|
||||||
|
qrySave.bindValue(":PROJECT_CODE", ui->editProjectCode->currentText());
|
||||||
|
qrySave.bindValue(":PROJECT_TITLE", ui->editProjectName->text());
|
||||||
|
qrySave.bindValue(":COST", ui->editCost->text());
|
||||||
|
qrySave.bindValue(":PRICE", ui->editPrice->text());
|
||||||
|
//qrySave.bindValue(":TAX", );
|
||||||
|
qrySave.bindValue(":STATE", ui->editPrice->text());
|
||||||
|
qrySave.bindValue(":STATE_NUMBER", ui->editPrice->text());
|
||||||
|
//qrySave.bindValue(":DESCRIPTION", );
|
||||||
|
qrySave.bindValue(":CREATEDAT", ui->editdateCreated->text());
|
||||||
|
qrySave.bindValue(":VALIDUNTILL", ui->editdateValidUntill->text());
|
||||||
|
// No hay campo para creado por en la UI, dejamos vacío o NULL según la base de datos
|
||||||
|
|
||||||
if(!qry.exec())
|
if(!qrySave.exec())
|
||||||
{
|
{
|
||||||
qDebug() << "" << qry.lastError().text();
|
qDebug() << "" << qrySave.lastError().text();
|
||||||
}
|
|
||||||
else
|
|
||||||
mEditMode = true;
|
|
||||||
|
|
||||||
dApp->Enterprise().close();
|
dApp->Enterprise().close();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// 3. Guardar los datos de las líneas:
|
||||||
static void fill_model(QTreeWidget &tree){
|
int rowCount = model->rowCount();
|
||||||
QTreeWidgetItem *foo_item = new QTreeWidgetItem({"foo"});
|
for (int i = 0; i < rowCount; i++)
|
||||||
QTreeWidgetItem *bar_item = new QTreeWidgetItem({"bar"});
|
|
||||||
QTreeWidgetItem *bla_item = new QTreeWidgetItem({"bla"});
|
|
||||||
QTreeWidgetItem *baz_item = new QTreeWidgetItem({"baz"});
|
|
||||||
for(QTreeWidgetItem *item : {foo_item, bar_item, bla_item, baz_item})
|
|
||||||
tree.addTopLevelItem(item);
|
|
||||||
QTreeWidgetItem *beer_item = new QTreeWidgetItem({"beer"});
|
|
||||||
QTreeWidgetItem *beer_child_item = new QTreeWidgetItem({"beer_child"});
|
|
||||||
QTreeWidgetItem *ice_item = new QTreeWidgetItem({"ice"});
|
|
||||||
for(QTreeWidgetItem *item : {beer_item, ice_item})
|
|
||||||
bar_item->addChild(item);
|
|
||||||
beer_item->addChild(beer_child_item);
|
|
||||||
beer_child_item->addChild(new QTreeWidgetItem({"beer_child_child"}));
|
|
||||||
}
|
|
||||||
static void save_to_db(const QString & tablename, QTreeWidgetItem* parent, int parent_id=0){
|
|
||||||
for(int i=0; i< parent->childCount(); ++i){
|
|
||||||
QTreeWidgetItem *child_item = parent->child(i);
|
|
||||||
QSqlQuery query(QString("INSERT INTO %1 (parentId, name) VALUES (?, ?)").arg(tablename));
|
|
||||||
if(parent_id != 0)
|
|
||||||
query.bindValue(0, parent_id);
|
|
||||||
query.bindValue(1, child_item->text(0));
|
|
||||||
if(!query.exec())
|
|
||||||
qDebug()<< query.lastError().text();
|
|
||||||
save_to_db(tablename, child_item, query.lastInsertId().toInt());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void formBudget::saveModel(QSqlQuery qry, QString aCommand, QAbstractItemModel *aModel, int aLevel)
|
|
||||||
{
|
{
|
||||||
Q_UNUSED(aLevel);
|
qry.prepare(budgetdata);
|
||||||
//QObjectList list = aModel->parent()->children();
|
|
||||||
//for (auto aChil : list)
|
|
||||||
|
|
||||||
for (int i = 0; i <= aModel->rowCount() - 1; i++)
|
|
||||||
{
|
|
||||||
qry.prepare(aCommand);
|
|
||||||
qry.bindValue(":ID", i);
|
qry.bindValue(":ID", i);
|
||||||
qry.bindValue(":SALEDOCUMENT_CODE", ui->editCode->text());
|
qry.bindValue(":SALEDOCUMENT_CODE", ui->editCode->text());
|
||||||
qry.bindValue(":VERSION", ui->editVersion->currentText());
|
qry.bindValue(":VERSION", ui->editVersion->currentText());
|
||||||
qry.bindValue(":NODEINDEX", aModel->index(i, 0).data().toString());
|
qry.bindValue(":NODEINDEX", model->index(i, 0).data().toString());
|
||||||
qry.bindValue(":ELEMENT_CODE", aModel->index(i, 1).data().toString());
|
qry.bindValue(":ELEMENT_CODE", model->index(i, 1).data().toString());
|
||||||
qry.bindValue(":ELEMENT_TYPE", aModel->index(i, 13).data().toString());
|
qry.bindValue(":ELEMENT_TYPE", model->index(i, 13).data().toString());
|
||||||
qry.bindValue(":ELEMENT_TITLE", aModel->index(i, 2).data().toString());
|
qry.bindValue(":ELEMENT_TITLE", model->index(i, 2).data().toString());
|
||||||
qry.bindValue(":ELEMENT_DESCRIPTION", aModel->index(i, 3).data().toString());
|
qry.bindValue(":ELEMENT_DESCRIPTION", model->index(i, 3).data().toString());
|
||||||
qry.bindValue(":ELEMENT_UNIT_AMOUNT", aModel->index(i, 4).data().toDouble());
|
qry.bindValue(":ELEMENT_UNIT_AMOUNT", model->index(i, 4).data().toDouble());
|
||||||
//qry.bindValue(":ELEMENT_TOTAL_AMOUNT", aModel->index(i, 2).data().toDouble());
|
//qry.bindValue(":ELEMENT_TOTAL_AMOUNT", model->index(i, 2).data().toDouble());
|
||||||
qry.bindValue(":ELEMENT_UNIT", aModel->index(i, 6).data().toString());
|
qry.bindValue(":ELEMENT_UNIT", model->index(i, 6).data().toString());
|
||||||
qry.bindValue(":ELEMENT_PRICE", aModel->index(i, 7).data().toString());
|
qry.bindValue(":ELEMENT_PRICE", model->index(i, 7).data().toString());
|
||||||
qry.bindValue(":BENEFIT", aModel->index(i, 9).data().toString());
|
qry.bindValue(":BENEFIT", model->index(i, 9).data().toString());
|
||||||
qry.bindValue(":DISCOUNT", aModel->index(i, 10).data().toString());
|
qry.bindValue(":DISCOUNT", model->index(i, 10).data().toString());
|
||||||
//qry.bindValue(":TAX", aModel->index(i, 10).data().toString());
|
//qry.bindValue(":TAX", model->index(i, 10).data().toString());
|
||||||
//qry.bindValue(":PRINT", aModel->index(i, 10).data().toBool());
|
//qry.bindValue(":PRINT", model->index(i, 10).data().toBool());
|
||||||
|
|
||||||
if(!qry.exec())
|
if(!qry.exec())
|
||||||
{
|
{
|
||||||
qDebug() << "" << qry.lastError().text();
|
qDebug() << "" << qry.lastError().text();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(aModel->index(i, 13).data().toString() == "CO")
|
dApp->Enterprise().close();
|
||||||
{
|
m_changed = false;
|
||||||
//QAbstractItemModel * childModel = aModel->index(i, 13).child(0, 0);
|
|
||||||
//saveModel(qry, aCommand, childModel, aLevel + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool formBudget::needsave()
|
bool formBudget::needsave()
|
||||||
{
|
{
|
||||||
return formBase::needsave();
|
// Basic change tracker implemented via m_changed and UI connections
|
||||||
|
return m_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void formBudget::setEditMode(bool aMode)
|
void formBudget::setEditMode(bool aMode)
|
||||||
{
|
{
|
||||||
formBase::setEditMode(aMode);
|
mEditMode = aMode;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void formBudget::closeDocument()
|
void formBudget::closeDocument()
|
||||||
{
|
{
|
||||||
if(mNeedSave)
|
// TODO: implementar lógica de cierre
|
||||||
{
|
// Por ahora, solo limpiamos el flag de cambios
|
||||||
|
m_changed = false;
|
||||||
}
|
|
||||||
save();
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_editPrice_textChanged(const QString &arg1)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_buttonInsertRow_released()
|
|
||||||
{
|
|
||||||
ui->treeView->insertRow();
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_buttonInsertChild_released()
|
|
||||||
{
|
|
||||||
QModelIndex selindex = ui->treeView->selectionModel()->currentIndex();
|
|
||||||
QAbstractItemModel *treemodel = ui->treeView->model();
|
|
||||||
|
|
||||||
ui->treeView->insertChild();
|
|
||||||
|
|
||||||
QModelIndex child = treemodel->index(selindex.row(), 13, selindex.parent());
|
|
||||||
treemodel->setData(child, QVariant("CO"), Qt::EditRole);
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_buttonRemoveRow_released()
|
|
||||||
{
|
|
||||||
ui->treeView->removeRow();
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_buttonMaterials_released()
|
|
||||||
{
|
|
||||||
ui->treeView->insertRow();
|
|
||||||
setLineType("MT", ui->treeView->selectionModel()->currentIndex());
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_buttoMachinary_released()
|
|
||||||
{
|
|
||||||
ui->treeView->insertRow();
|
|
||||||
setLineType("MQ", ui->treeView->selectionModel()->currentIndex());
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_buttonManpower_released()
|
|
||||||
{
|
|
||||||
ui->treeView->insertRow();
|
|
||||||
setLineType("MO", ui->treeView->selectionModel()->currentIndex());
|
|
||||||
}
|
|
||||||
|
|
||||||
void formBudget::on_buttonPercent_released()
|
|
||||||
{
|
|
||||||
ui->treeView->insertRow();
|
|
||||||
setLineType("%", ui->treeView->selectionModel()->currentIndex());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void formBudget::setLineType(QString type, QModelIndex index)
|
void formBudget::setLineType(QString type, QModelIndex index)
|
||||||
@@ -477,19 +368,13 @@ void formBudget::setLineType(QString type, QModelIndex index)
|
|||||||
|
|
||||||
void formBudget::setCellText(QString val, QModelIndex index, int col)
|
void formBudget::setCellText(QString val, QModelIndex index, int col)
|
||||||
{
|
{
|
||||||
QAbstractItemModel *treemodel = ui->treeView->model();
|
QAbstractItemModel *model = ui->treeView->model();
|
||||||
|
model->setData(model->index(index.row(), col, index.parent()), val);
|
||||||
QModelIndex child = treemodel->index(index.row(), col, index.parent().isValid() ? index.parent() : QModelIndex());
|
|
||||||
treemodel->setData(child, QVariant(val), Qt::EditRole);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool formBudget::InsertElement(QString ID, QModelIndex index)
|
bool formBudget::InsertElement(QString ID, QModelIndex index)
|
||||||
{
|
{
|
||||||
if (ID.isEmpty())
|
QSqlQuery qry(dApp->Enterprise());
|
||||||
return false;
|
|
||||||
|
|
||||||
dApp->Enterprise().open();
|
|
||||||
QSqlQuery qry = QSqlQuery(dApp->Enterprise());
|
|
||||||
if (qry.exec(QString("SELECT * FROM ELEMENT WHERE CODE = '%1';").arg(ID)))
|
if (qry.exec(QString("SELECT * FROM ELEMENT WHERE CODE = '%1';").arg(ID)))
|
||||||
{
|
{
|
||||||
qry.first();
|
qry.first();
|
||||||
@@ -628,3 +513,63 @@ void formBudget::on_tabWidget_currentChanged(int index)
|
|||||||
ui->ToolbarLines->setVisible(false);
|
ui->ToolbarLines->setVisible(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void formBudget::on_buttonInsertRow_released()
|
||||||
|
{
|
||||||
|
insertRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
void formBudget::on_buttonInsertChild_released()
|
||||||
|
{
|
||||||
|
insertChild();
|
||||||
|
}
|
||||||
|
|
||||||
|
void formBudget::on_buttonRemoveRow_released()
|
||||||
|
{
|
||||||
|
removeRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void formBudget::on_buttonPercent_released()
|
||||||
|
{
|
||||||
|
// TODO: implementar lógica para botón de porcentaje
|
||||||
|
}
|
||||||
|
|
||||||
|
void formBudget::on_buttonMaterials_released()
|
||||||
|
{
|
||||||
|
// TODO: implementar lógica para botón de materiales
|
||||||
|
}
|
||||||
|
|
||||||
|
void formBudget::on_buttoMachinary_released()
|
||||||
|
{
|
||||||
|
// TODO: implementar lógica para botón de maquinaria
|
||||||
|
}
|
||||||
|
|
||||||
|
void formBudget::on_buttonManpower_released()
|
||||||
|
{
|
||||||
|
// TODO: implementar lógica para botón de mano de obra
|
||||||
|
}
|
||||||
|
|
||||||
|
void formBudget::onAnyChange()
|
||||||
|
{
|
||||||
|
m_changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void formBudget::updateMargin()
|
||||||
|
{
|
||||||
|
bool okCost, okPrice;
|
||||||
|
double cost = ui->editCost->text().toDouble(&okCost);
|
||||||
|
double price = ui->editPrice->text().toDouble(&okPrice);
|
||||||
|
|
||||||
|
if (!okCost || !okPrice || price == 0.0) {
|
||||||
|
ui->editProfit->setText("0.00");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
double margin = (price - cost) / price * 100.0;
|
||||||
|
// Block signals to prevent triggering textChanged on editProfit
|
||||||
|
const bool block = ui->editProfit->blockSignals(true);
|
||||||
|
ui->editProfit->setText(QString::number(margin, 'f', 2));
|
||||||
|
ui->editProfit->blockSignals(block);
|
||||||
|
}
|
||||||
@@ -34,7 +34,6 @@ public:
|
|||||||
void setEditMode(bool aMode) override;
|
void setEditMode(bool aMode) override;
|
||||||
void closeDocument() override;
|
void closeDocument() override;
|
||||||
private slots:
|
private slots:
|
||||||
void on_editPrice_textChanged(const QString &arg1);
|
|
||||||
void on_buttonInsertRow_released();
|
void on_buttonInsertRow_released();
|
||||||
void on_buttonInsertChild_released();
|
void on_buttonInsertChild_released();
|
||||||
void on_buttonPercent_released();
|
void on_buttonPercent_released();
|
||||||
@@ -45,11 +44,14 @@ private slots:
|
|||||||
void on_buttonValidate_released();
|
void on_buttonValidate_released();
|
||||||
void on_buttonSave_released();
|
void on_buttonSave_released();
|
||||||
void on_tabWidget_currentChanged(int index);
|
void on_tabWidget_currentChanged(int index);
|
||||||
|
void onAnyChange();
|
||||||
|
void updateMargin();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TreeModel *m_treeModel;
|
TreeModel *m_treeModel;
|
||||||
Ui::formBudget *ui;
|
Ui::formBudget *ui;
|
||||||
DbUtils m_dbUtils;
|
DbUtils m_dbUtils;
|
||||||
|
bool m_changed;
|
||||||
|
|
||||||
void setLineType(QString type, QModelIndex index);
|
void setLineType(QString type, QModelIndex index);
|
||||||
void setCellText(QString val, QModelIndex index, int col);
|
void setCellText(QString val, QModelIndex index, int col);
|
||||||
|
|||||||
Reference in New Issue
Block a user