PageRenderTime 39ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/inflow/inflowfirmadoc.cpp

https://bitbucket.org/victorrbravo/inflow
C++ | 256 lines | 200 code | 47 blank | 9 comment | 15 complexity | c3c2ce7c0e318a36a4add1e4f984f4f8 MD5 | raw file
  1. #include "inflowfirmadoc.h"
  2. #include "ui_inflowfirmadoc.h"
  3. #include <QWebView>
  4. #include <QWebFrame>
  5. InflowFirmaDoc::InflowFirmaDoc(QWidget *parent) :
  6. QDialog(parent),
  7. m_ui(new Ui::InflowFirmaDoc)
  8. {
  9. m_ui->setupUi(this);
  10. jscriptload = false; // No cargar el script
  11. _listprincipaltitle = "";
  12. _listprincipalcount = 0;
  13. m_ui->webDocument->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal,
  14. Qt::ScrollBarAlwaysOff);
  15. connect(m_ui->webDocument->page(), SIGNAL(loadFinished (bool)), this,
  16. SLOT(executeJSCodeAfterLoad(bool)) );
  17. connect(m_ui->buttonImprimir,SIGNAL(clicked()),this,SLOT(doPrint()));
  18. connect(m_ui->buttonVerPDF,SIGNAL(clicked()),this,SLOT(viewpdf()));
  19. connect(m_ui->buttonGuardar,SIGNAL(clicked()),this,SLOT(savepdf()));
  20. }
  21. InflowFirmaDoc::~InflowFirmaDoc() {
  22. delete m_ui;
  23. }
  24. void InflowFirmaDoc::doPrint() {
  25. qDebug("...InflowFirmaDoc::doprint....");
  26. QPrintDialog dialog(&printer, this);
  27. if (dialog.exec()) {
  28. m_ui->webDocument->print(&printer);
  29. }
  30. }
  31. void InflowFirmaDoc::savepdf() {
  32. QString myfile = QFileDialog::getSaveFileName(this, tr("Guardar archivo a firmar"),
  33. QDir::homePath()+ "/reportesafet.pdf",
  34. tr("Documentos PDF (*.pdf)"));
  35. printer.setOutputFileName(myfile);
  36. printer.setPrinterName("Print to File (PDF)");
  37. printer.setOutputFormat(QPrinter::PdfFormat);
  38. m_ui->webDocument->print(&printer);
  39. }
  40. void InflowFirmaDoc::viewpdf() {
  41. QString myfile = SafetYAWL::getTempNameFiles(1).at(0)+".pdf";
  42. qDebug("...viewpdf...:|%s|",qPrintable(myfile));
  43. printer.setOutputFileName(myfile);
  44. printer.setPrinterName("Print to File (PDF)");
  45. printer.setOutputFormat(QPrinter::PdfFormat);
  46. m_ui->webDocument->print(&printer);
  47. QDesktopServices::openUrl(myfile);
  48. }
  49. void InflowFirmaDoc::loadSignersInfo(const QList<SafetWorkflow::InfoSigner>& l) {
  50. m_ui->listSigners->clear();
  51. for(int i=0; i < l.count(); i++) {
  52. QListWidgetItem *myitem = NULL;
  53. QString infosigner = "[ " + l.at(i).commonName + " ] /" + l.at(i).issuer + "/"+
  54. l.at(i).date+" "+l.at(i).hour+"/"+l.at(i).location;
  55. if ( l.at(i).isvalid ) {
  56. myitem = new QListWidgetItem(QIcon(":/seal.png"),infosigner);
  57. }
  58. else {
  59. myitem = new QListWidgetItem(QIcon(":/del.png"),infosigner);
  60. }
  61. m_ui->listSigners->addItem(myitem);
  62. }
  63. }
  64. void InflowFirmaDoc::generateJScriptreports(const QString& documents,
  65. const QList<QSqlField>& fields,
  66. int ncounts,
  67. const QString& entitytosign,
  68. QList<SafetWorkflow::InfoSigner>& signers)
  69. {
  70. jscriptload = true;
  71. currentDocuments = documents;
  72. // qDebug("....currentDocuments...generateJScriptreports: %s", qPrintable(currentDocuments));
  73. // qDebug("..fields.count()...: %d", fields.count());
  74. currentFields = fields;
  75. _listprincipalcount = ncounts;
  76. _listprincipaltitle = entitytosign;
  77. _entityToSign = entitytosign;
  78. QString currentreg, totalregs;
  79. for(int i=0; i < signers.count(); i++) {
  80. currentreg = "{";
  81. currentreg += "commonName:";
  82. currentreg += "\""+ signers.at(i).commonName+"\",";
  83. currentreg += "issuer:";
  84. currentreg += "\""+ signers.at(i).issuer+"\",";
  85. currentreg += "date:";
  86. currentreg += "\""+ signers.at(i).date+"\",";
  87. currentreg += "hour:";
  88. currentreg += "\""+ signers.at(i).hour+"\",";
  89. currentreg += "location:";
  90. currentreg += "\""+ signers.at(i).location+"\",";
  91. currentreg += "role:";
  92. currentreg += "\""+ signers.at(i).role+"\",";
  93. currentreg += "hexsign:";
  94. currentreg += "\""+ QString(signers.at(i).hexsign.toHex().data())+"\",";
  95. currentreg += "digest:";
  96. currentreg += "\""+ QString(signers.at(i).digest.toHex().data())+"\",";
  97. currentreg += "isvalid:";
  98. if ( signers.at(i).isvalid ) {
  99. currentreg += "true ";
  100. }
  101. else {
  102. currentreg += "false ";
  103. }
  104. currentreg += "},";
  105. totalregs = totalregs + currentreg;
  106. }
  107. totalregs.chop(1);
  108. _currentSigners = totalregs;
  109. m_ui->webDocument->reload();
  110. }
  111. void InflowFirmaDoc::changeEvent(QEvent *e)
  112. {
  113. QDialog::changeEvent(e);
  114. switch (e->type()) {
  115. case QEvent::LanguageChange:
  116. m_ui->retranslateUi(this);
  117. break;
  118. default:
  119. break;
  120. }
  121. }
  122. void InflowFirmaDoc::executeJSCodeAfterLoad(bool ok ) {
  123. qDebug("...jscriptload:%d", jscriptload);
  124. qDebug("...ok:%d", ok);
  125. if ( !jscriptload ) {
  126. return;
  127. }
  128. if ( !ok ) {
  129. // SafetYAWL::streamlog
  130. // << SafetLog::Error
  131. // << tr("Ocurrio un error al cargar el reporte (%1)")
  132. // .arg(m_ui->webDocument->url().toString());
  133. return;
  134. }
  135. qDebug("...currentDocuments:\n|%s|\n",
  136. qPrintable(currentDocuments));
  137. // ** Reemplazar caracteres especiales, hacen falta pruebas aqui
  138. currentDocuments.replace("\n","");
  139. // ** Reemplazar caracteres especiales, hacen falta pruebas aqui
  140. QString data;
  141. data = QString("safettitle = '%1';\n").arg(_listprincipaltitle);
  142. data += QString("safetlistcount = %1;\n").arg(_listprincipalcount);
  143. data += "safetlist = [";
  144. data += currentDocuments;
  145. data += "];";
  146. jscriptcolumns = "safetcolumns = [";
  147. int i = 0;
  148. foreach(QSqlField f, currentFields ) {
  149. QString scriptlen = getScriptLen(f);
  150. jscriptcolumns
  151. += QString("{ key: \"%1\",label:\"%1\",width:%2,"
  152. "resizeable:true,sortable:true},\n")
  153. .arg(f.name())
  154. .arg(scriptlen);
  155. i++;
  156. }
  157. if ( i > 0 ) {
  158. jscriptcolumns.chop(2);
  159. }
  160. jscriptcolumns += "];";
  161. QString code;
  162. code = data;
  163. code += "\nsafetsigners = [";
  164. code += _currentSigners;
  165. code += "];\n";
  166. code += " ";
  167. code += jscriptcolumns;
  168. code += " ";
  169. qDebug("...*code*...:\n%s\n",qPrintable(code));
  170. evalJS(code);
  171. code = "safetproccessData();";
  172. evalJS(code);
  173. }
  174. QString InflowFirmaDoc::getScriptLen(const QSqlField& f) {
  175. QString result = "40";
  176. switch ( f.type()) {
  177. case QVariant::String:
  178. if (f.value().toString().length() > 50 || f.name().contains("desc")) {
  179. result = "300";
  180. }
  181. else {
  182. result = "130";
  183. }
  184. break;
  185. case QVariant::Date:
  186. case QVariant::DateTime:
  187. result = "150";
  188. default:;
  189. }
  190. return result;
  191. }
  192. // Calcular la longitud del campo para la tabla generada en Listar_Datos
  193. QString InflowFirmaDoc::evalJS(const QString &js) {
  194. Q_CHECK_PTR( m_ui->webDocument );
  195. qDebug("***.....evalJS...QWebFrame *frame = m_ui->webDocument->page()->mainFrame();");
  196. QWebFrame *frame = m_ui->webDocument->page()->mainFrame();
  197. return frame->evaluateJavaScript(js).toString();
  198. }
  199. void InflowFirmaDoc::loadReportTemplate() {
  200. QString nameProtocol = SafetYAWL::getConf()["Reports/protocol"]+ "://";
  201. QString namePath = SafetYAWL::getConf()["Reports/path"];
  202. QString namePage = SafetYAWL::getConf()["Reports/documenttosign.template"];
  203. namePage = namePage.section("/",-1);
  204. qDebug("...namePage: |%s|",qPrintable(namePage));
  205. QString fullUrl = nameProtocol + namePath + "/" + namePage;
  206. QUrl url(fullUrl);
  207. qDebug("***...InflowFirmaDoc::loadReportTemplate....fullUrl: |%s|",qPrintable(fullUrl));
  208. m_ui->webDocument->load(url);
  209. }