Esempio n. 1
0
void itemList::sFillList()
{
  if (_useQuery)
  {
    _item->populate(_sql, _itemid);
  }
  else
  { 
      QString pre;
      QString post;
      if(_x_preferences && _x_preferences->boolean("ListNumericItemNumbersFirst"))
      {
        pre =  "SELECT DISTINCT ON (toNumeric(item_number, 999999999999999), item_number) item_id, item_number, (item_descrip1 || ' ' || item_descrip2)";
        post = "ORDER BY toNumeric(item_number, 999999999999999), item_number";
      }
      else
      {
        pre =  "SELECT DISTINCT item_id, item_number, (item_descrip1 || ' ' || item_descrip2)";
        post = "ORDER BY item_number";
      }

      QStringList clauses;
      clauses = _extraClauses;
      if(!(_itemType & ItemLineEdit::cActive) && !_showInactive->isChecked())
        clauses << "(item_active)";

      _item->populate(buildItemLineEditQuery(pre, clauses, post, _itemType), _itemid);
  }
}
Esempio n. 2
0
void itemAliasList::sFillList()
{
  _item->clear();

  if (_alias->text().trimmed().length() == 0)
    return;

  QString pre( "SELECT item_id, itemalias_id, itemalias_number, item_number, (item_descrip1 || ' ' || item_descrip2) AS item_descrip "
               "FROM (SELECT DISTINCT item_id, item_number, item_descrip1, item_descrip2");
  QString post(") AS data, itemalias "
               "WHERE ( (itemalias_item_id=item_id)"
               " AND (UPPER(itemalias_number)~UPPER(:searchString)) )" );

  if(_x_preferences && _x_preferences->boolean("ListNumericItemNumbersFirst"))
    post += " ORDER BY toNumeric(item_number, 999999999999999), item_number";
  else
    post += " ORDER BY item_number";

  QStringList clauses;
  clauses = _extraClauses;
  if ( !(_itemType & ItemLineEdit::cActive) && !_showInactive->isChecked())
    clauses << "(item_active)";

  XSqlQuery alias;
  alias.prepare(buildItemLineEditQuery(pre, clauses, post, _itemType));
  alias.bindValue(":searchString", _alias->text().trimmed());
  alias.exec();
  if (alias.first())
  {
    if (_useQuery)
    {
      XSqlQuery item(_sql);
      if (item.first())
      {
          XTreeWidgetItem *last = NULL;
          do
          {
            if (item.findFirst("item_id", alias.value("item_id").toInt()) != -1)
              last = new XTreeWidgetItem( _item, last, alias.value("item_id").toInt(), alias.value("itemalias_id").toInt(),
                                        alias.value("itemalias_number").toString(), alias.value("item_number").toString(), alias.value("item_descrip").toString() );
          }
          while (alias.next());
      }
    }
    else
      _item->populate(alias, TRUE);
  }
}
Esempio n. 3
0
void itemList::sFillList()
{
  _listTab->clear();
  if (_useQuery)
  {
    _listTab->populate(_sql, _itemid);
  }
  else
  {
      QString pre;
      QString post;
      if(_x_preferences && _x_preferences->boolean("ListNumericItemNumbersFirst"))
      {
        pre =  "SELECT DISTINCT ON (toNumeric(item_number, 999999999999999), item_number) item_id, item_number,"
               "(item_descrip1 || ' ' || item_descrip2) AS itemdescrip, item_upccode ";
        post = "ORDER BY toNumeric(item_number, 999999999999999), item_number, item_upccode ";
      }
      else
      {
        pre =  "SELECT DISTINCT item_id, item_number,"
               "(item_descrip1 || ' ' || item_descrip2) AS itemdescrip, item_upccode ";
        post = "ORDER BY item_number";
      }

      QStringList clauses;
      clauses = _extraClauses;
      if(!(_itemType & ItemLineEdit::cActive) && !_showInactive->isChecked())
        clauses << "(item_active)";

      if (_showMake->isChecked())
            _itemType = (_itemType | ItemLineEdit::cGeneralManufactured);
      else if (_itemType & ItemLineEdit::cGeneralManufactured)
            _itemType = (_itemType ^ ItemLineEdit::cGeneralManufactured);

      if (_showBuy->isChecked())
            _itemType = (_itemType | ItemLineEdit::cGeneralPurchased);
      else if (_itemType & ItemLineEdit::cGeneralPurchased)
            _itemType = (_itemType ^ ItemLineEdit::cGeneralPurchased);

      setWindowTitle(buildItemLineEditTitle(_itemType, tr("Items")));

      _listTab->populate(buildItemLineEditQuery(pre, clauses, post, _itemType, false), _itemid);
  }
}
Esempio n. 4
0
void ItemLineEdit::sParse()
{
  if (!_parsed)
  {
    _parsed = TRUE;

    if (text().length() == 0)
    {
      setId(-1);
      return;
    }
    else if (_useValidationQuery)
    {
      XSqlQuery item;
      item.prepare("SELECT item_id FROM item WHERE (item_number = :searchString OR item_upccode = :searchString);");
      item.bindValue(":searchString", text().trimmed().toUpper());
      item.exec();
      if (item.first())
      {
        int itemid = item.value("item_id").toInt();
        item.prepare(_validationSql);
        item.bindValue(":item_id", itemid);
        item.exec();
        if (item.size() > 1)
        {
          ParameterList params;
          params.append("search", text().trimmed().toUpper());
          params.append("searchNumber");
          params.append("searchUpc");
          sSearch(params);
          return;
        }
        else if (item.first())
        {
          setId(itemid);
          return;
        }
      }
    }
    else if (_useQuery)
    {
      XSqlQuery item;
      item.prepare(_sql);
      item.exec();
      if (item.first())
      {
        do
        {
          if (item.value("item_number").toString().startsWith(text().trimmed().toUpper()))
          {
            setId(item.value("item_id").toInt());
            return;
          }
        }
        while (item.next());
      }
    }
    else
    {
      XSqlQuery item;

      QString pre( "SELECT DISTINCT item_id, item_number AS number, "
                   "(item_descrip1 || ' ' || item_descrip2) AS name, "
                   "item_upccode AS description " );

      QStringList clauses;
      clauses = _extraClauses;
      clauses << "(item_number ~* :searchString OR item_upccode ~* :searchString)";
      item.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type).replace(";"," ORDER BY item_number LIMIT 1;"));
      item.bindValue(":searchString", QString(text().trimmed().toUpper()).prepend("^"));
      item.exec();
      if (item.first())
      {
        setId(item.value("item_id").toInt());
        return;
      }
    }
    setId(-1);
  }
}
Esempio n. 5
0
void ItemLineEdit::sHandleCompleter()
{
  if (!hasFocus())
    return;

  QString stripped = text().trimmed().toUpper();
  if (stripped.isEmpty())
    return;

  int width = 0;
  QSqlQueryModel* model = static_cast<QSqlQueryModel *>(_completer->model());
  QTreeView * view = static_cast<QTreeView *>(_completer->popup());
  _parsed = true;
  XSqlQuery numQ;

  if (_useQuery)
  {
    numQ.prepare(QString("SELECT * FROM (%1) data WHERE (item_number ~* :number) LIMIT 10")
                 .arg(QString(_sql)).remove(";"));
    numQ.bindValue(":number", "^" + stripped);
  }
  else
  {
    QString pre( "SELECT DISTINCT item_id, item_number, "
                 "(item_descrip1 || ' ' || item_descrip2) AS itemdescrip, "
                 "item_upccode AS description " );

    QStringList clauses;
    clauses = _extraClauses;
    clauses << "(item_number ~* :searchString OR item_upccode ~* :searchString)";
    numQ.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type).replace(";"," ORDER BY item_number LIMIT 10;"));
    numQ.bindValue(":searchString", QString(text().trimmed().toUpper()).prepend("^"));
  }

  numQ.exec();
  if (numQ.first())
  {
    int numberCol = numQ.record().indexOf("item_number");
    int descripCol = numQ.record().indexOf("itemdescrip");
    model->setQuery(numQ);
    _completer->setCompletionPrefix(stripped);
    for (int i = 0; i < model->columnCount(); i++)
    {
      if ( (i == numberCol) ||
           (i == descripCol) )
      {
        view->resizeColumnToContents(i);
        width += view->columnWidth(i);
      }
      else
        view->hideColumn(i);
    }
  }
  else
    model->setQuery(QSqlQuery());

  if (width > 350)
    width = 350;

  QRect rect;
  rect.setHeight(height());
  rect.setWidth(width);
  rect.setBottomLeft(QPoint(0, height() - 2));
  _completer->complete(rect);
  _parsed = false;
}
Esempio n. 6
0
void ItemLineEdit::silentSetId(const int pId)
{
  XSqlQuery item;
  bool      found = FALSE;

  _parsed = TRUE;

  if (_useValidationQuery)
  {
    item.prepare(_validationSql);
    item.bindValue(":item_id", pId);
    item.exec();
    if (item.first())
      found = TRUE;
  }
  else if (_useQuery)
  {
    item.prepare(_sql);
    item.exec();
    found = (item.findFirst("item_id", pId) != -1);
  }
  else if (pId != -1)
  {
    QString pre( "SELECT DISTINCT item_number, item_descrip1, item_descrip2,"
                 "                uom_name, item_type, item_config, item_upccode");

    QStringList clauses;
    clauses = _extraClauses;
    clauses << "(item_id=:item_id)";

    item.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type));
    item.bindValue(":item_id", pId);
    item.exec();

    found = item.first();
  }

  if (found)
  {
    if (completer())
    {
      disconnect(this, SIGNAL(textChanged(QString)), this, SLOT(sHandleCompleter()));
      static_cast<QSqlQueryModel* >(completer()->model())->setQuery(QSqlQuery());
    }

    _itemNumber = item.value("item_number").toString();
    _uom        = item.value("uom_name").toString();
    _itemType   = item.value("item_type").toString();
    _configured = item.value("item_config").toBool();
    _upc        = item.value("item_upccode").toString();
    _id         = pId;
    _valid      = TRUE;

    setText(item.value("item_number").toString());
    emit aliasChanged("");
    emit typeChanged(_itemType);
    emit descrip1Changed(item.value("item_descrip1").toString());
    emit descrip2Changed(item.value("item_descrip2").toString());
    emit uomChanged(item.value("uom_name").toString());
    emit configured(item.value("item_config").toBool());
    emit upcChanged(item.value("item_upccode").toString());
    
    emit valid(TRUE);

    if (completer())
      connect(this, SIGNAL(textChanged(QString)), this, SLOT(sHandleCompleter()));
  }
  else
  {
    _itemNumber = "";
    _uom        = "";
    _itemType   = "";
    _id         = -1;
    _upc        = "";
    _valid      = FALSE;

    setText("");

    emit aliasChanged("");
    emit typeChanged("");
    emit descrip1Changed("");
    emit descrip2Changed("");
    emit uomChanged("");
    emit configured(FALSE);
    emit upcChanged("");

    emit valid(FALSE);
  }
} 
Esempio n. 7
0
void ItemLineEdit::setItemNumber(const QString& pNumber)
{
  XSqlQuery item;
  bool      found = FALSE;

  _parsed = TRUE;

  if (pNumber == text())
    return;

  if (!pNumber.isEmpty())
  {
    if (_useValidationQuery)
    {
      item.prepare(_validationSql);
      item.bindValue(":item_number", pNumber);
      item.exec();
      if (item.first())
        found = TRUE;
    }
    else if (_useQuery)
    {
      item.prepare(_sql);
      item.exec();
      found = (item.findFirst("item_number", pNumber) != -1);
    }
    else if (pNumber != QString::Null())
    {
      QString pre( "SELECT DISTINCT item_id, item_number, item_descrip1, item_descrip2,"
                   "                uom_name, item_type, item_config, item_upccode");

      QStringList clauses;
      clauses = _extraClauses;
      clauses << "(item_number=:item_number OR item_upccode=:item_number)";

      item.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type));
      item.bindValue(":item_number", pNumber);
      item.exec();
      
      if (item.size() > 1)
      { 
        ParameterList params;
        params.append("search", pNumber);
        params.append("searchNumber");
        params.append("searchUpc");
        sSearch(params);
        return;
      }
      else
        found = item.first();
    }
  }
  if (found)
  {
    _itemNumber = pNumber;
    _uom        = item.value("uom_name").toString();
    _itemType   = item.value("item_type").toString();
    _configured = item.value("item_config").toBool();
    _id         = item.value("item_id").toInt();
    _upc        = item.value("item_upccode").toInt();
    _valid      = TRUE;

    setText(item.value("item_number").toString());

    emit aliasChanged("");
    emit typeChanged(_itemType);
    emit descrip1Changed(item.value("item_descrip1").toString());
    emit descrip2Changed(item.value("item_descrip2").toString());
    emit uomChanged(item.value("uom_name").toString());
    emit configured(item.value("item_config").toBool());
    emit upcChanged(item.value("item_upccode").toString());
    
    emit valid(TRUE);
  }
  else
  {
    _itemNumber = "";
    _uom        = "";
    _itemType   = "";
    _id         = -1;
    _valid      = FALSE;
    _upc        = "";

    setText("");

    emit aliasChanged("");
    emit typeChanged("");
    emit descrip1Changed("");
    emit descrip2Changed("");
    emit uomChanged("");
    emit configured(FALSE);
    emit upcChanged("");

    emit valid(FALSE);
  }
}
Esempio n. 8
0
void itemSearch::sFillList()
{
  _search->setText(_search->text().trimmed().toUpper());
  if (_search->text().length() == 0)
    return;

  QString sql;

  if (_useQuery)
  {
    QStringList clauses;
    if (!_showInactive->isChecked())
      clauses << "(item_active)";

    QStringList subClauses;
    if (_searchNumber->isChecked())
      subClauses << "(item_number ~* :searchString)";

    if (_searchName->isChecked())
      subClauses << "(item_descrip1 ~* :searchString)";

    if (_searchDescrip->isChecked())
      subClauses << "(item_descrip2 ~* :searchString)";

    if (_searchUpc->isChecked())
      subClauses << "(item_upccode ~* :searchString)";

    if(!subClauses.isEmpty())
      clauses << QString("( " + subClauses.join(" OR ") + " )");

    sql = "SELECT * FROM (" + _sql + ") AS dummy WHERE (" +
          clauses.join(" AND ") + ");" ;
  }
  else
  {
    if ( (!_searchNumber->isChecked()) &&
         (!_searchName->isChecked()) &&
         (!_searchDescrip->isChecked()) &&
         (!_searchUpc->isChecked()) )
    {
      _listTab->clear();
      return;
    }

    QString pre;
    QString post;
    if(_x_preferences && _x_preferences->boolean("ListNumericItemNumbersFirst"))
    {
      pre =  "SELECT DISTINCT ON (toNumeric(item_number, 999999999999999), item_number) item_id, item_number, (item_descrip1 || ' ' || item_descrip2), item_upccode ";
      post = "ORDER BY toNumeric(item_number, 999999999999999), item_number";
    }
    else
    {
      pre =  "SELECT DISTINCT item_id, item_number AS number, "
             "(item_descrip1 || ' ' || item_descrip2) AS name, "
             "item_upccode AS description ";
      post = "ORDER BY item_number";
    }

    QStringList clauses;
    clauses = _extraClauses;
    if(!(_itemType & ItemLineEdit::cActive) && !_showInactive->isChecked())
      clauses << "(item_active)";

    QStringList subClauses;
    if (_searchNumber->isChecked())
      subClauses << "(item_number ~* :searchString)";

    if (_searchName->isChecked())
      subClauses << "(item_descrip1 ~* :searchString)";

    if (_searchDescrip->isChecked())
      subClauses << "(item_descrip2 ~* :searchString)";

    if (_searchUpc->isChecked())
      subClauses << "(item_upccode ~* :searchString)";

    if(!subClauses.isEmpty())
      clauses << QString("( " + subClauses.join(" OR ") + " )");

    sql = buildItemLineEditQuery(pre, clauses, post, _itemType);
  }

  XSqlQuery search;
  search.prepare(sql);
  search.bindValue(":searchString", _search->text());
  search.exec();
  _listTab->populate(search, _itemid);
}
Esempio n. 9
0
void ItemLineEdit::sParse()
{
    if (!_parsed)
    {
        _parsed = TRUE;

        if (text().length() == 0)
        {
            setId(-1);
            return;
        }

        else if (_useValidationQuery)
        {
            XSqlQuery item;
            item.prepare("SELECT item_id FROM item WHERE (item_number = :searchString);");
            item.bindValue(":searchString", text().stripWhiteSpace().upper());
            item.exec();
            if (item.first())
            {
                int itemid = item.value("item_id").toInt();
                item.prepare(_validationSql);
                item.bindValue(":item_id", itemid);
                item.exec();
                if (item.first())
                {
                    setId(itemid);
                    return;
                }
            }
        }

        else if (_useQuery)
        {
            XSqlQuery item;
            item.prepare(_sql);
            item.exec();
            if (item.findFirst("item_number", text().stripWhiteSpace().upper()) != -1)
            {
                setId(item.value("item_id").toInt());
                return;
            }
        }
        else
        {
            XSqlQuery item;

            QString pre( "SELECT DISTINCT item_id" );

            QStringList clauses;
            clauses = _extraClauses;
            clauses << "(item_number=:searchString)";

            item.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type));
            item.bindValue(":searchString", text().stripWhiteSpace().upper());
            item.exec();
            if (item.first())
            {
                setId(item.value("item_id").toInt());
                return;
            }
        }

        setId(-1);
        focusNextPrevChild(FALSE);
        QMessageBox::warning( this, tr("Invalid Item Number"),
                              tr( "<p>The Item Number you entered is Invalid.</p>") );
    }
}
Esempio n. 10
0
void ItemLineEdit::silentSetId(int pId)
{
    XSqlQuery item;
    bool      found = FALSE;

    _parsed = TRUE;

    if (_useValidationQuery)
    {
        item.prepare(_validationSql);
        item.bindValue(":item_id", pId);
        item.exec();
        if (item.first())
            found = TRUE;
    }
    else if (_useQuery)
    {
        item.prepare(_sql);
        item.exec();
        found = (item.findFirst("item_id", pId) != -1);
    }
    else if (pId != -1)
    {
        QString pre( "SELECT DISTINCT item_number, item_descrip1, item_descrip2,"
                     "                uom_name, item_type, item_config");

        QStringList clauses;
        clauses = _extraClauses;
        clauses << "(item_id=:item_id)";

        item.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type));
        item.bindValue(":item_id", pId);
        item.exec();

        found = item.first();
    }

    if (found)
    {
        _itemNumber = item.value("item_number").toString();
        _uom        = item.value("uom_name").toString();
        _itemType   = item.value("item_type").toString();
        _configured = item.value("item_config").toBool();
        _id         = pId;
        _valid      = TRUE;

        setText(item.value("item_number").toString());

        if (_mapper->model() &&
                _mapper->model()->data(_mapper->model()->index(_mapper->currentIndex(),_mapper->mappedSection(this))).toString() != text())
            _mapper->model()->setData(_mapper->model()->index(_mapper->currentIndex(),_mapper->mappedSection(this)), text());

        emit aliasChanged("");
        emit typeChanged(_itemType);
        emit descrip1Changed(item.value("item_descrip1").toString());
        emit descrip2Changed(item.value("item_descrip2").toString());
        emit uomChanged(item.value("uom_name").toString());
        emit configured(item.value("item_config").toBool());

        emit valid(TRUE);
    }
    else
    {
        _itemNumber = "";
        _uom        = "";
        _itemType   = "";
        _id         = -1;
        _valid      = FALSE;

        setText("");

        emit aliasChanged("");
        emit typeChanged("");
        emit descrip1Changed("");
        emit descrip2Changed("");
        emit uomChanged("");
        emit configured(FALSE);

        emit valid(FALSE);
    }
}
Esempio n. 11
0
void ItemLineEdit::setItemNumber(QString pNumber)
{
    XSqlQuery item;
    bool      found = FALSE;

    _parsed = TRUE;

    if (_useValidationQuery)
    {
        item.prepare(_validationSql);
        item.bindValue(":item_number", pNumber);
        item.exec();
        if (item.first())
            found = TRUE;
    }
    else if (_useQuery)
    {
        item.prepare(_sql);
        item.exec();
        found = (item.findFirst("item_number", pNumber) != -1);
    }
    else if (pNumber != QString::Null())
    {
        QString pre( "SELECT DISTINCT item_number, item_descrip1, item_descrip2,"
                     "                uom_name, item_type, item_config");

        QStringList clauses;
        clauses = _extraClauses;
        clauses << "(item_number=:item_number)";

        item.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type));
        item.bindValue(":item_number", pNumber);
        item.exec();

        found = item.first();
    }

    if (found)
    {
        _itemNumber = pNumber;
        _uom        = item.value("uom_name").toString();
        _itemType   = item.value("item_type").toString();
        _configured = item.value("item_config").toBool();
        _id         = item.value("item_id").toInt();
        _valid      = TRUE;

        setText(item.value("item_number").toString());

        emit aliasChanged("");
        emit typeChanged(_itemType);
        emit descrip1Changed(item.value("item_descrip1").toString());
        emit descrip2Changed(item.value("item_descrip2").toString());
        emit uomChanged(item.value("uom_name").toString());
        emit configured(item.value("item_config").toBool());

        emit valid(TRUE);
    }
    else
    {
        _itemNumber = "";
        _uom        = "";
        _itemType   = "";
        _id         = -1;
        _valid      = FALSE;

        setText("");

        emit aliasChanged("");
        emit typeChanged("");
        emit descrip1Changed("");
        emit descrip2Changed("");
        emit uomChanged("");
        emit configured(FALSE);

        emit valid(FALSE);
    }
}
Esempio n. 12
0
void itemSearch::sFillList()
{
  _item->clear();

  _search->setText(_search->text().stripWhiteSpace().upper());
  if (_search->text().length() == 0)
    return;

  if (_useQuery)
  {
    XSqlQuery item(_sql);
    if (item.first())
    {
      XTreeWidgetItem *last = NULL;
      bool          addToList;
      do
      {
        addToList = FALSE;

        if ( (_searchNumber->isChecked()) &&
             (item.value("item_number").toString().contains(_search->text(), FALSE)) )
          addToList = TRUE;
      
        if ( (_searchDescrip1->isChecked()) &&
             (item.value("item_descrip1").toString().contains(_search->text(), FALSE)) )
          addToList = TRUE;

        if ( (_searchDescrip2->isChecked()) &&
             (item.value("item_descrip2").toString().contains(_search->text(), FALSE)) )
          addToList = TRUE;

        if (addToList)
          last = new XTreeWidgetItem( _item, last, item.value("item_id").toInt(),
                                    item.value("item_number"),
                                    (item.value("item_descrip1").toString() + " " + item.value("item_descrip2").toString()) );
      }
      while (item.next());
    }
  }

  else
  { 
    if ( (!_searchNumber->isChecked()) &&
         (!_searchDescrip1->isChecked()) &&
         (!_searchDescrip2->isChecked()) )
    {
      _item->clear();
      return;
    }

    QString pre;
    QString post;
    if(_x_preferences && _x_preferences->boolean("ListNumericItemNumbersFirst"))
    {
      pre =  "SELECT DISTINCT ON (toNumeric(item_number, 999999999999999), item_number) item_id, item_number, (item_descrip1 || ' ' || item_descrip2)";
      post = "ORDER BY toNumeric(item_number, 999999999999999), item_number";
    }
    else
    {
      pre =  "SELECT DISTINCT item_id, item_number, (item_descrip1 || ' ' || item_descrip2)";
      post = "ORDER BY item_number";
    }


    QStringList clauses;
    clauses = _extraClauses;
    if(!(_itemType & ItemLineEdit::cActive) && !_showInactive->isChecked())
      clauses << "(item_active)";

    QStringList subClauses;
    if (_searchNumber->isChecked())
      subClauses << "(item_number ~* :searchString)";

    if (_searchDescrip1->isChecked())
      subClauses << "(item_descrip1 ~* :searchString)";

    if (_searchDescrip2->isChecked())
      subClauses << "(item_descrip2 ~* :searchString)";

    if(!subClauses.isEmpty())
      clauses << QString("( " + subClauses.join(" OR ") + " )");

    XSqlQuery search;
    search.prepare(buildItemLineEditQuery(pre, clauses, post, _itemType));
    search.bindValue(":searchString", _search->text());
    search.exec();
    _item->populate(search, _itemid);
  }
}
Esempio n. 13
0
void ItemLineEdit::sParse()
{
  if (DEBUG)
    qDebug("%s::sParse() entered with parsed %d, text [%s], "
           "_useValidationQuery %d, _useQuery %d",
           qPrintable(objectName()), _parsed, qPrintable(text()),
           _useValidationQuery, _useQuery);
  if (!_parsed)
  {
    _parsed = TRUE;

    if (text().length() == 0)
    {
      setId(-1);
      return;
    }
    else if (_useValidationQuery)
    {
      XSqlQuery item;
      if (completer())
        item.prepare("SELECT item_id"
                     "  FROM item"
                     " WHERE ((POSITION(:searchString IN item_number) = 1)"
                     "     OR (POSITION(:searchString IN item_upccode) = 1));");
      else
        item.prepare("SELECT item_id"
                     "  FROM item"
                     " WHERE (item_number = :searchString"
                     "     OR item_upccode = :searchString);");

      item.bindValue(":searchString", text().trimmed().toUpper());
      item.exec();
      while (item.next())
      {
        int itemid = item.value("item_id").toInt();
        XSqlQuery oneq;
        oneq.prepare(_validationSql);
        oneq.bindValue(":item_id", itemid);
        oneq.exec();
        if (oneq.size() > 1)
        {
          ParameterList params;
          params.append("search", text().trimmed().toUpper());
          params.append("searchNumber");
          params.append("searchUpc");
          sSearch(params);
          return;
        }
        else if (oneq.first())
        {
          setId(itemid);
          return;
        }
      }
    }
    else if (_useQuery)
    {
      XSqlQuery item;
      item.prepare(_sql);
      item.exec();
      if (item.first())
      {
        do
        {
          if (item.value("item_number").toString().startsWith(text().trimmed().toUpper()) ||
              item.value("item_upccode").toString().startsWith(text().trimmed().toUpper()))
          {
            setId(item.value("item_id").toInt());
            return;
          }
        }
        while (item.next());
      }
    }
    else
    {
      XSqlQuery item;

      QString pre( "SELECT DISTINCT item_id, item_number AS number, "
                   "(item_descrip1 || ' ' || item_descrip2) AS name, "
                   "item_upccode AS description " );

      QStringList clauses;
      clauses = _extraClauses;
      clauses << "((POSITION(:searchString IN item_number) = 1)"
              " OR (POSITION(:searchString IN item_upccode) = 1))";
      item.prepare(buildItemLineEditQuery(pre, clauses, QString::null, _type, true)
                               .replace(";"," ORDER BY item_number LIMIT 1;"));
      item.bindValue(":searchString", QString(text().trimmed().toUpper()));
      item.exec();
      if (item.first())
      {
        setId(item.value("item_id").toInt());
        return;
      }
    }
    setId(-1);
  }
}