diff --git a/cpartdistributor.cpp b/cpartdistributor.cpp index e50de26..07f4f8a 100644 --- a/cpartdistributor.cpp +++ b/cpartdistributor.cpp @@ -105,3 +105,28 @@ cPartDistributor* cPartDistributorList::find(qint32 id) return(0); } + +cPartDistributor* cPartDistributorList::find(qint32 partID, qint32 distributorID) +{ + for(int x = 0;x < count();x++) + { + if(at(x)->part()->id() == partID && at(x)->distributor()->id() == distributorID) + return(at(x)); + } + + return(0); +} + +cPartDistributor* cPartDistributorList::find(cPart* lpPart, cDistributor* lpDistributor) +{ + if(!lpPart || !lpDistributor) + return(0); + + for(int x = 0;x < count();x++) + { + if(at(x)->part() == lpPart && at(x)->distributor() == lpDistributor) + return(at(x)); + } + + return(0); +} diff --git a/cpartdistributor.h b/cpartdistributor.h index fdbed0e..4a5d7f1 100644 --- a/cpartdistributor.h +++ b/cpartdistributor.h @@ -51,6 +51,8 @@ class cPartDistributorList : public QList public: cPartDistributor* add(qint32 id); cPartDistributor* find(qint32 id); + cPartDistributor* find(qint32 partID, qint32 distributorID); + cPartDistributor* find(cPart* lpPart, cDistributor* lpDistributor); }; Q_DECLARE_METATYPE(cPartDistributorList*) diff --git a/cpartlistitemdelegate.cpp b/cpartlistitemdelegate.cpp index c0f3612..3efb9fd 100644 --- a/cpartlistitemdelegate.cpp +++ b/cpartlistitemdelegate.cpp @@ -32,18 +32,18 @@ QWidget* cPartListItemDelegate::createEditor( QWidget *parent, const QStyleOptio } case 3: // distributor { - cPartDistributorList* lpList = qvariant_cast(index.data(Qt::UserRole+1)); + cPartDistributorList* lpList = qvariant_cast(index.data(Qt::UserRole+2)); QComboBox* lpComboBox = new QComboBox(parent); - cPartlistItem* lpItem = qvariant_cast(index.data(Qt::UserRole)); + qint32 partID = qvariant_cast(index.data(Qt::UserRole+1)); - if(!lpItem || !lpList) + if(!lpList) return(0); for(int x = 0;x < lpList->count();x++) { cPartDistributor* lpPartDistributor = lpList->at(x); - if(lpPartDistributor->part()->id() == lpItem->partID()) + if(lpPartDistributor->part()->id() == partID) lpComboBox->addItem(lpPartDistributor->distributor()->name(), QVariant::fromValue(lpPartDistributor)); } return(lpComboBox); @@ -145,7 +145,7 @@ void cPartListItemDelegate::setModelData ( QWidget *editor, QAbstractItemModel * cPartDistributor* lpPartDistributor = qvariant_cast(lpComboBox->currentData()); model->setData(index, lpComboBox->currentText(), Qt::EditRole); - model->setData(index, QVariant::fromValue(lpPartDistributor), Qt::UserRole); + model->setData(index, QVariant::fromValue(lpPartDistributor), Qt::UserRole+1); QStandardItemModel* lpModel = (QStandardItemModel*)index.model(); QStandardItem* lpItem = lpModel->itemFromIndex(lpModel->index(index.row(), 5)); lpItem->setText(QString::number(lpPartDistributor->price(), 'f', 2)); diff --git a/cpartlistitemeditdialog.cpp b/cpartlistitemeditdialog.cpp index c2dd6ac..ae0da5e 100644 --- a/cpartlistitemeditdialog.cpp +++ b/cpartlistitemeditdialog.cpp @@ -58,6 +58,18 @@ void cPartlistItemEditDialog::on_m_lpPartList_currentIndexChanged(int /*index*/) fillDistributorList(); } +void cPartlistItemEditDialog::on_m_lpDistributorList_currentIndexChanged(int /*index*/) +{ + cPart* lpPart = qvariant_cast(ui->m_lpPartList->currentData(Qt::UserRole)); + cDistributor* lpDistributor = qvariant_cast(ui->m_lpDistributorList->currentData(Qt::UserRole)); + cPartDistributor* lpPartDistributor = m_lpPartDistributorList->find(lpPart, lpDistributor); + + if(!lpPartDistributor) + ui->m_lpPrice->setValue(0.0); + else + ui->m_lpPrice->setValue(lpPartDistributor->price()); +} + void cPartlistItemEditDialog::fillDistributorList() { ui->m_lpDistributorList->clear(); @@ -72,8 +84,38 @@ void cPartlistItemEditDialog::fillDistributorList() for(int x = 0;x < m_lpPartDistributorList->count();x++) { if(lpPart->id() == m_lpPartDistributorList->at(x)->part()->id()) - ui->m_lpDistributorList->addItem(m_lpPartDistributorList->at(x)->distributor()->name(), QVariant::fromValue(m_lpPartDistributorList->at(x))); + ui->m_lpDistributorList->addItem(m_lpPartDistributorList->at(x)->distributor()->name(), QVariant::fromValue(m_lpPartDistributorList->at(x)->distributor())); } } } } + +QString cPartlistItemEditDialog::reference() +{ + return(ui->m_lpReference->toPlainText()); +} + +cPart* cPartlistItemEditDialog::part() +{ + return(qvariant_cast(ui->m_lpPartList->currentData(Qt::UserRole))); +} + +cDistributor* cPartlistItemEditDialog::distributor() +{ + return(qvariant_cast(ui->m_lpDistributorList->currentData(Qt::UserRole))); +} + +QString cPartlistItemEditDialog::state() +{ + return(ui->m_lpOrderState->currentText()); +} + +qreal cPartlistItemEditDialog::price() +{ + return(ui->m_lpPrice->value()); +} + +QString cPartlistItemEditDialog::description() +{ + return(ui->m_lpDescription->toPlainText()); +} diff --git a/cpartlistitemeditdialog.h b/cpartlistitemeditdialog.h index db9a4a2..b2fab51 100644 --- a/cpartlistitemeditdialog.h +++ b/cpartlistitemeditdialog.h @@ -25,8 +25,16 @@ public: void setList(cDistributorList* lpDistributorList, cPartGroupList* lpPartGroupList, cPartList* lpPartList, cPartDistributorList* lpPartDistributorList); void setValues(const QString& szReference, const QString& szGroup, const QString& szPart, const QString& szDistributor, const QString& szState, const qreal& dPrice, const QString& szDescription); + + QString reference(); + cPart* part(); + cDistributor* distributor(); + QString state(); + qreal price(); + QString description(); private slots: - void on_m_lpPartList_currentIndexChanged(int index); + void on_m_lpPartList_currentIndexChanged(int index); + void on_m_lpDistributorList_currentIndexChanged(int index); private: Ui::cPartlistItemEditDialog* ui; diff --git a/cpartlistitemeditdialog.ui b/cpartlistitemeditdialog.ui index 2f5ea05..edae0db 100644 --- a/cpartlistitemeditdialog.ui +++ b/cpartlistitemeditdialog.ui @@ -26,7 +26,11 @@ - + + + 9999999.000000000000000 + + @@ -120,6 +124,15 @@ + + m_lpPartList + m_lpDistributorList + m_lpPrice + m_lpOrderState + m_lpReplacement + m_lpReference + m_lpDescription + diff --git a/cpartlistwindow.cpp b/cpartlistwindow.cpp index 79c80ad..9d7d0dd 100644 --- a/cpartlistwindow.cpp +++ b/cpartlistwindow.cpp @@ -229,8 +229,12 @@ void cPartlistWindow::showPartList() lpItems.at(0)->setText(lpPartlistItem->reference()); lpItems.at(1)->setText(m_lpPartList->find(lpPartlistItem->partID())->partGroup()->name()); lpItems.at(2)->setText(m_lpPartList->find(lpPartlistItem->partID())->name()); + lpItems.at(2)->setData(lpPartlistItem->partID(), Qt::UserRole); if(lpPartlistItem->distributorID()) + { lpItems.at(3)->setText(m_lpDistributorList->find(lpPartlistItem->distributorID())->name()); + lpItems.at(3)->setData(QVariant::fromValue(lpPartlistItem->distributorID()), Qt::UserRole); + } lpItems.at(4)->setText(lpPartlistItem->stateString()); lpItems.at(5)->setText(QString::number(lpPartlistItem->price(), 'f', 2)); lpItems.at(5)->setTextAlignment(Qt::AlignRight); @@ -238,8 +242,8 @@ void cPartlistWindow::showPartList() for(int z = 0;z < header.count();z++) { - lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem), Qt::UserRole); - lpItems.at(z)->setData(QVariant::fromValue(m_lpPartDistributorList), Qt::UserRole+1); + lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem->partID()), Qt::UserRole+1); + lpItems.at(z)->setData(QVariant::fromValue(m_lpPartDistributorList), Qt::UserRole+2); } m_lpPartListModel->appendRow(lpItems); @@ -271,6 +275,39 @@ bool cPartlistWindow::save(qint32 id) return(false); } + for(int x = 0;x < m_lpPartListModel->rowCount();x++) + { + QStandardItem* lpReferenceItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 0)); + QStandardItem* lpPartItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 2)); + QStandardItem* lpDistributorItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 3)); + QStandardItem* lpStateItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 4)); + QStandardItem* lpPriceItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 5)); + QStandardItem* lpDescriptionItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 6)); + + QSqlQuery query; + cDistributor* lpDistributor = m_lpDistributorList->find(lpDistributorItem->text()); + + query.prepare("INSERT INTO partlistitem (partlistID, partID, distributorID, replaceID, reference, description, state, price) VALUES (:partlistID, :partID, :distributorID, :replaceID, :reference, :description, :state, :price);"); + + query.bindValue(":partlistID", id); + query.bindValue(":partID", qvariant_cast(lpPartItem->data(Qt::UserRole+1))); + if(!lpDistributor) + query.bindValue(":distributorID", QVariant::Int); + else + query.bindValue(":distributorID", lpDistributor->id()); + query.bindValue(":replaceID", QVariant::Int); + query.bindValue(":reference", lpReferenceItem->text()); + query.bindValue(":state", lpStateItem->text()); + query.bindValue(":description", lpDescriptionItem->text()); + query.bindValue(":price", lpPriceItem->text().toDouble()); + + if(!query.exec()) + { + myDebug << query.lastError().text(); + return(false); + } + } + return(true); } @@ -288,6 +325,7 @@ bool cPartlistWindow::somethingSelected() void cPartlistWindow::on_m_lpPartList_doubleClicked(const QModelIndex &/*index*/) { + onPartEdit(); } void cPartlistWindow::on_m_lpPartList_clicked(const QModelIndex &index) @@ -321,7 +359,43 @@ void cPartlistWindow::onPartAdd() return; } + QString szReference = lpDialog->reference(); + cPart* lpPart = lpDialog->part(); + cDistributor* lpDistributor = lpDialog->distributor(); + QString szState = lpDialog->state(); + qreal dPrice = lpDialog->price(); + QString szDescription = lpDialog->description(); + + QList lpItems; + + for(int z = 0;z < m_lpPartListModel->columnCount();z++) + lpItems.append(new QStandardItem); + + lpItems.at(0)->setText(szReference.split("\n").join(", ")); + if(lpPart) + { + lpItems.at(1)->setText(lpPart->partGroup()->name()); + lpItems.at(2)->setText(lpPart->name()); + lpItems.at(2)->setData(lpPart->id(), Qt::UserRole); + } + if(lpDistributor) + lpItems.at(3)->setText(lpDistributor->name()); + lpItems.at(4)->setText(szState); + lpItems.at(5)->setText(QString::number(dPrice, 'f', 2)); + lpItems.at(5)->setTextAlignment(Qt::AlignRight); + lpItems.at(6)->setText(szDescription); + + for(int z = 0;z < m_lpPartListModel->columnCount();z++) + { + lpItems.at(z)->setData(QVariant::fromValue(lpPart->id()), Qt::UserRole+1); + lpItems.at(z)->setData(QVariant::fromValue(m_lpPartDistributorList), Qt::UserRole+2); + } + + m_lpPartListModel->appendRow(lpItems); + delete lpDialog; + + partlistChanged(this); } void cPartlistWindow::onPartEdit() @@ -345,9 +419,49 @@ void cPartlistWindow::onPartEdit() return; } + QString szReference = lpDialog->reference(); + cPart* lpPart = lpDialog->part(); + cDistributor* lpDistributor = lpDialog->distributor(); + QString szState = lpDialog->state(); + qreal dPrice = lpDialog->price(); + QString szDescription = lpDialog->description(); + + QList lpItems; + + lpReferenceItem->setText(szReference.split("\n").join(", ")); + if(lpPart) + { + lpPartGroupItem->setText(lpPart->partGroup()->name()); + lpPartItem->setText(lpPart->name()); + } + else + { + lpPartGroupItem->setText(""); + lpPartItem->setText(""); + } + if(lpDistributor) + lpDistributorItem->setText(lpDistributor->name()); + else + lpDistributorItem->setText(""); + lpStateItem->setText(szState); + lpPriceItem->setText(QString::number(dPrice, 'f', 2)); + lpDescriptionItem->setText(szDescription); + delete lpDialog; + + partlistChanged(this); } void cPartlistWindow::onPartDelete() { + QStandardItem* lpItem = m_lpPartListModel->itemFromIndex(ui->m_lpPartList->selectionModel()->selectedRows().at(0)); + if(!lpItem) + return; + + if(QMessageBox::question(this, "DELETE", QString("Are you sure to delete this entry?")) == QMessageBox::No) + return; + + m_lpPartListModel->removeRow(lpItem->row()); + + partlistChanged(this); } diff --git a/cpartlistwindow.ui b/cpartlistwindow.ui index 264a24f..ab9a5b7 100644 --- a/cpartlistwindow.ui +++ b/cpartlistwindow.ui @@ -97,6 +97,9 @@ Qt::CustomContextMenu + + QAbstractItemView::EditKeyPressed +