void PoitemTableDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { const QAbstractItemModel *model = index.model(); QLineEdit *lineedit = 0; switch (index.column()) { case ITEM_NUMBER_COL: { ItemLineEdit *item = static_cast<ItemLineEdit*>(editor); if (model->data(model->index(index.row(), POITEM_ITEMSITE_ID_COL)).toInt() > 0) item->setItemsiteid(model->data(model->index(index.row(), POITEM_ITEMSITE_ID_COL)).toInt()); break; } case WAREHOUS_CODE_COL: { WComboBox *whs = static_cast<WComboBox*>(editor); whs->setId(model->data(model->index(index.row(), WAREHOUS_ID_COL)).toInt()); break; } case POITEM_VEND_ITEM_NUMBER_COL: case POITEM_QTY_ORDERED_COL: case POITEM_UNITPRICE_COL: case POITEM_FREIGHT_COL: lineedit = static_cast<QLineEdit*>(editor); lineedit->setText(model->data(index).toString()); break; case POITEM_DUEDATE_COL: { DLineEdit *duedate = static_cast<DLineEdit*>(editor); duedate->setDate(index.data().toDate()); break; } #ifdef QE_PROJECT case PRJ_NUMBER_COL: { ProjectLineEdit *prj = static_cast<ProjectLineEdit*>(editor); prj->setId(model->data(model->index(index.row(), POITEM_PRJ_ID_COL)).toInt()); break; } #endif #ifdef QE_NONINVENTORY case EXPCAT_CODE_COL: { ExpenseLineEdit *exp = static_cast<ExpenseLineEdit*>(editor); exp->setId(model->data(model->index(index.row(), POITEM_EXPCAT_ID_COL)).toInt()); break; } #endif default: break; } }
WWidget *FormWidgets::wComboBox() { WContainerWidget *result = new WContainerWidget(); topic("WComboBox", result); addText(tr("formwidgets-WComboBox"), result); WComboBox *cb = new WComboBox(result); cb->addItem("Heavy"); cb->addItem("Medium"); cb->addItem("Light"); cb->setCurrentIndex(1); // select 'Medium' ed_->showSignal(cb->sactivated(), "Combo-box 1 activated: "); addText(tr("formwidgets-WComboBox-model"), result); addText(tr("formwidgets-WComboBox-style"), result); WComboBox *colorCb = new WComboBox(result); WStandardItemModel* model = new WStandardItemModel(colorCb); model->insertColumns(0, 3); addColorElement(model, "Red", "combo-red"); addColorElement(model, "Blue", "combo-blue"); addColorElement(model, "Green", "combo-green"); colorCb->setModel(model); colorCb->setCurrentIndex(0); // select 'Red' ed_->showSignal(colorCb->sactivated(), "Combo-box 2 activated: "); return result; }
WComboBox* SettingsPage::createCombo(string name, vector<string> values) { string defaultValue = settings->value(name); WComboBox *combo = new WComboBox(); ComboPairModel* model = new ComboPairModel(values, this); combo->setModel(model); combo->activated().connect([=](int index, _n5){ settings->setValue(name, values[index]); }); for(int index=0; index<values.size(); index++) { if(values[index]==defaultValue) combo->setCurrentIndex(index); } return combo; }
void handleFinish(DialogCode result) { if (result == WDialog::Accepted) { /* * Update the model with data from the edit widgets. * * You will want to do some validation here... * * Note that we directly update the source model to avoid * problems caused by the dynamic sorting of the proxy model, * which reorders row numbers, and would cause us to switch to editing * the wrong data. */ WAbstractItemModel *m = model_; int modelRow = item_.row(); WAbstractProxyModel *proxyModel = dynamic_cast<WAbstractProxyModel *>(m); if (proxyModel) { m = proxyModel->sourceModel(); modelRow = proxyModel->mapToSource(item_).row(); } m->setData(modelRow, 1, boost::any(nameEdit_->text())); m->setData(modelRow, 2, boost::any(typeEdit_->currentText())); m->setData(modelRow, 3, boost::any(boost::lexical_cast<int> (sizeEdit_->text().toUTF8()))); m->setData(modelRow, 4, boost::any(createdPicker_->date())); m->setData(modelRow, 5, boost::any(modifiedPicker_->date())); } delete this; }
WWidget *StyleLayout::wLoadingIndicator() { WContainerWidget *result = new WContainerWidget(); topic("WLoadingIndicator", result); addText(tr("style-WLoadingIndicator"), result); //fix for the WOverlayLoadingIndicator WApplication::instance()->styleSheet().addRule("body", "margin: 0px"); addText("Select a loading indicator: ", result); WComboBox *cb = new WComboBox(result); cb->addItem("WDefaultLoadingIndicator"); cb->addItem("WOverlayLoadingIndicator"); cb->addItem("EmwebLoadingIndicator"); cb->setCurrentIndex(0); cb->sactivated().connect(this, &StyleLayout::loadingIndicatorSelected); new WBreak(result); WPushButton *load = new WPushButton("Load!", result); load->clicked().connect(this, &StyleLayout::load); return result; }
void PoitemTableDelegate::setModelData(QWidget *editor, QAbstractItemModel *pModel, const QModelIndex &index) const { bool hitError = false; QVariant oldval = pModel->data(index); PoitemTableModel *model = static_cast<PoitemTableModel*>(pModel); switch (index.column()) { case ITEM_NUMBER_COL: { ItemLineEdit *item = static_cast<ItemLineEdit*>(editor); if (item->itemNumber() != oldval.toString()) { if (item->itemNumber().isEmpty()) { model->setData(index, new QVariant()); model->setData(model->index(index.row(), ITEM_ID_COL), new QVariant()); model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), new QVariant()); model->setData(model->index(index.row(), WAREHOUS_ID_COL), new QVariant()); model->setData(model->index(index.row(), WAREHOUS_CODE_COL), new QVariant()); model->setData(model->index(index.row(), POITEM_ITEMSRC_ID_COL), new QVariant()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_NUMBER_COL), new QVariant()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_DESCRIP_COL), new QVariant()); model->setData(model->index(index.row(), POITEM_VEND_UOM_COL), new QVariant()); model->setData(model->index(index.row(), ITEMSRC_MINORDQTY_COL), new QVariant()); model->setData(model->index(index.row(), ITEMSRC_MULTORDQTY_COL), new QVariant()); model->setData(model->index(index.row(), ITEMSRC_INVVENDORUOMRATIO_COL), new QVariant()); model->setData(model->index(index.row(), POITEM_INVVENDUOMRATIO_COL), new QVariant()); model->setData(model->index(index.row(), EARLIESTDATE_COL), new QVariant()); } else { model->setData(index, item->itemNumber()); model->setData(model->index(index.row(), ITEM_ID_COL), item->id()); if (item->isValid()) { XSqlQuery itemq; itemq.prepare("SELECT (warehous_id=:preferred) AS preferred, " " itemsite_id, warehous_id, warehous_code " "FROM itemsite, whsinfo " "WHERE ((itemsite_item_id=:item_id)" " AND (itemsite_warehous_id=warehous_id)) " "ORDER BY preferred DESC, warehous_code " "LIMIT 1;"); itemq.bindValue(":item_id", item->id()); itemq.bindValue(":preferred", _x_preferences->value("PreferredWarehouse").toInt()); itemq.exec(); if (itemq.first()) { model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), itemq.value("itemsite_id").toInt()); model->setData(model->index(index.row(), WAREHOUS_ID_COL), itemq.value("warehous_id").toInt()); model->setData(model->index(index.row(), WAREHOUS_CODE_COL), itemq.value("warehous_code").toString()); } else if (itemq.lastError().type() != QSqlError::None) { systemError(0, itemq.lastError().databaseText(), __FILE__, __LINE__); hitError = true; break; } else { systemError(0, QString("Could not find Item Site for %1 (%2).") .arg(item->itemNumber()).arg(item->id())); hitError = true; break; } if (_metrics->boolean("RequireStdCostForPOItem")) { XSqlQuery stdcostq; stdcostq.prepare("SELECT stdCost(:item_id) AS result"); stdcostq.bindValue(":item_id", item->id()); stdcostq.exec(); if(stdcostq.first() && stdcostq.value("result").toDouble() == 0.0) { QMessageBox::critical(0, tr("Selected Item Missing Cost"), tr("<p>The selected item has no Std. Costing information. " "Please see your controller to correct this situation " "before continuing.")); model->setData(index, new QString()); model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), new QVariant()); model->setData(model->index(index.row(), WAREHOUS_ID_COL), new QVariant()); model->setData(model->index(index.row(), WAREHOUS_CODE_COL), new QString()); model->setData(index, new QString()); hitError = true; break; } else if (stdcostq.lastError().type() != QSqlError::None) { systemError(0, stdcostq.lastError().databaseText(), __FILE__, __LINE__); hitError = true; break; } } XSqlQuery itemsrcq; itemsrcq.prepare( "SELECT itemsrc_id, itemsrc_vend_item_number," " itemsrc_vend_item_descrip, itemsrc_vend_uom," " itemsrc_minordqty," " itemsrc_multordqty," " itemsrc_invvendoruomratio," " (CURRENT_DATE + itemsrc_leadtime) AS earliestdate " "FROM pohead, itemsrc " "WHERE ( (itemsrc_vend_id=pohead_vend_id)" " AND (itemsrc_item_id=:item_id)" " AND (pohead_id=:pohead_id) );" ); itemsrcq.bindValue(":item_id", item->id()); itemsrcq.bindValue(":pohead_id", model->headId()); itemsrcq.exec(); if (itemsrcq.first()) { model->setData(model->index(index.row(), POITEM_ITEMSRC_ID_COL), itemsrcq.value("itemsrc_id").toInt()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_NUMBER_COL), itemsrcq.value("itemsrc_vend_item_number").toString()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_DESCRIP_COL), itemsrcq.value("itemsrc_vend_item_descrip").toString()); model->setData(model->index(index.row(), POITEM_VEND_UOM_COL), itemsrcq.value("itemsrc_vend_uom").toString()); model->setData(model->index(index.row(), ITEMSRC_MINORDQTY_COL), itemsrcq.value("itemsrc_minordqty").toDouble()); model->setData(model->index(index.row(), ITEMSRC_MULTORDQTY_COL), itemsrcq.value("itemsrc_multordqty").toDouble()); model->setData(model->index(index.row(), ITEMSRC_INVVENDORUOMRATIO_COL), itemsrcq.value("itemsrc_invvendoruomratio").toDouble()); model->setData(model->index(index.row(), POITEM_INVVENDUOMRATIO_COL), itemsrcq.value("itemsrc_invvendoruomratio").toDouble()); model->setData(model->index(index.row(), EARLIESTDATE_COL), itemsrcq.value("earliestdate").toDate()); if (_metrics->boolean("UseEarliestAvailDateOnPOItem")) model->setData(model->index(index.row(), POITEM_DUEDATE_COL), itemsrcq.value("earliestdate").toDate()); } else if (itemsrcq.lastError().type() != QSqlError::None) { systemError(0, itemsrcq.lastError().databaseText(), __FILE__, __LINE__); hitError = true; break; } } } } break; } case WAREHOUS_CODE_COL: { WComboBox *whs = static_cast<WComboBox*>(editor); if (whs->id() < 0) { model->setData(model->index(index.row(), WAREHOUS_ID_COL), QVariant()); model->setData(index, QVariant()); } else if (whs->id() != oldval.toInt()) { model->setData(model->index(index.row(), WAREHOUS_ID_COL), whs->id()); model->setData(index, whs->currentText()); if (whs->isValid()) { XSqlQuery itemq; itemq.prepare("SELECT itemsite_id " "FROM itemsite " "WHERE ((itemsite_item_id=:item_id)" " AND (itemsite_warehous_id=:whs_id)) " "LIMIT 1;"); itemq.bindValue(":item_id", model->index(index.row(), ITEM_ID_COL).data()); itemq.bindValue(":whs_id", whs->id()); itemq.exec(); if (itemq.first()) { model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), itemq.value("itemsite_id").toInt()); } else if (itemq.lastError().type() != QSqlError::None) { systemError(0, itemq.lastError().databaseText(), __FILE__, __LINE__); hitError = true; break; } else { systemError(0, QString("Could not find Item Site for %1 in %2.") .arg(model->index(index.row(), ITEM_NUMBER_COL).data().toString()) .arg(whs->currentText())); hitError = true; break; } } } break; } case POITEM_VEND_ITEM_NUMBER_COL: { QLineEdit *lineedit = static_cast<QLineEdit*>(editor); if (lineedit->text() != oldval.toString()) model->setData(index, lineedit->text()); break; } case POITEM_FREIGHT_COL: { QLineEdit *lineedit = static_cast<QLineEdit*>(editor); if (lineedit->text().toDouble() != oldval.toDouble()) model->setData(index, formatPurchPrice(lineedit->text().toDouble())); break; } case POITEM_QTY_ORDERED_COL: { QLineEdit *lineedit = static_cast<QLineEdit*>(editor); if (lineedit->text().isEmpty()) { model->setData(index, QVariant()); model->setData(model->index(index.row(), EXTPRICE_COL), QVariant()); break; } double qty = lineedit->text().toDouble(); if (qty != oldval.toDouble()) { model->setData(index, formatQty(qty)); if (model->data(model->index(index.row(), POITEM_QTY_ORDERED_COL)).toDouble() > 0 && model->data(model->index(index.row(), POITEM_ITEMSRC_ID_COL)).toInt() > 0) { q.prepare( "SELECT ROUND(currToCurr(itemsrcp_curr_id, :curr_id, itemsrcp_price, :effective), :prec) " "AS new_itemsrcp_price " "FROM itemsrcp " "WHERE ( (itemsrcp_itemsrc_id=:itemsrc_id)" " AND (itemsrcp_qtybreak <= :qty) ) " "ORDER BY itemsrcp_qtybreak DESC " "LIMIT 1;" ); q.bindValue(":itemsrc_id", model->data(model->index(index.row(), POITEM_ITEMSRC_ID_COL)).toInt()); q.bindValue(":qty", model->data(model->index(index.row(), POITEM_QTY_ORDERED_COL)).toDouble()); q.bindValue(":curr_id", model->currId()); q.bindValue(":effective", model->transDate().toString()); q.bindValue(":prec", omfgThis->priceVal()->decimals()); q.exec(); if (q.first()) { model->setData(model->index(index.row(), POITEM_UNITPRICE_COL), q.value("new_itemsrcp_price").toDouble()); } else if (q.lastError().type() != QSqlError::None) { systemError(0, q.lastError().databaseText(), __FILE__, __LINE__); hitError = true; break; } else model->setData(model->index(index.row(), POITEM_UNITPRICE_COL), 0); } double prc = model->data(model->index(index.row(), POITEM_UNITPRICE_COL)).toDouble(); model->setData(model->index(index.row(), EXTPRICE_COL), formatPurchPrice(qty * prc)); } break; } case POITEM_UNITPRICE_COL: { QLineEdit *lineedit = static_cast<QLineEdit*>(editor); if (lineedit->text().isEmpty()) { model->setData(index, QVariant()); model->setData(model->index(index.row(), EXTPRICE_COL), QVariant()); break; } double prc = lineedit->text().toDouble(); if (prc != oldval.toDouble()) { model->setData(index, prc); double qty = model->data(model->index(index.row(),POITEM_QTY_ORDERED_COL)).toDouble(); model->setData(model->index(index.row(), EXTPRICE_COL), formatPurchPrice(qty * prc)); } break; } case POITEM_DUEDATE_COL: { DLineEdit *duedate = static_cast<DLineEdit*>(editor); if (duedate->date() != oldval.toDate()) { model->setData(index, duedate->date()); } break; } #ifdef QE_PROJECT case PRJ_NUMBER_COL: { ProjectLineEdit *prj = static_cast<ProjectLineEdit*>(editor); if (prj->id() != oldval.toInt()) { model->setData(model->index(index.row(), POITEM_PRJ_ID_COL), prj->id()); model->setData(index, prj->text()); } break; } #endif #ifdef QE_NONINVENTORY case EXPCAT_CODE_COL: { ExpenseLineEdit *exp = static_cast<ExpenseLineEdit*>(editor); if (exp->id() != oldval.toInt()) { model->setData(model->index(index.row(), POITEM_EXPCAT_ID_COL), exp->id()); model->setData(index, exp->text()); } break; } #endif default: break; } QTableView *view = qobject_cast<QTableView*>(parent()); if (view) { if (hitError) view->setCurrentIndex(index); else if (index.row() >= (model->rowCount() - 1)) { QHeaderView* header = view->horizontalHeader(); if (header->visualIndex(index.column()) >= (header->count() - header->hiddenSectionCount() - 1)) { model->insertRow(model->rowCount()); } } } return; }
QWidget *PoitemTableDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/*style*/, const QModelIndex &index) const { const QAbstractItemModel *model = index.model(); QWidget *editor = 0; switch (index.column()) { case ITEM_NUMBER_COL: { ItemLineEdit *item = new ItemLineEdit(parent); item->setType(ItemLineEdit::cGeneralPurchased | ItemLineEdit::cActive); if ((qobject_cast<const PoitemTableModel*>(model))->_vendrestrictpurch) { int vendid = (qobject_cast<const PoitemTableModel*>(model))->_vendid; // TODO: put queries in ItemLineEdit, trigger them with a setVendId() item->setQuery( QString("SELECT DISTINCT item_id, item_number, item_descrip1, item_descrip2," " uom_name, item_type, item_config " "FROM item, itemsite, itemsrc, uom " "WHERE ( (itemsite_item_id=item_id)" " AND (itemsrc_item_id=item_id)" " AND (item_inv_uom_id=uom_id)" " AND (itemsite_active)" " AND (item_active)" " AND (itemsrc_active)" " AND (itemsrc_vend_id=%1) ) " "ORDER BY item_number;" ) .arg(vendid) ); item->setValidationQuery( QString("SELECT DISTINCT item_id, item_number, item_descrip1, item_descrip2," " uom_name, item_type, item_config " "FROM item, itemsite, itemsrc, uom " "WHERE ( (itemsite_item_id=item_id)" " AND (itemsrc_item_id=item_id)" " AND (item_inv_uom_id=uom_id)" " AND (itemsite_active)" " AND (item_active)" " AND (itemsrc_active)" " AND (itemsrc_vend_id=%1) " " AND (itemsite_item_id=:item_id) ) " "ORDER BY item_number;" ) .arg(vendid) ); } else item->setType(ItemLineEdit::cGeneralPurchased | ItemLineEdit::cActive); editor = item; break; } case WAREHOUS_CODE_COL: { int itemid = model->data(model->index(index.row(), ITEM_ID_COL)).toInt(); if (itemid <= 0) // probably non-inventory item so don't pick a whs break; WComboBox *whs = new WComboBox(parent); whs->setType(WComboBox::Supply); whs->findItemsites(itemid); editor = whs; break; } case POITEM_VEND_ITEM_NUMBER_COL: { editor = new QLineEdit(parent); editor->setObjectName("poitem_vend_item_number"); break; } case POITEM_QTY_ORDERED_COL: { QLineEdit *qty = new QLineEdit(parent); qty->setValidator(omfgThis->qtyVal()); editor = qty; break; } case POITEM_UNITPRICE_COL: case POITEM_FREIGHT_COL: { QLineEdit *price = new QLineEdit(parent); price->setValidator(omfgThis->priceVal()); editor = price; break; } case POITEM_DUEDATE_COL: { DLineEdit *duedate = new DLineEdit(parent); editor = duedate; editor->setObjectName("poitem_duedate"); break; } #ifdef QE_PROJECT case PRJ_NUMBER_COL: { ProjectLineEdit *prj = new ProjectLineEdit(parent); prj->setType(ProjectLineEdit::PurchaseOrder); editor = prj; editor->setObjectName("prj_number"); break; } #endif #ifdef QE_NONINVENTORY case EXPCAT_CODE_COL: { ExpenseLineEdit *expcat = new ExpenseLineEdit(parent); editor = expcat; break; } #endif default: { editor = 0; break; } } if (editor) { #ifdef Q_WS_MAC // compensate for many custom widgets making themselves smaller on OS X QFont f = editor->font(); f.setPointSize(f.pointSize() + 2); editor->setFont(f); #endif editor->installEventFilter(const_cast<PoitemTableDelegate*>(this)); } return editor; }
void PoitemTableDelegate::setModelData(QWidget *editor, QAbstractItemModel *pModel, const QModelIndex &index) const { XSqlQuery PoitemetModelData; if (DEBUG) qDebug("PoitemTableDelegate::setModelData() entered"); bool hitError = false; QVariant oldval = pModel->data(index); PoitemTableModel *model = static_cast<PoitemTableModel*>(pModel); switch (index.column()) { case ITEM_NUMBER_COL: { ItemLineEdit *item = static_cast<ItemLineEdit*>(editor); if (item->itemNumber() != oldval.toString()) { if (item->itemNumber().isEmpty()) { model->setData(index, QVariant()); model->setData(model->index(index.row(), ITEM_ID_COL), QVariant()); model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), QVariant()); model->setData(model->index(index.row(), WAREHOUS_ID_COL), QVariant()); model->setData(model->index(index.row(), WAREHOUS_CODE_COL), QVariant()); model->setData(model->index(index.row(), POITEM_ITEMSRC_ID_COL), QVariant()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_NUMBER_COL), QVariant()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_DESCRIP_COL), QVariant()); model->setData(model->index(index.row(), POITEM_VEND_UOM_COL), QVariant()); model->setData(model->index(index.row(), ITEMSRC_MINORDQTY_COL), QVariant()); model->setData(model->index(index.row(), ITEMSRC_MULTORDQTY_COL), QVariant()); model->setData(model->index(index.row(), ITEMSRC_INVVENDORUOMRATIO_COL), QVariant()); model->setData(model->index(index.row(), POITEM_INVVENDUOMRATIO_COL), QVariant()); model->setData(model->index(index.row(), EARLIESTDATE_COL), QVariant()); } else { model->setData(index, item->itemNumber()); model->setData(model->index(index.row(), ITEM_ID_COL), item->id()); if (item->isValid()) { XSqlQuery itemq; itemq.prepare("SELECT (warehous_id=:preferred) AS preferred, " " itemsite_id, warehous_id, warehous_code " "FROM itemsite, whsinfo " "WHERE ((itemsite_item_id=:item_id)" " AND (itemsite_warehous_id=warehous_id)) " "ORDER BY preferred DESC, warehous_code " "LIMIT 1;"); itemq.bindValue(":item_id", item->id()); itemq.bindValue(":preferred", _x_preferences->value("PreferredWarehouse").toInt()); itemq.exec(); if (itemq.first()) { model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), itemq.value("itemsite_id").toInt()); model->setData(model->index(index.row(), WAREHOUS_ID_COL), itemq.value("warehous_id").toInt()); model->setData(model->index(index.row(), WAREHOUS_CODE_COL), itemq.value("warehous_code").toString()); } else if (ErrorReporter::error(QtCriticalMsg, 0, tr("Error Retrieving PO Information"), itemq, __FILE__, __LINE__)) { hitError = true; break; } else { ErrorReporter::error(QtCriticalMsg, 0, tr("Error Occurred"), tr("Could not find Item Site for %1 (%2).") .arg(item->itemNumber()) .arg(item->id()),__FILE__,__LINE__); hitError = true; break; } if (_metrics->boolean("RequireStdCostForPOItem")) { XSqlQuery stdcostq; stdcostq.prepare("SELECT stdCost(:item_id) AS result"); stdcostq.bindValue(":item_id", item->id()); stdcostq.exec(); if(stdcostq.first() && stdcostq.value("result").toDouble() == 0.0) { QMessageBox::critical(0, tr("Selected Item Missing Cost"), tr("<p>The selected item has no Std. Costing information. " "Please see your controller to correct this situation " "before continuing.")); model->setData(index, QString()); model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), QVariant()); model->setData(model->index(index.row(), WAREHOUS_ID_COL), QVariant()); model->setData(model->index(index.row(), WAREHOUS_CODE_COL), QString()); model->setData(index, QString()); hitError = true; break; } else if (ErrorReporter::error(QtCriticalMsg, 0, tr("Error Retrieving Standard Cost Information"), stdcostq, __FILE__, __LINE__)) { hitError = true; break; } } XSqlQuery itemsrcq; itemsrcq.prepare( "SELECT pohead_vend_id, itemsrc_id, itemsrc_vend_item_number," " itemsrc_vend_item_descrip, itemsrc_vend_uom," " itemsrc_minordqty," " itemsrc_multordqty," " itemsrc_invvendoruomratio," " itemsrc_manuf_name," " itemsrc_manuf_item_number," " itemsrc_manuf_item_descrip," " (CURRENT_DATE + itemsrc_leadtime) AS earliestdate " "FROM pohead, itemsrc " "WHERE ( (itemsrc_vend_id=pohead_vend_id)" " AND (itemsrc_item_id=:item_id)" " AND (pohead_id=:pohead_id) );" ); itemsrcq.bindValue(":item_id", item->id()); itemsrcq.bindValue(":pohead_id", model->headId()); itemsrcq.exec(); if (itemsrcq.size() > 1) { itemsrcq.first(); ParameterList params; params.append("vend_id", itemsrcq.value("pohead_vend_id").toInt()); params.append("search", item->itemNumber()); itemSourceSearch newdlg(0, "", true); newdlg.set(params); if(newdlg.exec() == XDialog::Accepted) { int itemsrcid = newdlg.itemsrcId(); if(itemsrcid != -1) { itemsrcq.prepare( "SELECT itemsrc_id, itemsrc_vend_item_number," " itemsrc_vend_item_descrip, itemsrc_vend_uom," " itemsrc_minordqty," " itemsrc_multordqty," " itemsrc_invvendoruomratio," " itemsrc_manuf_name," " itemsrc_manuf_item_number," " itemsrc_manuf_item_descrip," " (CURRENT_DATE + itemsrc_leadtime) AS earliestdate " "FROM pohead, itemsrc " "WHERE (itemsrc_id=:itemsrc_id);" ); itemsrcq.bindValue(":itemsrc_id", itemsrcid); itemsrcq.exec(); } } else itemsrcq.clear(); } if (itemsrcq.first()) { model->setData(model->index(index.row(), POITEM_ITEMSRC_ID_COL), itemsrcq.value("itemsrc_id").toInt()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_NUMBER_COL), itemsrcq.value("itemsrc_vend_item_number").toString()); model->setData(model->index(index.row(), POITEM_VEND_ITEM_DESCRIP_COL), itemsrcq.value("itemsrc_vend_item_descrip").toString()); model->setData(model->index(index.row(), POITEM_VEND_UOM_COL), itemsrcq.value("itemsrc_vend_uom").toString()); model->setData(model->index(index.row(), ITEMSRC_MINORDQTY_COL), itemsrcq.value("itemsrc_minordqty").toDouble()); model->setData(model->index(index.row(), ITEMSRC_MULTORDQTY_COL), itemsrcq.value("itemsrc_multordqty").toDouble()); model->setData(model->index(index.row(), ITEMSRC_INVVENDORUOMRATIO_COL), itemsrcq.value("itemsrc_invvendoruomratio").toDouble()); model->setData(model->index(index.row(), POITEM_INVVENDUOMRATIO_COL), itemsrcq.value("itemsrc_invvendoruomratio").toDouble()); model->setData(model->index(index.row(), POITEM_MANUF_NAME_COL), itemsrcq.value("itemsrc_manuf_name").toString()); model->setData(model->index(index.row(), POITEM_MANUF_ITEM_NUMBER_COL), itemsrcq.value("itemsrc_manuf_item_number").toString()); model->setData(model->index(index.row(), POITEM_MANUF_ITEM_DESCRIP_COL), itemsrcq.value("itemsrc_manuf_item_descrip").toString()); model->setData(model->index(index.row(), EARLIESTDATE_COL), itemsrcq.value("earliestdate").toDate()); if (_metrics->boolean("UseEarliestAvailDateOnPOItem")) model->setData(model->index(index.row(), POITEM_DUEDATE_COL), itemsrcq.value("earliestdate").toDate()); } else if (ErrorReporter::error(QtCriticalMsg, 0, tr("Error Retrieving Item Information"), itemsrcq, __FILE__, __LINE__)) { hitError = true; break; } } } } break; } case WAREHOUS_CODE_COL: { WComboBox *whs = static_cast<WComboBox*>(editor); if (whs->id() < 0) { model->setData(model->index(index.row(), WAREHOUS_ID_COL), QVariant()); model->setData(index, QVariant()); } else if (whs->id() != oldval.toInt()) { model->setData(model->index(index.row(), WAREHOUS_ID_COL), whs->id()); model->setData(index, whs->currentText()); if (whs->isValid()) { XSqlQuery itemq; itemq.prepare("SELECT itemsite_id " "FROM itemsite " "WHERE ((itemsite_item_id=:item_id)" " AND (itemsite_warehous_id=:whs_id)) " "LIMIT 1;"); itemq.bindValue(":item_id", model->index(index.row(), ITEM_ID_COL).data()); itemq.bindValue(":whs_id", whs->id()); itemq.exec(); if (itemq.first()) { model->setData(model->index(index.row(), POITEM_ITEMSITE_ID_COL), itemq.value("itemsite_id").toInt()); } else if (ErrorReporter::error(QtCriticalMsg, 0, tr("Error Retrieving Item Site Information"), itemq, __FILE__, __LINE__)) { hitError = true; break; } else { ErrorReporter::error(QtCriticalMsg, 0, tr("Error Occurred"), tr("%1: Could not find Item Site for %1 in %2.") .arg(model->index(index.row(), ITEM_NUMBER_COL).data().toString()) .arg(whs->currentText()) ,__FILE__,__LINE__); hitError = true; break; } } } break; } case POITEM_VEND_ITEM_DESCRIP_COL: { XLineEdit *lineedit = static_cast<XLineEdit*>(editor); if (lineedit->text() != oldval.toString()) model->setData(index, lineedit->text()); break; } case POITEM_VEND_ITEM_NUMBER_COL: { XLineEdit *lineedit = static_cast<XLineEdit*>(editor); if (lineedit->text() != oldval.toString()) model->setData(index, lineedit->text()); break; } case POITEM_FREIGHT_COL: { XLineEdit *lineedit = static_cast<XLineEdit*>(editor); if (lineedit->toDouble() != oldval.toDouble()) model->setData(index, lineedit->toDouble()); break; } case POITEM_QTY_ORDERED_COL: { XLineEdit *lineedit = static_cast<XLineEdit*>(editor); if (lineedit->text().isEmpty()) { model->setData(index, QVariant()); model->setData(model->index(index.row(), EXTPRICE_COL), QVariant()); break; } double qty = lineedit->toDouble(); if (qty != oldval.toDouble()) { model->setData(index, qty); if (model->data(model->index(index.row(), POITEM_QTY_ORDERED_COL)).toDouble() > 0 && model->data(model->index(index.row(), POITEM_ITEMSRC_ID_COL)).toInt() > 0) { PoitemetModelData.prepare( "SELECT ROUND(currToCurr(itemsrcp_curr_id, :curr_id, itemsrcp_price, :effective), :prec) " "AS new_itemsrcp_price " "FROM itemsrcp " "WHERE ( (itemsrcp_itemsrc_id=:itemsrc_id)" " AND (itemsrcp_qtybreak <= :qty) ) " "ORDER BY itemsrcp_qtybreak DESC " "LIMIT 1;" ); PoitemetModelData.bindValue(":itemsrc_id", model->data(model->index(index.row(), POITEM_ITEMSRC_ID_COL)).toInt()); PoitemetModelData.bindValue(":qty", model->data(model->index(index.row(), POITEM_QTY_ORDERED_COL)).toDouble()); PoitemetModelData.bindValue(":curr_id", model->currId()); PoitemetModelData.bindValue(":effective", model->transDate().toString()); PoitemetModelData.bindValue(":prec", omfgThis->priceVal()->decimals()); PoitemetModelData.exec(); if (PoitemetModelData.first()) { model->setData(model->index(index.row(), POITEM_UNITPRICE_COL), PoitemetModelData.value("new_itemsrcp_price").toDouble()); } else if (ErrorReporter::error(QtCriticalMsg, 0, tr("Error Retrieving Item Information"), PoitemetModelData, __FILE__, __LINE__)) { hitError = true; break; } else model->setData(model->index(index.row(), POITEM_UNITPRICE_COL), 0); } double prc = model->data(model->index(index.row(), POITEM_UNITPRICE_COL)).toDouble(); model->setData(model->index(index.row(), EXTPRICE_COL), (qty * prc)); } break; } case POITEM_UNITPRICE_COL: { XLineEdit *lineedit = static_cast<XLineEdit*>(editor); if (lineedit->text().isEmpty()) { model->setData(index, QVariant()); model->setData(model->index(index.row(), EXTPRICE_COL), QVariant()); break; } double prc = lineedit->text().toDouble(); if (prc != oldval.toDouble()) { model->setData(index, prc); double qty = model->data(model->index(index.row(),POITEM_QTY_ORDERED_COL)).toDouble(); model->setData(model->index(index.row(), EXTPRICE_COL), (qty * prc)); } break; } case POITEM_DUEDATE_COL: { XDateEdit *duedate = static_cast<XDateEdit*>(editor); duedate->parseDate(); if (duedate->date() != oldval.toDate()) { if (DEBUG) qDebug("PoitemTableDelegate::setModelData() setting duedate to %s with null %d, valid %d", qPrintable(duedate->date().toString()), duedate->isNull(), duedate->isValid()); model->setData(index, duedate->date()); } break; } #ifdef QE_NONINVENTORY case EXPCAT_CODE_COL: { ExpenseLineEdit *exp = static_cast<ExpenseLineEdit*>(editor); if (exp->id() != oldval.toInt()) { model->setData(model->index(index.row(), POITEM_EXPCAT_ID_COL), exp->id()); model->setData(index, exp->text()); } break; } #endif default: break; } QTableView *view = qobject_cast<QTableView*>(parent()); if (view) { if (hitError) view->setCurrentIndex(index); else if (index.row() >= (model->rowCount() - 1)) { QHeaderView* header = view->horizontalHeader(); if (header->visualIndex(index.column()) >= (header->count() - header->hiddenSectionCount() - 1)) { model->insertRow(model->rowCount()); } } } return; }
ChartSettings::ChartSettings(WCartesian3DChart *chart, WContainerWidget * parent) : WContainerWidget(parent), chart_(chart) { WTemplate* template_ = new WTemplate(Wt::WString::tr("chartconfig-template"), this); WCheckBox *autoRangeX_ = new WCheckBox(this); template_->bindWidget("xAuto", autoRangeX_); autoRangeX_->setCheckState(Wt::Checked); chart_->initLayout(); WLineEdit *xMin_ = new WLineEdit (Wt::asString(chart_->axis(XAxis_3D).minimum()), this); template_->bindWidget("xAxisMin", xMin_); xMin_->setValidator(new Wt::WDoubleValidator(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max())); xMin_->setEnabled(false); WLineEdit *xMax_ = new WLineEdit (Wt::asString(chart_->axis(XAxis_3D).maximum()), this); template_->bindWidget("xAxisMax", xMax_); xMax_->setValidator(new Wt::WDoubleValidator(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max())); xMax_->setEnabled(false); WCheckBox *autoRangeY_ = new WCheckBox(this); template_->bindWidget("yAuto", autoRangeY_); autoRangeY_->setCheckState(Wt::Checked); WLineEdit *yMin_ = new WLineEdit (Wt::asString(chart_->axis(YAxis_3D).minimum()), this); template_->bindWidget("yAxisMin", yMin_); yMin_->setValidator(new Wt::WDoubleValidator(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max())); yMin_->setEnabled(false); WLineEdit *yMax_ = new WLineEdit (Wt::asString(chart_->axis(YAxis_3D).maximum()), this); template_->bindWidget("yAxisMax", yMax_); yMax_->setValidator(new Wt::WDoubleValidator(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max())); yMax_->setEnabled(false); WCheckBox *autoRangeZ_ = new WCheckBox(this); template_->bindWidget("zAuto", autoRangeZ_); autoRangeZ_->setCheckState(Wt::Checked); WLineEdit *zMin_ = new WLineEdit (Wt::asString(chart_->axis(ZAxis_3D).minimum()), this); template_->bindWidget("zAxisMin", zMin_); zMin_->setValidator(new Wt::WDoubleValidator(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max())); zMin_->setEnabled(false); WLineEdit *zMax_ = new WLineEdit (Wt::asString(chart_->axis(ZAxis_3D).maximum()), this); template_->bindWidget("zAxisMax", zMax_); zMax_->setValidator(new Wt::WDoubleValidator(-std::numeric_limits<double>::max(), std::numeric_limits<double>::max())); zMax_->setEnabled(false); WLineEdit *title = new WLineEdit(this); template_->bindWidget("chartTitle", title); WCheckBox *enableLegend = new WCheckBox(this); template_->bindWidget("chartLegend", enableLegend); WComboBox *legendSide = new WComboBox(this); legendSide->addItem("Left"); legendSide->addItem("Right"); legendSide->addItem("Top"); legendSide->addItem("Bottom"); template_->bindWidget("legendside", legendSide); switch (chart_->legendSide()) { case Left: legendSide->setCurrentIndex(0); break; case Right: legendSide->setCurrentIndex(1); break; case Top: legendSide->setCurrentIndex(2); break; case Bottom: legendSide->setCurrentIndex(3); break; default: break; } WComboBox *legendAlignment = new WComboBox(this); legendAlignment->addItem("Left"); legendAlignment->addItem("Center"); legendAlignment->addItem("Right"); legendAlignment->addItem("Top"); legendAlignment->addItem("Middle"); legendAlignment->addItem("Bottom"); template_->bindWidget("legendalignment", legendAlignment); switch (chart_->legendAlignment()) { case AlignLeft: legendAlignment->setCurrentIndex(0); break; case AlignCenter: legendAlignment->setCurrentIndex(1); break; case AlignRight: legendAlignment->setCurrentIndex(2); break; case AlignTop: legendAlignment->setCurrentIndex(3); break; case AlignMiddle: legendAlignment->setCurrentIndex(4); break; case AlignBottom: legendAlignment->setCurrentIndex(5); break; default: break; } WCheckBox *enableGridLines = new WCheckBox(this); template_->bindWidget("gridlines", enableGridLines); WLineEdit *widgetWidth = new WLineEdit(Wt::asString(chart_->width().value()), this); widgetWidth->setValidator(new Wt::WIntValidator(1, 2000)); WLineEdit *widgetHeight = new WLineEdit(Wt::asString(chart_->height().value()), this); widgetHeight->setValidator(new Wt::WIntValidator(1, 2000)); template_->bindWidget("width", widgetWidth); template_->bindWidget("height", widgetHeight); WLineEdit *xAxisTitle = new WLineEdit(chart_->axis(XAxis_3D).title(), this); WLineEdit *yAxisTitle = new WLineEdit(chart_->axis(YAxis_3D).title(), this); WLineEdit *zAxisTitle = new WLineEdit(chart_->axis(ZAxis_3D).title(), this); template_->bindWidget("xTitle", xAxisTitle); template_->bindWidget("yTitle", yAxisTitle); template_->bindWidget("zTitle", zAxisTitle); // hook it up autoRangeX_->checked().connect(std::bind([=] () { chart_->axis(XAxis_3D).setAutoLimits(Chart::MinimumValue | Chart::MaximumValue); xMin_->setEnabled(false); xMax_->setEnabled(false); })); autoRangeX_->unChecked().connect(std::bind([=] () { xMin_->setEnabled(true); xMax_->setEnabled(true); chart_->axis(XAxis_3D).setRange(Wt::asNumber(xMin_->text()), Wt::asNumber(xMax_->text())); })); autoRangeY_->checked().connect(std::bind([=] () { chart_->axis(YAxis_3D).setAutoLimits(Chart::MinimumValue | Chart::MaximumValue); yMin_->setEnabled(false); yMax_->setEnabled(false); })); autoRangeY_->unChecked().connect(std::bind([=] () { yMin_->setEnabled(true); yMax_->setEnabled(true); chart_->axis(YAxis_3D).setRange(Wt::asNumber(yMin_->text()), Wt::asNumber(yMax_->text())); })); autoRangeZ_->checked().connect(std::bind([=] () { chart_->axis(ZAxis_3D).setAutoLimits(Chart::MinimumValue | Chart::MaximumValue); zMin_->setEnabled(false); zMax_->setEnabled(false); })); autoRangeZ_->unChecked().connect(std::bind([=] () { zMin_->setEnabled(true); zMax_->setEnabled(true); chart_->axis(ZAxis_3D).setRange(Wt::asNumber(zMin_->text()), Wt::asNumber(zMax_->text())); })); xMin_->changed().connect(std::bind([=] () { chart_->axis(XAxis_3D).setRange(Wt::asNumber(xMin_->text()), Wt::asNumber(xMax_->text())); })); xMax_->changed().connect(std::bind([=] () { chart_->axis(XAxis_3D).setRange(Wt::asNumber(xMin_->text()), Wt::asNumber(xMax_->text())); })); yMin_->changed().connect(std::bind([=] () { chart_->axis(YAxis_3D).setRange(Wt::asNumber(yMin_->text()), Wt::asNumber(yMax_->text())); })); yMax_->changed().connect(std::bind([=] () { chart_->axis(YAxis_3D).setRange(Wt::asNumber(yMin_->text()), Wt::asNumber(yMax_->text())); })); zMin_->changed().connect(std::bind([=] () { chart_->axis(ZAxis_3D).setRange(Wt::asNumber(zMin_->text()), Wt::asNumber(zMax_->text())); })); zMax_->changed().connect(std::bind([=] () { chart_->axis(ZAxis_3D).setRange(Wt::asNumber(zMin_->text()), Wt::asNumber(zMax_->text())); })); enableGridLines->checked().connect(std::bind([=]() { chart_->setGridEnabled(Wt::Chart::XY_Plane, Wt::Chart::XAxis_3D, true); chart_->setGridEnabled(Wt::Chart::XY_Plane, Wt::Chart::YAxis_3D, true); chart_->setGridEnabled(Wt::Chart::XZ_Plane, Wt::Chart::XAxis_3D, true); chart_->setGridEnabled(Wt::Chart::XZ_Plane, Wt::Chart::ZAxis_3D, true); chart_->setGridEnabled(Wt::Chart::YZ_Plane, Wt::Chart::YAxis_3D, true); chart_->setGridEnabled(Wt::Chart::YZ_Plane, Wt::Chart::ZAxis_3D, true); })); enableGridLines->unChecked().connect(std::bind([=]() { chart_->setGridEnabled(Wt::Chart::XY_Plane, Wt::Chart::XAxis_3D, false); chart_->setGridEnabled(Wt::Chart::XY_Plane, Wt::Chart::YAxis_3D, false); chart_->setGridEnabled(Wt::Chart::XZ_Plane, Wt::Chart::XAxis_3D, false); chart_->setGridEnabled(Wt::Chart::XZ_Plane, Wt::Chart::ZAxis_3D, false); chart_->setGridEnabled(Wt::Chart::YZ_Plane, Wt::Chart::YAxis_3D, false); chart_->setGridEnabled(Wt::Chart::YZ_Plane, Wt::Chart::ZAxis_3D, false); })); enableLegend->checked().connect(std::bind([=]() { chart_->setLegendEnabled(true); })); enableLegend->unChecked().connect(std::bind([=]() { chart_->setLegendEnabled(false); })); legendSide->changed().connect(std::bind([=]() { switch (legendSide->currentIndex()) { case 0: chart_->setLegendLocation(Left, chart_->legendAlignment()); break; case 1: chart_->setLegendLocation(Right, chart_->legendAlignment()); break; case 2: chart_->setLegendLocation(Top, chart_->legendAlignment()); break; case 3: chart_->setLegendLocation(Bottom, chart_->legendAlignment()); break; } })); legendAlignment->changed().connect(std::bind([=]() { switch (legendAlignment->currentIndex()) { case 0: chart_->setLegendLocation(chart_->legendSide(), AlignLeft); break; case 1: chart_->setLegendLocation(chart_->legendSide(), AlignCenter); break; case 2: chart_->setLegendLocation(chart_->legendSide(), AlignRight); break; case 3: chart_->setLegendLocation(chart_->legendSide(), AlignTop); break; case 4: chart_->setLegendLocation(chart_->legendSide(), AlignMiddle); break; case 5: chart_->setLegendLocation(chart_->legendSide(), AlignBottom); break; } })); title->changed().connect(std::bind([=] () { chart_->setTitle(Wt::asString(title->text())); })); widgetWidth->changed().connect(std::bind([=] () { chart_->resize(Wt::asNumber(widgetWidth->text()), Wt::asNumber(widgetHeight->text())); })); widgetHeight->changed().connect(std::bind([=] () { chart_->resize(Wt::asNumber(widgetWidth->text()), Wt::asNumber(widgetHeight->text())); })); xAxisTitle->changed().connect(std::bind([=]() { chart_->axis(XAxis_3D).setTitle(xAxisTitle->text()); })); yAxisTitle->changed().connect(std::bind([=]() { chart_->axis(YAxis_3D).setTitle(yAxisTitle->text()); })); zAxisTitle->changed().connect(std::bind([=]() { chart_->axis(ZAxis_3D).setTitle(zAxisTitle->text()); })); }