You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
841 lines
25 KiB
C++
841 lines
25 KiB
C++
#include "cpartlistwindow.h"
|
|
#include "ui_cpartlistwindow.h"
|
|
|
|
#include "cpartlistitemdelegate.h"
|
|
#include "cpartlistitemeditdialog.h"
|
|
|
|
#include "common.h"
|
|
|
|
#include <QSqlQuery>
|
|
#include <QSqlError>
|
|
|
|
#include <QMenu>
|
|
|
|
#include <QFileInfo>
|
|
#include <QFile>
|
|
#include <QTextStream>
|
|
|
|
#include <QMessageBox>
|
|
#include <QDebug>
|
|
|
|
|
|
cPartlistWindow::cPartlistWindow(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::cPartlistWindow),
|
|
m_bPartlistLoading(false),
|
|
m_lpMainTab(0),
|
|
m_id(-1),
|
|
m_bSomethingChanged(false),
|
|
m_lpDistributorList(0),
|
|
m_lpPartGroupList(0),
|
|
m_lpPartList(0),
|
|
m_lpPartDistributorList(0)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
m_lpPartListModel = new QStandardItemModel(0, 3);
|
|
ui->m_lpPartList->setModel(m_lpPartListModel);
|
|
ui->m_lpPartList->setItemDelegate(new cPartListItemDelegate());
|
|
|
|
QStringList header;
|
|
header << tr("reference") << tr("count") << tr("group") << tr("part") << tr("distributor") << tr("state") << tr("price") << tr("description");
|
|
m_lpPartListModel->setHorizontalHeaderLabels(header);
|
|
ui->m_lpPartList->header()->setMinimumSectionSize(50);
|
|
|
|
connect(m_lpPartListModel, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(onPartlistItemChanged(QStandardItem*)));
|
|
}
|
|
|
|
cPartlistWindow::~cPartlistWindow()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void cPartlistWindow::setMainTab(QTabWidget *lpMainTab)
|
|
{
|
|
m_lpMainTab = lpMainTab;
|
|
}
|
|
|
|
void cPartlistWindow::setPartlistName(const QString& szPartlistName)
|
|
{
|
|
setWindowTitle(szPartlistName);
|
|
ui->m_lpName->setText(szPartlistName);
|
|
if(!m_bPartlistLoading)
|
|
m_bSomethingChanged = true;
|
|
}
|
|
|
|
QString cPartlistWindow::partlistName()
|
|
{
|
|
return(ui->m_lpName->text());
|
|
}
|
|
|
|
void cPartlistWindow::setPartlistID(const qint32& id)
|
|
{
|
|
m_bPartlistLoading = true;
|
|
m_id = id;
|
|
|
|
QSqlQuery query;
|
|
|
|
query.prepare("SELECT name, description FROM partlist WHERE id=:id;");
|
|
query.bindValue(":id", m_id);
|
|
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
m_bPartlistLoading = false;
|
|
return;
|
|
}
|
|
|
|
if(!query.next())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
m_bPartlistLoading = false;
|
|
return;
|
|
}
|
|
|
|
ui->m_lpName->setText(query.value("name").toString());
|
|
ui->m_lpDescription->setText(query.value("description").toString());
|
|
|
|
if(m_lpMainTab)
|
|
{
|
|
m_lpMainTab->setTabText(m_lpMainTab->currentIndex(), query.value("name").toString());
|
|
partlistChanged(this);
|
|
}
|
|
|
|
query.prepare("SELECT id, partID, distributorID, replaceID, reference, description, state, price FROM partlistitem WHERE partlistID=:partlistID;");
|
|
query.bindValue(":partlistID", m_id);
|
|
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return;
|
|
}
|
|
|
|
while(query.next())
|
|
{
|
|
cPartlistItem* lpPartlistItem = m_partlistItemList.add(query.value("id").toInt());
|
|
lpPartlistItem->setPartlistID(m_id);
|
|
lpPartlistItem->setPartID(query.value("partID").toInt());
|
|
lpPartlistItem->setDistributorID(query.value("distributorID").toInt());
|
|
lpPartlistItem->setReplaceID(query.value("replaceID").toInt());
|
|
lpPartlistItem->setReference(query.value("reference").toString());
|
|
lpPartlistItem->setDescription(query.value("description").toString());
|
|
lpPartlistItem->setState((cPartlistItem::STATE)query.value("state").toInt());
|
|
lpPartlistItem->setPrice(query.value("price").toReal());
|
|
}
|
|
|
|
showPartList();
|
|
|
|
m_bPartlistLoading = false;
|
|
}
|
|
|
|
void cPartlistWindow::setList(cDistributorList* lpDistributorList, cPartGroupList* lpPartGroupList, cPartList* lpPartList, cPartDistributorList* lpPartDistributorList)
|
|
{
|
|
m_lpDistributorList = lpDistributorList;
|
|
m_lpPartGroupList = lpPartGroupList;
|
|
m_lpPartList = lpPartList;
|
|
m_lpPartDistributorList = lpPartDistributorList;
|
|
}
|
|
|
|
void cPartlistWindow::on_m_lpName_textChanged(const QString &arg1)
|
|
{
|
|
if(m_bPartlistLoading)
|
|
return;
|
|
|
|
if(m_lpMainTab)
|
|
{
|
|
m_bSomethingChanged = true;
|
|
m_lpMainTab->setTabText(m_lpMainTab->currentIndex(), arg1);
|
|
partlistChanged(this);
|
|
}
|
|
}
|
|
|
|
bool cPartlistWindow::close()
|
|
{
|
|
qint32 ret = QMessageBox::question(this, tr("Close"), tr("Do you want to save changes?"), QMessageBox::Yes, QMessageBox::No, QMessageBox::Abort);
|
|
|
|
switch(ret)
|
|
{
|
|
case QMessageBox::Yes:
|
|
return(save());
|
|
break;
|
|
case QMessageBox::No:
|
|
return(true);
|
|
break;
|
|
case QMessageBox::Abort:
|
|
return(false);
|
|
}
|
|
return(false);
|
|
}
|
|
|
|
bool cPartlistWindow::save()
|
|
{
|
|
if(ui->m_lpName->text().isEmpty())
|
|
{
|
|
QMessageBox::critical(this, "Save", "No name given for Partlist.");
|
|
return(false);
|
|
}
|
|
|
|
if(m_id == -1)
|
|
saveAs();
|
|
|
|
return(save(m_id));
|
|
}
|
|
|
|
bool cPartlistWindow::saveAs()
|
|
{
|
|
if(ui->m_lpName->text().isEmpty())
|
|
{
|
|
QMessageBox::critical(this, "Save", "No name given for Partlist.");
|
|
return(false);
|
|
}
|
|
|
|
QSqlQuery query;
|
|
|
|
query.prepare("SELECT id FROM partlist WHERE name = :name;");
|
|
query.bindValue(":name", ui->m_lpName->text());
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
if(query.next())
|
|
{
|
|
QMessageBox::critical(this, "Save", "Partlist already exists.");
|
|
return(false);
|
|
}
|
|
|
|
query.prepare("INSERT INTO partlist (name, description) VALUES (:name, :description);");
|
|
query.bindValue(":name", ui->m_lpName->text());
|
|
query.bindValue(":description", ui->m_lpDescription->document()->toPlainText());
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
query.prepare("SELECT id FROM partlist WHERE name = :name;");
|
|
query.bindValue(":name", ui->m_lpName->text());
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
if(!query.next())
|
|
return(false);
|
|
|
|
m_id = query.value("id").toInt();
|
|
|
|
return(save(m_id));
|
|
}
|
|
|
|
void cPartlistWindow::showPartList()
|
|
{
|
|
m_lpPartListModel->clear();
|
|
|
|
QStringList header;
|
|
header << tr("reference") << tr("count") << tr("group") << tr("part") << tr("distributor") << tr("state") << tr("price") << tr("description");
|
|
m_lpPartListModel->setHorizontalHeaderLabels(header);
|
|
ui->m_lpPartList->header()->setMinimumSectionSize(50);
|
|
|
|
for(int x = 0;x < m_partlistItemList.count();x++)
|
|
{
|
|
cPartlistItem* lpPartlistItem = m_partlistItemList.at(x);
|
|
|
|
if(!lpPartlistItem->replaceID())
|
|
addItem(lpPartlistItem);
|
|
}
|
|
|
|
for(int x = 0;x < m_partlistItemList.count();x++)
|
|
{
|
|
cPartlistItem* lpPartlistItem = m_partlistItemList.at(x);
|
|
|
|
if(lpPartlistItem->replaceID())
|
|
{
|
|
QStandardItem* lpRoot = findItem(lpPartlistItem->replaceID());
|
|
if(lpRoot)
|
|
addItem(lpPartlistItem, lpRoot);
|
|
}
|
|
}
|
|
|
|
for(int z = 0;z < header.count();z++)
|
|
ui->m_lpPartList->resizeColumnToContents(z);
|
|
|
|
ui->m_lpPartList->sortByColumn(1, Qt::AscendingOrder);
|
|
}
|
|
|
|
QStandardItem* cPartlistWindow::findItem(qint32 itemID)
|
|
{
|
|
for(int z = 0;z < m_lpPartListModel->rowCount();z++)
|
|
{
|
|
QStandardItem* lpItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(z, 0));
|
|
if(!lpItem)
|
|
return(0);
|
|
|
|
cPartlistItem* lpPartlistItem = qvariant_cast<cPartlistItem*>(lpItem->data(Qt::UserRole));
|
|
if(!lpPartlistItem)
|
|
return(0);
|
|
|
|
if(lpPartlistItem->id() == itemID)
|
|
return(lpItem);
|
|
}
|
|
return(0);
|
|
}
|
|
|
|
void cPartlistWindow::addItem(cPartlistItem* lpPartlistItem, QStandardItem *lpRoot)
|
|
{
|
|
QList<QStandardItem*> lpItems;
|
|
|
|
for(int z = 0;z < m_lpPartListModel->columnCount();z++)
|
|
lpItems.append(new QStandardItem);
|
|
|
|
lpItems.at(0)->setText(lpPartlistItem->reference());
|
|
lpItems.at(1)->setText(QString::number(lpPartlistItem->reference().split(", ").count()));
|
|
lpItems.at(1)->setTextAlignment(Qt::AlignRight);
|
|
lpItems.at(2)->setText(m_lpPartList->find(lpPartlistItem->partID())->partGroup()->name());
|
|
lpItems.at(3)->setText(m_lpPartList->find(lpPartlistItem->partID())->name());
|
|
lpItems.at(3)->setData(lpPartlistItem->partID(), Qt::UserRole);
|
|
if(lpPartlistItem->distributorID())
|
|
{
|
|
lpItems.at(4)->setText(m_lpDistributorList->find(lpPartlistItem->distributorID())->name());
|
|
lpItems.at(4)->setData(QVariant::fromValue(lpPartlistItem->distributorID()), Qt::UserRole);
|
|
}
|
|
lpItems.at(5)->setText(lpPartlistItem->stateString());
|
|
lpItems.at(6)->setText(QString::number(lpPartlistItem->price(), 'f', 2));
|
|
lpItems.at(6)->setTextAlignment(Qt::AlignRight);
|
|
lpItems.at(7)->setText(lpPartlistItem->description());
|
|
|
|
for(int z = 0;z < m_lpPartListModel->columnCount();z++)
|
|
{
|
|
lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem), Qt::UserRole);
|
|
lpItems.at(z)->setData(QVariant::fromValue(lpPartlistItem->partID()), Qt::UserRole+1);
|
|
lpItems.at(z)->setData(QVariant::fromValue(m_lpPartDistributorList), Qt::UserRole+2);
|
|
}
|
|
|
|
if(lpRoot)
|
|
lpRoot->appendRow(lpItems);
|
|
else
|
|
m_lpPartListModel->appendRow(lpItems);
|
|
if(!m_bPartlistLoading)
|
|
m_bSomethingChanged = true;
|
|
}
|
|
|
|
bool cPartlistWindow::save(qint32 id)
|
|
{
|
|
QSqlQuery query;
|
|
|
|
query.prepare("DELETE FROM partlistitem WHERE partlistID = :partlistID;");
|
|
query.bindValue(":partlistID", id);
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
|
|
query.prepare("UPDATE partlist SET name=:name, description=:description WHERE id=:id;");
|
|
query.bindValue(":name", ui->m_lpName->text());
|
|
query.bindValue(":description", ui->m_lpDescription->document()->toPlainText());
|
|
query.bindValue(":id", id);
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
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, 3));
|
|
QStandardItem* lpDistributorItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 4));
|
|
QStandardItem* lpStateItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 5));
|
|
QStandardItem* lpPriceItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 6));
|
|
QStandardItem* lpDescriptionItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 7));
|
|
|
|
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<qint32>(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", cPartlistItem::state(lpStateItem->text()));
|
|
query.bindValue(":description", lpDescriptionItem->text());
|
|
query.bindValue(":price", lpPriceItem->text().toDouble());
|
|
|
|
if(!query.exec())
|
|
{
|
|
myDebug << query.lastError().text();
|
|
return(false);
|
|
}
|
|
}
|
|
|
|
m_bSomethingChanged = false;
|
|
|
|
partlistChanged(this);
|
|
|
|
return(true);
|
|
}
|
|
|
|
bool cPartlistWindow::somethingChanged()
|
|
{
|
|
return(m_bSomethingChanged);
|
|
}
|
|
|
|
bool cPartlistWindow::somethingSelected()
|
|
{
|
|
if(ui->m_lpPartList->selectionModel()->selectedRows().count())
|
|
return(true);
|
|
return(false);
|
|
}
|
|
|
|
//void cPartlistWindow::on_m_lpPartList_doubleClicked(const QModelIndex &/*index*/)
|
|
//{
|
|
// onPartEdit();
|
|
//}
|
|
|
|
void cPartlistWindow::partAdd()
|
|
{
|
|
onPartAdd();
|
|
}
|
|
|
|
void cPartlistWindow::partEdit()
|
|
{
|
|
onPartEdit();
|
|
}
|
|
|
|
void cPartlistWindow::partDelete()
|
|
{
|
|
onPartDelete();
|
|
}
|
|
|
|
void cPartlistWindow::on_m_lpPartList_clicked(const QModelIndex &index)
|
|
{
|
|
selectionChanged(index);
|
|
}
|
|
|
|
void cPartlistWindow::on_m_lpPartList_customContextMenuRequested(const QPoint &pos)
|
|
{
|
|
QMenu* lpMenu = new QMenu(this);
|
|
|
|
lpMenu->addAction("add", this, SLOT(onPartAdd()));
|
|
|
|
if(somethingSelected())
|
|
{
|
|
lpMenu->addAction("edit", this, SLOT(onPartEdit()));
|
|
lpMenu->addAction("delete", this, SLOT(onPartDelete()));
|
|
}
|
|
|
|
lpMenu->popup(ui->m_lpPartList->viewport()->mapToGlobal(pos));
|
|
}
|
|
|
|
void cPartlistWindow::onPartAdd()
|
|
{
|
|
cPartlistItemEditDialog* lpDialog = new cPartlistItemEditDialog(this);
|
|
lpDialog->setList(m_lpDistributorList, m_lpPartGroupList, m_lpPartList, m_lpPartDistributorList);
|
|
|
|
if(lpDialog->exec() == QDialog::Rejected)
|
|
{
|
|
delete lpDialog;
|
|
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<QStandardItem*> lpItems;
|
|
|
|
for(int z = 0;z < m_lpPartListModel->columnCount();z++)
|
|
lpItems.append(new QStandardItem);
|
|
|
|
lpItems.at(0)->setText(szReference.split("\n").join(", "));
|
|
lpItems.at(1)->setText(QString::number(szReference.split("\n").join(", ").split(", ").count()));
|
|
lpItems.at(1)->setTextAlignment(Qt::AlignRight);
|
|
if(lpPart)
|
|
{
|
|
lpItems.at(2)->setText(lpPart->partGroup()->name());
|
|
lpItems.at(3)->setText(lpPart->name());
|
|
lpItems.at(3)->setData(lpPart->id(), Qt::UserRole);
|
|
}
|
|
if(lpDistributor)
|
|
lpItems.at(4)->setText(lpDistributor->name());
|
|
lpItems.at(5)->setText(szState);
|
|
lpItems.at(6)->setText(QString::number(dPrice, 'f', 2));
|
|
lpItems.at(6)->setTextAlignment(Qt::AlignRight);
|
|
lpItems.at(7)->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;
|
|
|
|
if(!m_bPartlistLoading)
|
|
m_bSomethingChanged = true;
|
|
|
|
partlistChanged(this);
|
|
}
|
|
|
|
void cPartlistWindow::onPartEdit()
|
|
{
|
|
cPartlistItemEditDialog* lpDialog = new cPartlistItemEditDialog(this);
|
|
lpDialog->setList(m_lpDistributorList, m_lpPartGroupList, m_lpPartList, m_lpPartDistributorList);
|
|
|
|
QModelIndex index = ui->m_lpPartList->currentIndex();
|
|
QStandardItem* lpItem = m_lpPartListModel->itemFromIndex(index);
|
|
|
|
QStandardItem* lpReferenceItem;
|
|
QStandardItem* lpCountItem;
|
|
QStandardItem* lpPartGroupItem;
|
|
QStandardItem* lpPartItem;
|
|
QStandardItem* lpDistributorItem;
|
|
QStandardItem* lpStateItem;
|
|
QStandardItem* lpPriceItem;
|
|
QStandardItem* lpDescriptionItem;
|
|
|
|
if(lpItem->parent())
|
|
{
|
|
QStandardItem* lpParent = lpItem->parent();
|
|
lpReferenceItem = lpParent->child(index.row(), 0);
|
|
lpCountItem = lpParent->child(index.row(), 1);
|
|
lpPartGroupItem = lpParent->child(index.row(), 2);
|
|
lpPartItem = lpParent->child(index.row(), 3);
|
|
lpDistributorItem = lpParent->child(index.row(), 4);
|
|
lpStateItem = lpParent->child(index.row(), 5);
|
|
lpPriceItem = lpParent->child(index.row(), 6);
|
|
lpDescriptionItem = lpParent->child(index.row(), 7);
|
|
}
|
|
else
|
|
{
|
|
lpReferenceItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 0));
|
|
lpCountItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 1));
|
|
lpPartGroupItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 2));
|
|
lpPartItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 3));
|
|
lpDistributorItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 4));
|
|
lpStateItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 5));
|
|
lpPriceItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 6));
|
|
lpDescriptionItem = m_lpPartListModel->itemFromIndex(index.model()->index(index.row(), 7));
|
|
}
|
|
|
|
lpDialog->setValues(lpReferenceItem->text(), lpPartGroupItem->text(), lpPartItem->text(), lpDistributorItem->text(), lpStateItem->text(), lpPriceItem->text().toDouble(), lpDescriptionItem->text());
|
|
|
|
if(!lpItem->parent())
|
|
{
|
|
for(int x = 0;x < lpItem->rowCount();x++)
|
|
{
|
|
lpReferenceItem = lpItem->child(x, 0);
|
|
lpCountItem = lpItem->child(x, 1);
|
|
lpPartGroupItem = lpItem->child(x, 2);
|
|
lpPartItem = lpItem->child(x, 3);
|
|
lpDistributorItem = lpItem->child(x, 4);
|
|
lpStateItem = lpItem->child(x, 5);
|
|
lpPriceItem = lpItem->child(x, 6);
|
|
lpDescriptionItem = lpItem->child(x, 7);
|
|
lpDialog->addReplace(lpReferenceItem->text(), lpPartGroupItem->text(), lpPartItem->text(), lpDistributorItem->text(), lpStateItem->text(), lpPriceItem->text().toDouble(), lpDescriptionItem->text());
|
|
}
|
|
}
|
|
|
|
if(lpDialog->exec() == QDialog::Rejected)
|
|
{
|
|
delete lpDialog;
|
|
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();
|
|
|
|
lpReferenceItem->setText(szReference.split("\n").join(", "));
|
|
lpCountItem->setText(QString::number(szReference.split("\n").join(", ").split(", ").count()));
|
|
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;
|
|
|
|
if(!m_bPartlistLoading)
|
|
m_bSomethingChanged = true;
|
|
|
|
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());
|
|
|
|
if(!m_bPartlistLoading)
|
|
m_bSomethingChanged = true;
|
|
|
|
partlistChanged(this);
|
|
}
|
|
|
|
void cPartlistWindow::onPartlistItemChanged(QStandardItem*)
|
|
{
|
|
if(m_bPartlistLoading)
|
|
return;
|
|
|
|
m_bSomethingChanged = true;
|
|
partlistChanged(this);
|
|
}
|
|
|
|
bool cPartlistWindow::canClose()
|
|
{
|
|
return(close());
|
|
}
|
|
|
|
cPartlistItemList cPartlistWindow::itemList(bool bMerge)
|
|
{
|
|
cPartlistItemList list;
|
|
|
|
for(int x = 0;x < m_lpPartListModel->rowCount();x++)
|
|
{
|
|
QStandardItem* lpReferenceItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 0));
|
|
//QStandardItem* lpCountItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 1));
|
|
QStandardItem* lpGroupItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 2));
|
|
QStandardItem* lpPartItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 3));
|
|
QStandardItem* lpDistributorItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 4));
|
|
QStandardItem* lpStateItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 5));
|
|
QStandardItem* lpPriceItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 6));
|
|
QStandardItem* lpDescriptionItem = m_lpPartListModel->itemFromIndex(m_lpPartListModel->index(x, 7));
|
|
|
|
QString szReference = lpReferenceItem->text();
|
|
cPart* lpPart = m_lpPartList->find(lpGroupItem->text(), lpPartItem->text());
|
|
cDistributor* lpDistributor = m_lpDistributorList->find(lpDistributorItem->text());
|
|
QString szState = lpStateItem->text();
|
|
qreal dPrice = lpPriceItem->text().toDouble();
|
|
QString szDescription = lpDescriptionItem->text();
|
|
|
|
if(bMerge)
|
|
{
|
|
cPartlistItem* lpPartlistItem = 0;
|
|
for(int y = 0;y < list.count();y++)
|
|
{
|
|
if(list.at(y)->partID() == lpPart->id())
|
|
{
|
|
if(lpDistributor)
|
|
{
|
|
if(list.at(y)->distributorID() == lpDistributor->id())
|
|
lpPartlistItem = list.at(y);
|
|
}
|
|
}
|
|
if(lpPartlistItem)
|
|
lpPartlistItem->setReference(QString("%1, %2").arg(lpPartlistItem->reference()).arg(szReference));
|
|
}
|
|
|
|
if(!lpPartlistItem)
|
|
{
|
|
lpPartlistItem = list.add(x);
|
|
lpPartlistItem->setReference(szReference);
|
|
lpPartlistItem->setPartID(lpPart->id());
|
|
if(lpDistributor)
|
|
lpPartlistItem->setDistributorID(lpDistributor->id());
|
|
lpPartlistItem->setState(cPartlistItem::state(szState));
|
|
lpPartlistItem->setPrice(dPrice);
|
|
lpPartlistItem->setDescription(szDescription);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
cPartlistItem* lpPartlistItem = list.add(x);
|
|
lpPartlistItem->setReference(szReference);
|
|
lpPartlistItem->setPartID(lpPart->id());
|
|
if(lpDistributor)
|
|
lpPartlistItem->setDistributorID(lpDistributor->id());
|
|
lpPartlistItem->setState(cPartlistItem::state(szState));
|
|
lpPartlistItem->setPrice(dPrice);
|
|
lpPartlistItem->setDescription(szDescription);
|
|
}
|
|
}
|
|
|
|
return(list);
|
|
}
|
|
|
|
void cPartlistWindow::exportList(const QString& szFileName)
|
|
{
|
|
QFileInfo fileInfo(szFileName);
|
|
QString szType = fileInfo.suffix();
|
|
|
|
if(!szType.compare("xlsx", Qt::CaseInsensitive))
|
|
writeXLSX(szFileName);
|
|
else if(!szType.compare("csv", Qt::CaseInsensitive))
|
|
writeText(szFileName);
|
|
else if(!szType.compare("txt", Qt::CaseInsensitive))
|
|
writeText(szFileName);
|
|
else if(!szType.compare("xml", Qt::CaseInsensitive))
|
|
writeXML(szFileName);
|
|
else if(!szType.compare("pdf", Qt::CaseInsensitive))
|
|
writePDF(szFileName);
|
|
}
|
|
|
|
void cPartlistWindow::writeXLSX(const QString& szFileName)
|
|
{
|
|
QXlsx::Document xlsx;
|
|
QXlsx::Format fmt;
|
|
fmt.setFontBold(true);
|
|
xlsx.write(1, 1, "empty");
|
|
xlsx.write(2, 1, "empty", fmt);
|
|
QFont font = xlsx.cellAt(1, 1)->format().font();
|
|
QFont fontBold = xlsx.cellAt(2, 1)->format().font();
|
|
fmt.setFontBold(false);
|
|
xlsx.write(1, 1, "");
|
|
xlsx.write(2, 1, "", fmt);
|
|
|
|
qint16 iHeight = 0;
|
|
qreal dReference = 0;
|
|
qreal dCount = 0;
|
|
qreal dGroup = 0;
|
|
qreal dPart = 0;
|
|
qreal dDistributor = 0;
|
|
qreal dState = 0;
|
|
qreal dPrice = 0;
|
|
qreal dDescription = 0;
|
|
|
|
QXlsx::Format format;
|
|
QXlsx::Format formatBig;
|
|
QXlsx::Format formatMerged;
|
|
QXlsx::Format formatCurrency;
|
|
QString szNumberFormat("_-\"€\"\\ * #,##0.00_-;\\-\"€\"\\ * #,##0.00_-;_-\"€\"\\ * \"-\"??_-;_-@_-");
|
|
|
|
format.setFontBold(true);
|
|
|
|
formatBig.setFontBold(true);
|
|
formatBig.setFontSize(16);
|
|
|
|
formatMerged.setHorizontalAlignment(QXlsx::Format::AlignLeft);
|
|
formatMerged.setVerticalAlignment(QXlsx::Format::AlignTop);
|
|
|
|
formatCurrency.setNumberFormat(szNumberFormat);
|
|
|
|
xlsx.write(1, 1, ui->m_lpName->text(), formatBig);
|
|
xlsx.write(2, 1, ui->m_lpDescription->toPlainText());
|
|
|
|
xlsx.write(4, 1, tr("reference"), format);
|
|
xlsx.write(4, 2, tr("count"), format);
|
|
xlsx.write(4, 3, tr("group"), format);
|
|
xlsx.write(4, 4, tr("part"), format);
|
|
xlsx.write(4, 5, tr("distributor"), format);
|
|
xlsx.write(4, 6, tr("state"), format);
|
|
xlsx.write(4, 7, tr("price"), format);
|
|
xlsx.write(4, 8, tr("description"), format);
|
|
|
|
metrics(fontBold, dReference, iHeight, tr("reference"));
|
|
metrics(fontBold, dCount, iHeight, tr("count"));
|
|
metrics(fontBold, dGroup, iHeight, tr("group"));
|
|
metrics(fontBold, dPart, iHeight, tr("part"));
|
|
metrics(fontBold, dDistributor, iHeight, tr("distributor"));
|
|
metrics(fontBold, dState, iHeight, tr("state"));
|
|
metrics(fontBold, dPrice, iHeight, tr("price"));
|
|
metrics(fontBold, dDescription, iHeight, tr("description"));
|
|
|
|
cPartlistItemList list = itemList(true);
|
|
|
|
for(int x = 0;x < list.count();x++)
|
|
{
|
|
cPartlistItem* lpItem = list.at(x);
|
|
cPart* lpPart = m_lpPartList->find(lpItem->partID());
|
|
cDistributor* lpDistributor = m_lpDistributorList->find(lpItem->distributorID());
|
|
|
|
xlsx.write(x+5, 1, lpItem->reference());
|
|
xlsx.write(x+5, 2, lpItem->reference().split(", ").count());
|
|
xlsx.write(x+5, 3, lpPart->partGroup()->name());
|
|
xlsx.write(x+5, 4, lpPart->name());
|
|
if(lpDistributor)
|
|
xlsx.write(x+5, 5, lpDistributor->name());
|
|
xlsx.write(x+5, 6, lpItem->stateString());
|
|
xlsx.write(x+5, 7, lpItem->price(), formatCurrency);
|
|
xlsx.write(x+5, 8, lpItem->description());
|
|
|
|
metrics(font, dReference, iHeight, lpItem->reference());
|
|
metrics(font, dCount, iHeight, QString::number(lpItem->reference().split(", ").count()));
|
|
metrics(font, dGroup, iHeight, lpPart->partGroup()->name());
|
|
metrics(font, dPart, iHeight, lpPart->name());
|
|
if(lpDistributor)
|
|
metrics(font, dDistributor, iHeight, lpDistributor->name());
|
|
metrics(font, dState, iHeight, lpItem->stateString());
|
|
metrics(font, dPrice, iHeight, QString("€ ") + QString::number(lpItem->price(), 'f', 2));
|
|
metrics(font, dDescription, iHeight, lpItem->description());
|
|
}
|
|
|
|
if(dReference > 25)
|
|
dReference = 50;
|
|
xlsx.setColumnWidth( 1, dReference*1.2);
|
|
xlsx.setColumnWidth( 2, dCount*1.2);
|
|
xlsx.setColumnWidth( 3, dGroup*1.2);
|
|
xlsx.setColumnWidth( 4, dPart*1.2);
|
|
xlsx.setColumnWidth( 5, dDistributor*1.2);
|
|
xlsx.setColumnWidth( 6, dState*1.2);
|
|
xlsx.setColumnWidth( 7, dPrice*1.2);
|
|
xlsx.setColumnWidth( 8, dDescription*1.2);
|
|
|
|
xlsx.saveAs(szFileName);
|
|
}
|
|
|
|
void cPartlistWindow::writeText(const QString& szFileName)
|
|
{
|
|
/*
|
|
QFile file(szFileName);
|
|
|
|
if(!file.open(QFile::WriteOnly | QFile::Text))
|
|
return;
|
|
|
|
QTextStream out(&file);
|
|
|
|
out << "\"" << tr("Group") << "\";\"" << tr("Name") << "\";\"" << tr("Description") << "\";\"" << tr("Link") << "\"\n";
|
|
|
|
for(int x = 0;x < m_lpPartList->count();x++)
|
|
{
|
|
cPart* lpPart = m_lpPartList->at(x);
|
|
out << "\"" << lpPart->partGroup()->name() << "\";\"" << lpPart->name() << "\";\"" << lpPart->description() << "\";\"" << lpPart->link() << "\";\"" << "\"\n";
|
|
}
|
|
|
|
file.flush();
|
|
file.close();
|
|
*/
|
|
}
|
|
|
|
void cPartlistWindow::writeXML(const QString& szFileName)
|
|
{
|
|
}
|
|
|
|
void cPartlistWindow::writePDF(const QString& szFileName)
|
|
{
|
|
}
|