void printCheck::sCreateACH() { XSqlQuery releasenum; releasenum.prepare("SELECT releaseNumber('ACHBatch', :batch);"); QString batch; q.prepare("SELECT * FROM formatACHChecks(:bankaccnt_id, :checkhead_id, :key);"); q.bindValue(":bankaccnt_id", _bankaccnt->id()); q.bindValue(":checkhead_id", _check->id()); q.bindValue(":key", omfgThis->_key); q.exec(); if (q.first()) { batch = q.value("achline_batch").toString(); releasenum.bindValue(":batch", batch); if (achFileDir.isEmpty()) { achFileDir = xtsettingsValue("ACHOutputDirectory").toString(); } QString suffixes = "*.ach *.dat *.txt"; if (! suffixes.contains(_metrics->value("ACHDefaultSuffix"))) suffixes = "*" + _metrics->value("ACHDefaultSuffix") + " " + suffixes; QString filename = QFileDialog::getSaveFileName(this, tr("ACH Output File"), printCheck::achFileDir + QDir::separator() + "ach" + batch + _metrics->value("ACHDefaultSuffix"), "(" + suffixes + ")"); if (filename.isEmpty()) { releasenum.exec(); return; } QFileInfo fileinfo(filename); achFileDir = fileinfo.absolutePath(); QFile achfile(filename); if (! achfile.open(QIODevice::WriteOnly)) { releasenum.exec(); QMessageBox::critical(this, tr("Could Not Open File"), tr("Could not open %1 for writing ACH data.") .arg(filename)); return; } do { achfile.write(q.value("achline_value").toString().toAscii()); achfile.write("\n"); } while (q.next()); achfile.close(); if (q.lastError().type() != QSqlError::NoError) { releasenum.exec(); achfile.remove(); systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } if (confirmAchOK::askOK(this, achfile)) markCheckAsPrinted(_check->id()); else { releasenum.exec(); XSqlQuery clearq; clearq.prepare("UPDATE checkhead " "SET checkhead_printed=false," " checkhead_ach_batch=NULL " "WHERE (checkhead_id=:checkhead_id);"); clearq.bindValue(":checkhead_id", _check->id()); clearq.exec(); if (clearq.lastError().type() != QSqlError::NoError) { systemError(this, clearq.lastError().databaseText(), __FILE__, __LINE__); return; } } } else if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } }
void printCheck::sPrint() { if (_createACH->isEnabled() && QMessageBox::question(this, tr("Print Anyway?"), tr("<p>The recipient of this check has been " "configured for ACH transactions. Do you want " "to print this check for them anyway?<p>If you " "answer 'Yes' then a check will be printed. " "If you say 'No' then you should click Create " "ACH File."), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No) == QMessageBox::No) return; q.prepare( "SELECT checkhead_printed, report_name, bankaccnt_id " "FROM checkhead, bankaccnt, form, report " "WHERE ((checkhead_bankaccnt_id=bankaccnt_id)" " AND (bankaccnt_check_form_id=form_id)" " AND (form_report_id=report_id)" " AND (checkhead_id=:checkhead_id) );" ); q.bindValue(":checkhead_id", _check->id()); q.exec(); if (q.first()) { if(q.value("checkhead_printed").toBool()) { QMessageBox::information( this, tr("Check Already Printed"), tr("<p>The selected Check has already been printed.") ); return; } QString reportname = q.value("report_name").toString(); // get the report definition out of the database // this should somehow be condensed into a common code call or something // in the near future to facilitate easier conversion in other places // of the application to use the new rendering engine directly XSqlQuery report; report.prepare( "SELECT report_source " " FROM report " " WHERE (report_name=:report_name) " "ORDER BY report_grade DESC LIMIT 1;" ); report.bindValue(":report_name", reportname); report.exec(); QDomDocument docReport; if (report.first()) { QString errorMessage; int errorLine; if (!docReport.setContent(report.value("report_source").toString(), &errorMessage, &errorLine)) { systemError(this, errorMessage, __FILE__, __LINE__); return; } } else { systemError(this, report.lastError().databaseText(), __FILE__, __LINE__); return; } // end getting the report definition out the database if(_setCheckNumber != -1 && _setCheckNumber != _nextCheckNum->text().toInt()) { q.prepare("SELECT setNextCheckNumber(:bankaccnt_id, :nextCheckNumber) AS result;"); q.bindValue(":bankaccnt_id", _bankaccnt->id()); q.bindValue(":nextCheckNumber", _nextCheckNum->text().toInt()); q.exec(); if (q.first()) { int result = q.value("result").toInt(); if (result < 0) { systemError(this, storedProcErrorLookup("setNextCheckNumber", result), __FILE__, __LINE__); return; } } else if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } } q.prepare("UPDATE checkhead SET checkhead_number=fetchNextCheckNumber(checkhead_bankaccnt_id)" " WHERE(checkhead_id=:checkhead_id);"); q.bindValue(":checkhead_id", _check->id()); q.exec(); if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } ParameterList params; params.append("checkhead_id", _check->id()); params.append("apchk_id", _check->id()); // replace with new renderer code so we can get a page count ORPreRender pre; pre.setDom(docReport); pre.setParamList(params); ORODocument * doc = pre.generate(); QPrinter printer(QPrinter::HighResolution); ORPrintRender render; render.setupPrinter(doc, &printer); QPrintDialog pd(&printer); pd.setMinMax(1, doc->pages()); if(pd.exec() == XDialog::Accepted) { render.setPrinter(&printer); render.render(doc); } else return; int page_num = 1; while(page_num < doc->pages()) { page_num++; XSqlQuery qq; qq.prepare("INSERT INTO checkhead" " (checkhead_recip_id, checkhead_recip_type," " checkhead_bankaccnt_id, checkhead_printed," " checkhead_checkdate, checkhead_number," " checkhead_amount, checkhead_void," " checkhead_misc," " checkhead_for, checkhead_notes," " checkhead_curr_id, checkhead_deleted) " "SELECT checkhead_recip_id, checkhead_recip_type," " checkhead_bankaccnt_id, TRUE," " checkhead_checkdate, fetchNextCheckNumber(checkhead_bankaccnt_id)," " checkhead_amount, TRUE, TRUE," " 'Continuation of Check #'||checkhead_number," " 'Continuation of Check #'||checkhead_number," " checkhead_curr_id, TRUE" " FROM checkhead" " WHERE(checkhead_id=:checkhead_id);"); qq.bindValue(":checkhead_id", _check->id()); if(!qq.exec()) { systemError(this, "Received error but will continue anyway:\n"+qq.lastError().databaseText(), __FILE__, __LINE__); } } omfgThis->sChecksUpdated(_bankaccnt->id(), _check->id(), TRUE); } else if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } else // join failed { QMessageBox::critical(this, tr("Cannot Print Check"), tr("<p>The selected Check cannot be printed as the " "Bank Account that it is to draw upon does not " "have a valid Check Format assigned to it. " "Please assign a valid Check Format to this Bank " "Account before attempting to print this Check.")); return; } if ( QMessageBox::question( this, tr("Check Printed"), tr("Was the selected Check printed successfully?"), QMessageBox::Yes, QMessageBox::No | QMessageBox::Default) == QMessageBox::Yes) markCheckAsPrinted(_check->id()); else if ( QMessageBox::question(this, tr("Mark Check as Voided"), tr("<p>Would you like to mark the selected " "Check as Void and create a replacement " "check?"), QMessageBox::Yes, QMessageBox::No | QMessageBox::Default) == QMessageBox::Yes) { q.prepare("SELECT voidCheck(:checkhead_id) AS result;"); q.bindValue(":checkhead_id", _check->id()); q.exec(); if (q.first()) { int result = q.value("result").toInt(); if (result < 0) { systemError(this, storedProcErrorLookup("voidCheck", result), __FILE__, __LINE__); return; } } else if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } q.prepare( "SELECT checkhead_bankaccnt_id," " replaceVoidedCheck(checkhead_id) AS result " "FROM checkhead " "WHERE (checkhead_id=:checkhead_id);" ); q.bindValue(":checkhead_id", _check->id()); q.exec(); if (q.first()) { int result = q.value("result").toInt(); if (result < 0) { systemError(this, storedProcErrorLookup("replaceVoidedCheck", result), __FILE__, __LINE__); return; } omfgThis->sChecksUpdated(q.value("checkhead_bankaccnt_id").toInt(), _check->id(), TRUE); sHandleBankAccount(_bankaccnt->id()); _print->setFocus(); } else if (q.lastError().type() != QSqlError::NoError) { systemError(this, q.lastError().databaseText(), __FILE__, __LINE__); return; } } }
void printCheck::sCreateEFT() { XSqlQuery printCreateEFT; XSqlQuery releasenum; releasenum.prepare("SELECT releaseNumber('ACHBatch', :batch);"); QString batch; MetaSQLQuery mql("SELECT *" " FROM <? literal(\"func\") ?>(<? value(\"bank\") ?>," " <? value(\"check\") ?>, <? value(\"key\") ?>);"); ParameterList params; params.append("func", _metrics->value("EFTFunction")); params.append("bank", _bankaccnt->id()); params.append("check",_check->id()); params.append("key", omfgThis->_key); printCreateEFT = mql.toQuery(params); if (printCreateEFT.first()) { batch = printCreateEFT.value("achline_batch").toString(); releasenum.bindValue(":batch", batch); if (eftFileDir.isEmpty()) { eftFileDir = xtsettingsValue("ACHOutputDirectory").toString(); } QString suffixes = "*.ach *.aba *.dat *.txt"; if (! suffixes.contains(_metrics->value("ACHDefaultSuffix"))) suffixes = "*" + _metrics->value("ACHDefaultSuffix") + " " + suffixes; QString filename = QFileDialog::getSaveFileName(this, tr("EFT Output File"), printCheck::eftFileDir + QDir::separator() + "eft" + batch + _metrics->value("ACHDefaultSuffix"), "(" + suffixes + ")"); if (filename.isEmpty()) { releasenum.exec(); return; } QFileInfo fileinfo(filename); eftFileDir = fileinfo.absolutePath(); QFile eftfile(filename); if (! eftfile.open(QIODevice::WriteOnly)) { releasenum.exec(); QMessageBox::critical(this, tr("Could Not Open File"), tr("Could not open %1 for writing EFT data.") .arg(filename)); return; } do { eftfile.write(printCreateEFT.value("achline_value").toString().toLatin1()); eftfile.write("\n"); } while (printCreateEFT.next()); eftfile.close(); if (printCreateEFT.lastError().type() != QSqlError::NoError) { releasenum.exec(); eftfile.remove(); systemError(this, printCreateEFT.lastError().databaseText(), __FILE__, __LINE__); return; } if (confirmAchOK::askOK(this, eftfile)) markCheckAsPrinted(_check->id()); else { releasenum.exec(); XSqlQuery clearq; clearq.prepare("UPDATE checkhead " "SET checkhead_printed=false," " checkhead_ach_batch=NULL " "WHERE (checkhead_id=:checkhead_id);"); clearq.bindValue(":checkhead_id", _check->id()); clearq.exec(); if (clearq.lastError().type() != QSqlError::NoError) { systemError(this, clearq.lastError().databaseText(), __FILE__, __LINE__); return; } } } else if (printCreateEFT.lastError().type() != QSqlError::NoError) { systemError(this, printCreateEFT.lastError().databaseText(), __FILE__, __LINE__); return; } }