File indexing completed on 2024-05-05 17:18:51

0001 /***************************************************************************
0002  * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr
0003  * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  ***************************************************************************/
0006 /** @file
0007  * This file defines classes SKGUnitComboBox.
0008  *
0009  * @author Stephane MANKOWSKI / Guillaume DE BURE
0010  */
0011 #include "skgunitcombobox.h"
0012 
0013 #include <klocalizedstring.h>
0014 
0015 #include "skgdocumentbank.h"
0016 #include "skgmainpanel.h"
0017 #include "skgunitvalueobject.h"
0018 
0019 SKGUnitComboBox::SKGUnitComboBox(QWidget* iParent): SKGComboBox(iParent), m_document(nullptr), m_fillWhereClause(QStringLiteral("t_type!='I'"))
0020 {
0021 }
0022 
0023 SKGUnitComboBox::~SKGUnitComboBox()
0024 {
0025     m_document = nullptr;
0026 }
0027 
0028 void SKGUnitComboBox::setDocument(SKGDocumentBank* iDocument)
0029 {
0030     m_document = iDocument;
0031     connect(m_document, &SKGDocument::tableModified, this, &SKGUnitComboBox::dataModified);
0032     dataModified(QLatin1String(""), 0);
0033 }
0034 
0035 void SKGUnitComboBox::setWhereClauseCondition(const QString& iCondition)
0036 {
0037     m_fillWhereClause = iCondition;
0038     dataModified(QLatin1String(""), 0);
0039 }
0040 
0041 SKGUnitObject SKGUnitComboBox::getUnit()
0042 {
0043     SKGUnitObject unit(m_document);
0044     QString unitName = text();
0045     if ((m_document != nullptr) && !unitName.isEmpty()) {
0046         SKGError err;
0047         err = unit.setSymbol(unitName);
0048         if (!unit.exist()) {
0049             IFOKDO(err, unit.setName(unitName))
0050             IFOKDO(err, unit.save())
0051 
0052             SKGUnitValueObject unitVal;
0053             IFOKDO(err, unit.addUnitValue(unitVal))
0054             IFOKDO(err, unitVal.setDate(QDate::currentDate()))
0055             IFOKDO(err, unitVal.setQuantity(1))
0056             IFOKDO(err, unitVal.save())
0057 
0058             IFOK(err) m_document->sendMessage(i18nc("An information message",  "Unit '%1' has been created", text()), SKGDocument::Positive);
0059         } else {
0060             err = unit.load();
0061         }
0062     }
0063     return unit;
0064 }
0065 
0066 void SKGUnitComboBox::setUnit(const SKGUnitObject& iUnit)
0067 {
0068     if (text() != iUnit.getSymbol()) {
0069         setText(iUnit.getSymbol());
0070 
0071         emit unitChanged();
0072     }
0073 }
0074 
0075 void SKGUnitComboBox::refershList()
0076 {
0077     // Fill comboboxes
0078     if (m_document != nullptr) {
0079         SKGMainPanel::fillWithDistinctValue(QList<QWidget*>() << this, m_document, QStringLiteral("unit"), QStringLiteral("ifnull(t_symbol,t_name)"), m_fillWhereClause);
0080         SKGServices::SKGUnitInfo primary = m_document->getPrimaryUnit();
0081         if (!primary.Symbol.isEmpty()) {
0082             this->setCurrentIndex(this->findText(primary.Symbol));
0083         }
0084     }
0085 }
0086 
0087 void SKGUnitComboBox::dataModified(const QString& iTableName, int iIdTransaction)
0088 {
0089     Q_UNUSED(iIdTransaction)
0090 
0091     // Refresh widgets
0092     if (m_document != nullptr) {
0093         QSqlDatabase* db = m_document->getMainDatabase();
0094         setEnabled(db != nullptr);
0095         if (db != nullptr && (iTableName == QStringLiteral("unit") || iTableName.isEmpty())) {
0096             refershList();
0097         }
0098     }
0099 }
0100 
0101