int fft(double *x, double *y, const int m) { int j, lmx, li; double *xp, *yp; double *sinp, *cosp; int lf, lix, tblsize; int mv2, mm1; double t1, t2; double arg; int checkm(const int); /************** * RADIX-2 FFT * **************/ if (checkm(m)) return (-1); /*********************** * SIN table generation * ***********************/ if ((_sintbl == 0) || (maxfftsize < m)) { tblsize = m - m / 4 + 1; arg = PI / m * 2; if (_sintbl != 0) free(_sintbl); _sintbl = sinp = dgetmem(tblsize); *sinp++ = 0; for (j = 1; j < tblsize; j++) *sinp++ = sin(arg * (double) j); _sintbl[m / 2] = 0; maxfftsize = m; } lf = maxfftsize / m; lmx = m; for (;;) { lix = lmx; lmx /= 2; if (lmx <= 1) break; sinp = _sintbl; cosp = _sintbl + maxfftsize / 4; for (j = 0; j < lmx; j++) { xp = &x[j]; yp = &y[j]; for (li = lix; li <= m; li += lix) { t1 = *(xp) - *(xp + lmx); t2 = *(yp) - *(yp + lmx); *(xp) += *(xp + lmx); *(yp) += *(yp + lmx); *(xp + lmx) = *cosp * t1 + *sinp * t2; *(yp + lmx) = *cosp * t2 - *sinp * t1; xp += lix; yp += lix; } sinp += lf; cosp += lf; } lf += lf; } xp = x; yp = y; for (li = m / 2; li--; xp += 2, yp += 2) { t1 = *(xp) - *(xp + 1); t2 = *(yp) - *(yp + 1); *(xp) += *(xp + 1); *(yp) += *(yp + 1); *(xp + 1) = t1; *(yp + 1) = t2; } /*************** * bit reversal * ***************/ j = 0; xp = x; yp = y; mv2 = m / 2; mm1 = m - 1; for (lmx = 0; lmx < mm1; lmx++) { if ((li = lmx - j) < 0) { t1 = *(xp); t2 = *(yp); *(xp) = *(xp + li); *(yp) = *(yp + li); *(xp + li) = t1; *(yp + li) = t2; } li = mv2; while (li <= j) { j -= li; li /= 2; } j += li; xp = x + j; yp = y + j; } return (0); }
void enterPoReceipt::sPost() { ParameterList params; // shared by several queries setParams(params); QString checks = "SELECT SUM(qtyToReceive(recv_order_type," " recv_orderitem_id)) AS qtyToRecv " "FROM recv, orderitem " "WHERE ((recv_order_type=<? value(\"ordertype\") ?>)" " AND (recv_orderitem_id=orderitem_id)" " AND (orderitem_orderhead_id=<? value(\"orderid\") ?>));"; MetaSQLQuery checkm(checks); q = checkm.toQuery(params); if (q.first()) { if (q.value("qtyToRecv").toDouble() == 0) { QMessageBox::critical(this, tr("Nothing selected for Receipt"), tr("<p>No Line Items have been selected " "for receipt. Select at least one Line Item and " "enter a Receipt before trying to Post.")); return; } } else if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } XSqlQuery rollback; rollback.prepare("ROLLBACK;"); q.exec("BEGIN;"); // because of possible insertgltransaction failures QString posts = "SELECT postReceipts(<? value (\"ordertype\") ?>," " <? value(\"orderid\") ?>,0) AS result;" ; MetaSQLQuery postm(posts); q = postm.toQuery(params); if (q.first()) { int result = q.value("result").toInt(); if (result < 0) { rollback.exec(); systemError(this, storedProcErrorLookup("postReceipts", result), __FILE__, __LINE__); return; } QString lotnum = QString::null; QDate expdate = omfgThis->startOfTime(); QDate warrdate; if(result > 0 && _singleLot->isChecked()) { // first find out if we have any lot controlled items that need distribution q.prepare("SELECT count(*) AS result" " FROM itemlocdist, itemsite" " WHERE ((itemlocdist_itemsite_id=itemsite_id)" " AND (itemlocdist_reqlotserial)" " AND (itemsite_controlmethod='L')" " AND (itemlocdist_series=:itemlocdist_series) ); "); q.bindValue(":itemlocdist_series", result); q.exec(); // if we have any then ask for a lot# and optionally expiration date. if(q.first() && (q.value("result").toInt() > 0) ) { getLotInfo newdlg(this, "", TRUE); // find out if any itemsites that are lot controlled are perishable q.prepare("SELECT itemsite_perishable,itemsite_warrpurc AS result" " FROM itemlocdist, itemsite" " WHERE ((itemlocdist_itemsite_id=itemsite_id)" " AND (itemlocdist_series=:itemlocdist_series) ); "); q.bindValue(":itemlocdist_series", result); q.exec(); if(q.first()) newdlg.enableExpiration(q.value("itemsite_perishable").toBool()); newdlg.enableWarranty(q.value("itemsite_warrpurc").toBool()); if(newdlg.exec() == XDialog::Accepted) { lotnum = newdlg.lot(); expdate = newdlg.expiration(); warrdate = newdlg.warranty(); } } else if (q.lastError().type() != QSqlError::None) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); rollback.exec(); return; } } if (distributeInventory::SeriesAdjust(result, this, lotnum, expdate, warrdate) == XDialog::Rejected) { QMessageBox::information( this, tr("Enter Receipts"), tr("Post Canceled") ); rollback.exec(); return; } q.exec("COMMIT;"); // TODO: update this to sReceiptsUpdated? omfgThis->sPurchaseOrderReceiptsUpdated(); if (_captive) { _orderitem->clear(); close(); } else { _order->setId(-1); _close->setText(tr("&Close")); } } else if (q.lastError().type() != QSqlError::None) { rollback.exec(); systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } else // select succeeded but returned no rows q.exec("COMMIT;"); }
void enterPoReceipt::sPost() { ParameterList params; // shared by several queries setParams(params); QString checks = "SELECT SUM(qtyToReceive(recv_order_type," " recv_orderitem_id)) AS qtyToRecv " "FROM recv, orderitem " "WHERE ((recv_order_type=<? value(\"ordertype\") ?>)" " AND (recv_orderitem_id=orderitem_id)" " AND (orderitem_orderhead_type=<? value(\"ordertype\") ?>)" " AND (orderitem_orderhead_id=<? value(\"orderid\") ?>));"; MetaSQLQuery checkm(checks); q = checkm.toQuery(params); if (q.first()) { if (q.value("qtyToRecv").toDouble() <= 0) { QMessageBox::critical(this, tr("Nothing selected for Receipt"), tr("<p>No Line Items have been selected " "for receipt. Select at least one Line Item and " "enter a Receipt before trying to Post.")); return; } } else if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } QString lotnum = QString::null; QDate expdate = omfgThis->startOfTime(); QDate warrdate; bool gotlot = false; XSqlQuery rollback; rollback.prepare("ROLLBACK;"); QString items = "SELECT recv_id, itemsite_controlmethod, itemsite_perishable,itemsite_warrpurc" " FROM orderitem, recv LEFT OUTER JOIN itemsite ON (recv_itemsite_id=itemsite_id)" " WHERE((recv_orderitem_id=orderitem_id)" " AND (orderitem_orderhead_id=<? value(\"orderid\") ?>)" " AND (orderitem_orderhead_type=<? value (\"ordertype\") ?>)" " AND (NOT recv_posted)" " AND (recv_trans_usr_name=CURRENT_USER)" " AND (recv_order_type=<? value (\"ordertype\") ?>))"; MetaSQLQuery itemsm(items); XSqlQuery qi = itemsm.toQuery(params); while(qi.next()) { if(_singleLot->isChecked() && !gotlot && qi.value("itemsite_controlmethod").toString() == "L") { getLotInfo newdlg(this, "", TRUE); newdlg.enableExpiration(qi.value("itemsite_perishable").toBool()); newdlg.enableWarranty(qi.value("itemsite_warrpurc").toBool()); if(newdlg.exec() == XDialog::Accepted) { gotlot = true; lotnum = newdlg.lot(); expdate = newdlg.expiration(); warrdate = newdlg.warranty(); } } q.exec("BEGIN;"); // because of possible insertgltransaction failures q.prepare("SELECT postReceipt(:recv_id, 0) AS result;"); q.bindValue(":recv_id", qi.value("recv_id").toInt()); q.exec(); if (q.first()) { int result = q.value("result").toInt(); if (result < 0 && result != -11) // ignore -11 as it just means there was no inventory { rollback.exec(); systemError(this, storedProcErrorLookup("postReceipt", result), __FILE__, __LINE__); return; } if (distributeInventory::SeriesAdjust(result, this, lotnum, expdate, warrdate) == XDialog::Rejected) { QMessageBox::information( this, tr("Enter Receipts"), tr("Post Canceled") ); rollback.exec(); return; } } else if (q.lastError().type() != QSqlError::NoError) { rollback.exec(); systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } q.exec("COMMIT;"); } // TODO: update this to sReceiptsUpdated? omfgThis->sPurchaseOrderReceiptsUpdated(); if (_captive) { _orderitem->clear(); close(); } else { _order->setId(-1); _close->setText(tr("&Close")); } }