enterPoReceipt::enterPoReceipt(QWidget* parent, const char* name, Qt::WFlags fl) : XWidget(parent, name, fl) { setupUi(this); connect(_all, SIGNAL(clicked()), this, SLOT(sReceiveAll())); connect(_enter, SIGNAL(clicked()), this, SLOT(sEnter())); connect(_order, SIGNAL(valid(bool)), this, SLOT(sFillList())); connect(_post, SIGNAL(clicked()), this, SLOT(sPost())); connect(_print, SIGNAL(clicked()), this, SLOT(sPrint())); connect(_save, SIGNAL(clicked()), this, SLOT(sSave())); connect(_orderitem, SIGNAL(populateMenu(QMenu*,QTreeWidgetItem*,int)), this, SLOT(sPopulateMenu(QMenu*, QTreeWidgetItem*))); connect(_printLabel, SIGNAL(clicked()), this, SLOT(sPrintItemLabel())); // connect(_orderitem, SIGNAL(valid(bool)), this, SLOT(sHandleButtons())); _order->setAllowedStatuses(OrderLineEdit::Open); _order->setAllowedTypes(OrderLineEdit::Purchase | OrderLineEdit::Return | OrderLineEdit::Transfer); _order->setToSitePrivsEnforced(TRUE); if (_metrics->boolean("EnableReturnAuth")) { _order->setExtraClause("RA", "(SELECT SUM(raitem_qtyauthorized) > 0 " " FROM raitem" " WHERE ((raitem_rahead_id=orderhead_id)" " AND (orderhead_type = 'RA'))) " " AND " "(SELECT TRUE " " FROM raitem" " WHERE ((raitem_rahead_id=orderhead_id)" " AND (raitem_disposition IN ('R','P','V')) " " AND (orderhead_type = 'RA')) " " LIMIT 1)"); } _order->setFocus(); _orderitem->addColumn(tr("#"), _whsColumn, Qt::AlignCenter , true, "linenumber"); _orderitem->addColumn(tr("Due Date"), _dateColumn, Qt::AlignLeft , true, "duedate"); _orderitem->addColumn(tr("Item Number"), _itemColumn, Qt::AlignLeft , true, "item_number"); _orderitem->addColumn(tr("Description"), -1, Qt::AlignLeft , true, "itemdescription"); _orderitem->addColumn(tr("Inv. UOM"), _uomColumn, Qt::AlignCenter , true, "inv_uom"); _orderitem->addColumn(tr("Site"), _whsColumn, Qt::AlignCenter , true, "warehous_code"); _orderitem->addColumn(tr("Vend. Item #"), -1, Qt::AlignLeft , true, "vend_item_number"); _orderitem->addColumn(tr("Vend. UOM"), _uomColumn, Qt::AlignCenter , true, "vend_uom"); _orderitem->addColumn(tr("Manufacturer"), _orderColumn, Qt::AlignLeft , false, "manuf_name"); _orderitem->addColumn(tr("Manuf. Item#"), _orderColumn, Qt::AlignCenter, false, "manuf_item_number"); _orderitem->addColumn(tr("Ordered"), _qtyColumn, Qt::AlignRight , true, "qty_ordered"); _orderitem->addColumn(tr("Received"), _qtyColumn, Qt::AlignRight , true, "qty_received"); _orderitem->addColumn(tr("Returned"), _qtyColumn, Qt::AlignRight , true, "qty_returned"); _orderitem->addColumn(tr("To Receive"), _qtyColumn, Qt::AlignRight , true, "qty_toreceive"); _captive = FALSE; //Remove lot/serial if no lot/serial tracking if (!_metrics->boolean("LotSerialControl")) _singleLot->hide(); }
void enterPoitemReceipt::sReceive() { XSqlQuery rollback; rollback.prepare("ROLLBACK;"); if(_metrics->boolean("DisallowReceiptExcessQty") && _receivable < _toReceive->toDouble()) { XMessageBox::message( (isVisible() ? this : parentWidget()), QMessageBox::Warning, tr("Cannot Receive"), tr( "<p>Cannot receive more quantity than ordered." ), QString::null, QString::null, _snooze ); return; } if(_ordertype == "RA" && _receivable < _toReceive->toDouble()) { XMessageBox::message( (isVisible() ? this : parentWidget()), QMessageBox::Warning, tr("Cannot Receive"), tr( "<p>Cannot receive more quantity than authorized." ), QString::null, QString::null, _snooze ); return; } double tolerance = _metrics->value("ReceiptQtyTolerancePct").toDouble() / 100.0; if(_metrics->boolean("WarnIfReceiptQtyDiffers") && (_receivable < _toReceive->toDouble() * (1.0 - tolerance) || _receivable > _toReceive->toDouble() * (1.0 + tolerance))) { if(XMessageBox::message( (isVisible() ? this : parentWidget()) , QMessageBox::Question, tr("Receipt Qty. Differs"), tr("<p>The Qty entered does not match the receivable Qty for this order. " "Do you wish to continue anyway?"), tr("Yes"), tr("No"), _snooze, 0, 1) == 0) return; } int result = 0; QString storedProc; if (_mode == cNew) { q.prepare("SELECT enterReceipt(:ordertype, :poitem_id, :qty, :freight, :notes, " ":curr_id, :effective) AS result;"); q.bindValue(":poitem_id", _orderitemid); q.bindValue(":ordertype", _ordertype); storedProc = "enterReceipt"; } else if (_mode == cEdit) { q.exec("BEGIN;"); // because of possible lot, serial, or location distribution cancelations q.prepare("UPDATE recv SET recv_notes = :notes WHERE (recv_id=:recv_id);" ); q.bindValue(":notes", _notes->toPlainText()); q.bindValue(":recv_id", _recvid); q.exec(); if (q.lastError().type() != QSqlError::NoError) { rollback.exec(); systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } q.prepare("SELECT correctReceipt(:recv_id, :qty, :freight, 0, " ":curr_id, :effective) AS result;"); q.bindValue(":recv_id", _recvid); storedProc = "correctReceipt"; } q.bindValue(":qty", _toReceive->toDouble()); q.bindValue(":freight", _freight->localValue()); q.bindValue(":notes", _notes->toPlainText()); q.bindValue(":curr_id", _freight->id()); q.bindValue(":effective", _receiptDate->date()); q.exec(); if (q.first()) { result = q.value("result").toInt(); if (result < 0) { rollback.exec(); systemError(this, storedProcErrorLookup(storedProc, result), __FILE__, __LINE__); return; } } else if (q.lastError().type() != QSqlError::NoError) { rollback.exec(); systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } if(cEdit == _mode) { if (distributeInventory::SeriesAdjust(result, this) == XDialog::Rejected) { rollback.exec(); XMessageBox::message( (isVisible() ? this : parentWidget()), QMessageBox::Warning, tr("Enter PO Receipt"), tr( "<p>Transaction Cancelled." ), QString::null, QString::null, _snooze ); return; } q.exec("COMMIT;"); } omfgThis->sPurchaseOrderReceiptsUpdated(); accept(); if (_printLabel->isChecked()) sPrintItemLabel(); }