Advertisement
Guest User

Untitled

a guest
Jun 21st, 2019
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.95 KB | None | 0 0
  1. var wi_workflow = SuperWidget.extend({
  2. instanceId: null,
  3. fileBase64: null,
  4. folderId: null,
  5. formId: null,
  6. loading: false,
  7. folderName: 'Reembolso Assistencial',
  8. folderFound: false,
  9. groupFound: false,
  10. formFound: false,
  11. formFolderId: null,
  12. anexosPromise: [],
  13. soapEnvelop: null,
  14. startingGroups: [{
  15. code : "Reembolso Assistencial - Setor",
  16. description : "Reembolso Assistencial - Setor",
  17. isInternal : "false"
  18. },
  19. {
  20. code : "Reembolso Assistencial - Comissão",
  21. description : "Reembolso Assistencial - Comissão",
  22. isInternal : "false"
  23. }],
  24. forms : [ {
  25. 'name' : 'form_reembolso_assistencial.html',
  26. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/form_reembolso_assistencial.html',
  27. 'anexos': [
  28. // {
  29. // 'name' : 'formularioReembolso.pdf',
  30. // 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/formularioReembolso.pdf'
  31. // },
  32. {
  33. 'name' : 'js/FileSaver.rs',
  34. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/js/FileSaver.js'
  35. },
  36. {
  37. 'name' : 'js/form_reembolso_assistencial.js',
  38. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/js/form_reembolso_assistencial.js'
  39. },
  40. {
  41. 'name' : 'js/minipdf.js',
  42. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/js/minipdf.js'
  43. },
  44. {
  45. 'name' : 'js/pako.js',
  46. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/js/pako.js'
  47. },
  48. {
  49. 'name' : 'js/pdf.worker.js',
  50. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/js/pdf.worker.js'
  51. },
  52. {
  53. 'name' : 'js/pdfform.js',
  54. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/js/pdfform.js'
  55. },
  56. {
  57. 'name' : 'events/displayFields.js',
  58. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/events/displayFields.js'
  59. },
  60. {
  61. 'name' : 'events/validateForm.js',
  62. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial/events/validateForm.js'
  63. }
  64. ]
  65. },
  66. {
  67. 'name' : 'form_reembolso_assistencial_anexo.html',
  68. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial_anexo/form_reembolso_assistencial_anexo.html',
  69. 'anexos': [{
  70. 'name' : 'events/displayFields.js',
  71. 'dsFilePath' : '/reembolsoAssistencialResources/forms/form_reembolso_assistencial_anexo/events/displayFields.js'
  72. }]
  73. }],
  74.  
  75. init: function() {
  76. var that = this;
  77. var tpl = 'template-container-install-process';
  78. var tplBtn = 'template-btn-install';
  79.  
  80. $('#up-area-' + that.instanceId).append(that.processTemplate(that.templates[tpl], {}));
  81.  
  82. Promise.all([
  83. wi_workflow.searchGroup(),
  84. wi_workflow.searchFolder(),
  85. wi_workflow.getSoapEnvelop()]).then((result) => {
  86.  
  87. wi_workflow.searchForm();
  88.  
  89. if(wi_workflow.groupFound && wi_workflow.folderFound){
  90. tpl = 'template-container-process-installed';
  91. tplBtn = 'template-btn-installed';
  92. $("#botao_saveToken_" + that.instanceId).show();
  93. }
  94. $('#up-btn-area-' + that.instanceId).html(that.processTemplate(that.templates[tplBtn], {}));
  95. })
  96. },
  97.  
  98. processTemplate: function(template, data) {
  99. var html = Mustache.render(template, data);
  100. return html;
  101. },
  102.  
  103. bindings: {
  104. local: {
  105. 'install': ['click_createGroupAndFolder']
  106. }
  107. },
  108.  
  109. /************************************/
  110. /******* CRIA GRUPO E PASTA *********/
  111. /************************************/
  112. /**
  113. * O grupo é criado pois uma atividade no workflow depende desse grupo
  114. * A pasta é criada para ser a pasta do formulário
  115. */
  116. createGroupAndFolder: function(){
  117. var that = this;
  118. this.loading = FLUIGC.loading('#uploadprocess_' + this.instanceId);
  119. this.loading.show();
  120. this.createGroupService(function(err, data){
  121. if(!err){
  122. $('#up-group-icon').removeClass('fluigicon-remove-sign').addClass('fluigicon-check-circle-on');
  123. //$('#up-area-' + that.instanceId).html(that.processTemplate(that.templates["template-container-process-installed"], {}));
  124. }
  125. });
  126.  
  127. if(!wi_workflow.folderFound){
  128. that.createFolderService(function(err, data){
  129. if(!err){
  130. $('#up-folder-icon').removeClass('fluigicon-remove-sign').addClass('fluigicon-check-circle-on');
  131. wi_workflow.folderFound = true;
  132. that.folderId = data.content.id;
  133. //pensar em outra forma de criar o fomulario que nao dependa da criacao da pasta
  134. //that.getCreateCardXML();
  135. }
  136. });
  137. }
  138.  
  139. if(!wi_workflow.formFound){
  140.  
  141. if(!wi_workflow.formInstalled){
  142. for(var i = 0; i < wi_workflow.forms.length; j++){
  143. wi_workflow.installForm(wi_workflow.forms[j]);
  144. }
  145. }
  146. }
  147.  
  148. // if(!that.checkAjax() /* funcao que procura se os forms estao instalados */){
  149. //
  150. // }
  151.  
  152. $('#up-btn-area-' + that.instanceId).html(that.processTemplate(that.templates['template-btn-installed'], {}));
  153.  
  154.  
  155. },
  156.  
  157.  
  158. /*********** CREATE CARD: WS para criar o formulario ************/
  159.  
  160. /**
  161. * Arquivo XML(ECMCardIndexService_createCard.xml) do WebService
  162. */
  163. getCreateCardXML: function(){
  164. var that = this;
  165. $.ajax({
  166. url: '/reembolso_install_workflow/resources/process/ECMCardIndexService_createCard.xml',
  167. type: 'GET',
  168. dataType: 'xml',
  169. headers:{'Content-Type':'text/xml','X-Requested-With':'XMLHttpRequest'},
  170. processData: false,
  171. success: function(data){
  172. that.extractFormBase64($(data));
  173. }
  174. });
  175. },
  176.  
  177. /**
  178. * WebService para criar um formulário no fluig
  179. */
  180. uploadFormWS: function(xml){
  181. var that = this;
  182. WCMAPI.Create({
  183. async: false,
  184. url: WCMAPI.serverURL + '/webdesk/ECMCardIndexService?wsdl',
  185. contentType: 'text/xml; charset=utf-8',
  186. dataType: 'xml',
  187. data: xml[0],
  188. success: function(data) {
  189. if($(data.getElementsByTagName('documentId')[0])){
  190.  
  191. // o response do WS é o id do formulário.
  192. var formId = $(data.getElementsByTagName('documentId')[0]).text();
  193. if(formId){
  194. $('#up-form-icon').removeClass('fluigicon-remove-sign').addClass('fluigicon-check-circle-on');
  195. that.formId = formId;
  196. that.getImportProcessXML();
  197. }
  198. }
  199. },
  200. error: function(jqXHR, textStatus, errorThrown) {
  201. }
  202. });
  203. },
  204.  
  205.  
  206. /********** IMPORT PROCESS **********/
  207. /**
  208. * Arquivo XML(ECMWorkflowEngineService_importProcess.xml) do WebService
  209. */
  210. getImportProcessXML: function(){
  211. var that = this;
  212. $.ajax({
  213. url: '/wi_process/resources/process/ECMWorkflowEngineService_importProcess.xml',
  214. type: 'GET',
  215. dataType: 'xml',
  216. headers:{'Content-Type':'text/xml','X-Requested-With':'XMLHttpRequest'},
  217. processData: false,
  218. success: function(ws){
  219. that.buildProcessXML($(ws));
  220. }
  221. });
  222. },
  223.  
  224. /**
  225. * Monta o XML do WS com o XML(em Base64) do processo em anexo
  226. */
  227. buildProcessXML: function(ws){
  228. var that = this;
  229. $.ajax({
  230. url: '/wi_process/resources/process/processo-simples.xml',
  231. type: 'GET',
  232. dataType: 'binary',
  233. contentType: "charset=utf-8",
  234. headers:{'Content-Type':'text/html','X-Requested-With':'XMLHttpRequest'},
  235. processData: false,
  236. success: function(xml){
  237. var reader = new window.FileReader();
  238. reader.readAsDataURL(xml);
  239. reader.onloadend = function () {
  240. ws.find('username').text(WCMAPI.userLogin);
  241. ws.find('companyId').text(WCMAPI.getTenantId());
  242. ws.find('processId').text('processo-simples');
  243. ws.find('newProcess').text('true');
  244. ws.find('overWrite').text('true');
  245. ws.find('colleagueId').text(WCMAPI.userLogin);
  246.  
  247. // anexa o worflow no XML do WS
  248. var attachmentItem = '<item>\
  249. <attach>true</attach>\
  250. <fileName>processo-simples.xml</fileName>\
  251. <filecontent>' + reader.result.split(';base64,')[1] + '</filecontent>\
  252. </item>';
  253. ws.find('attachments').append(attachmentItem);
  254.  
  255. that.uploadProcessWS(ws);
  256. }
  257. }, error: function (xhr, ajaxOptions, thrownError) {
  258. }
  259. });
  260. },
  261.  
  262. /**
  263. * WebService para criar um processo no fluig
  264. */
  265. uploadProcessWS: function(ws){
  266. var that = this;
  267. WCMAPI.Create({
  268. async: false,
  269. url: WCMAPI.serverURL + '/webdesk/ECMWorkflowEngineService?wsdl',
  270. contentType: 'text/xml; charset=utf-8',
  271. dataType: 'xml',
  272. data: ws[0],
  273. success: function(data) {
  274. if(data){
  275. that.updateProcess();
  276. }
  277. },
  278. error: function(jqXHR, textStatus, errorThrown) {
  279. }
  280. });
  281. },
  282.  
  283.  
  284. /**
  285. * Após criar o processo, é necessário editar o processo com os dados corretos;
  286. */
  287. updateProcess: function(){
  288. var that = this;
  289.  
  290. // coloca o processo em modo de edição. No callback, faz a atualização como id do formulario correto
  291. this.processEditModeService(function(){
  292. $.ajax({
  293. url: '/wi_process/resources/process/processo-simples.xml',
  294. type: 'GET',
  295. dataType: 'xml',
  296. headers:{'Content-Type':'text/xml','X-Requested-With':'XMLHttpRequest'},
  297. processData: false,
  298. success: function(xml){
  299. var wf = $(xml);
  300. wf.find('formId').text(that.formId);
  301. wf.find('companyId').text(WCMAPI.getTenantId());
  302. wf.find('version').text('1');
  303.  
  304. // atualiza processo pela API rest
  305. var x = (new XMLSerializer()).serializeToString(xml);
  306. that.saveProcessService(x, function(error, data){
  307. if(!error){
  308. // liberar o processo para uso
  309. that.releaseProcessService(function(err, data){
  310. if(!err){
  311. FLUIGC.toast({
  312. title: '',
  313. message: '${i18n.getTranslation("msg.alert.items.created")}',
  314. type: 'success'
  315. });
  316. $('#up-process-icon').removeClass('fluigicon-remove-sign').addClass('fluigicon-check-circle-on');
  317. $('#up-btn-area-' + that.instanceId).html(that.processTemplate(that.templates['template-btn-installed'], {}));
  318. that.loading.hide();
  319. } else{
  320. that.loading.hide();
  321. }
  322. });
  323. }
  324. });
  325.  
  326. }, error: function (xhr, ajaxOptions, thrownError) {
  327. }
  328. });
  329. });
  330. },
  331.  
  332. /**
  333. * API Rest para colocar o processo em mode de edição
  334. */
  335. processEditModeService: function(cb) {
  336. var options, url = '/ecm/api/rest/ecm/workflowModeling/newversion?processId=processo-simples';
  337. options = {
  338. url: url,
  339. contentType: 'application/json',
  340. dataType: 'json',
  341. loading: false
  342. };
  343. FLUIGC.ajax(options, cb);
  344. },
  345.  
  346. /**
  347. * API Rest para salvar processo
  348. */
  349. saveProcessService: function(xml, cb) {
  350. var options, url = '/ecm/api/rest/ecm/workflowModeling/saveProcess';
  351. var params = {
  352. processDiagramXML: xml
  353. };
  354. options = {
  355. url: url,
  356. contentType: 'application/json',
  357. dataType: 'json',
  358. data: xml,
  359. type: 'POST',
  360. loading: false
  361. };
  362. FLUIGC.ajax(options, cb);
  363. },
  364.  
  365. /**
  366. * API Rest para liberar o processo
  367. */
  368. releaseProcessService: function(cb){
  369. var options, url = '/ecm/api/rest/ecm/workflowModeling/releaseprocess?processId=processo-simples';
  370. options = {
  371. url: url,
  372. contentType: 'application/json',
  373. dataType: 'json',
  374. loading: false
  375. };
  376. FLUIGC.ajax(options, cb);
  377. },
  378.  
  379. /**
  380. * API Rest para criar a pasta para o formulario
  381. */
  382. createFolderService: function(cb){
  383. var that = this;
  384. var options, url = '/api/public/ecm/document/createFolder';
  385. var params = {
  386. description: that.folderName,
  387. parentId: '0'
  388. };
  389. options = {
  390. url: url,
  391. contentType: 'application/json',
  392. dataType: 'json',
  393. data: JSON.stringify(params),
  394. type: 'POST',
  395. loading: false
  396. };
  397. FLUIGC.ajax(options, cb);
  398. },
  399.  
  400. /**
  401. * API Rest para criar o grupo
  402. */
  403. createGroupService: function(cb){
  404. var options, url = '/api/public/2.0/groups/create';
  405.  
  406. options = {
  407. url: url,
  408. contentType: 'application/json',
  409. dataType: 'json',
  410. data: JSON.stringify(wi_workflow.startingGroups),
  411. type: 'POST',
  412. loading: false
  413. };
  414.  
  415. for (var j = 0; j < params.length; j++) {
  416. options.data = JSON.stringify(params[j]);
  417.  
  418. FLUIGC.ajax(options, cb);
  419. }
  420.  
  421. },
  422.  
  423. searchGroup: function(){
  424. return new Promise(function(resolve, reject) {
  425. parent.WCMAPI.Create({
  426. url: parent.WCMAPI.getServerURL() + '/api/public/wcm/group',
  427. contentType: 'application/json',
  428. dataType: 'json',
  429. type: 'GET',
  430. success: function(data, status, jqXHR) {
  431. wi_workflow.groupFound = false;
  432.  
  433. if(data == undefined || data == null ||
  434. data.length == 0){
  435. resolve(true);
  436. return;
  437. }
  438.  
  439. for (var j = 0; j < wi_workflow.startingGroups.length; j++) {
  440. wi_workflow.groupFound = false;
  441. for (var i = 0; i < data.length; i++) {
  442. if(data[i] == wi_workflow.startingGroups[j].code){
  443. wi_workflow.groupFound = true;
  444. break;
  445. }
  446. }
  447.  
  448. if(!wi_workflow.groupFound){
  449. // Encontrou 1 grupo obrigatorio que nao esta cadastrado
  450. break;
  451. }
  452. }
  453.  
  454. if(wi_workflow.groupFound){
  455. $('#up-group-icon').removeClass('fluigicon-remove-sign').addClass('fluigicon-check-circle-on');
  456. }
  457.  
  458.  
  459. resolve(true);
  460. },
  461. error: function(jqXHR, status, errorThrown){
  462. console.log(errorThrown);
  463. }
  464. });
  465. });
  466. },
  467.  
  468. /**
  469. * Api rest para pesquisar pasta
  470. */
  471. searchFolder: function(){
  472. return new Promise(function(resolve, reject) {
  473. parent.WCMAPI.Create({
  474. url: parent.WCMAPI.getServerURL() + '/api/public/ecm/document/listDocument/0',
  475. contentType: 'application/json',
  476. dataType: 'json',
  477. type: 'GET',
  478. success: function(data, status, jqXHR) {
  479. if(data == undefined || data == null ||
  480. data.content == undefined || data.content == null ||
  481. data.content.length == 0){
  482. resolve(true);
  483. return;
  484. }
  485.  
  486. for (var i = 0; i < data.content.length; i++) {
  487. if(data.content[i].description == wi_workflow.folderName){
  488. wi_workflow.formFolderId = data.content[i].id;
  489. wi_workflow.folderFound = true;
  490. $('#up-folder-icon').removeClass('fluigicon-remove-sign').addClass('fluigicon-check-circle-on');
  491. break;
  492. }
  493. }
  494. resolve(true);
  495. },
  496. error: function(jqXHR, status, errorThrown){
  497. console.log(errorThrown);
  498. }
  499. });
  500. });
  501.  
  502. },
  503.  
  504. searchForm: function(){
  505. var formInstalled = false;
  506. parent.WCMAPI.Create({
  507. url: parent.WCMAPI.getServerURL() + '/api/public/ecm/document/listDocument/' + wi_workflow.formFolderId,
  508. contentType: 'application/json',
  509. dataType: 'json',
  510. type: 'GET',
  511. success: function(data) {
  512. for(var j = 0; j < wi_workflow.forms.length; j++){
  513. wi_workflow.formInstalled = false;
  514. for (var i = 0; i < data.content[i].length; i++) {
  515. if(data.content[i].phisicalFile == wi_workflow.forms[j].name){
  516. wi_workflow.formInstalled = true;
  517. break;
  518. }
  519. }
  520. }
  521. },
  522. error: function(jqXHR, status, errorThrown){
  523. console.log(errorThrown);
  524. }
  525. });
  526. },
  527.  
  528. installForm: function(form){
  529. console.log("Precisa instalar: " + form.name);
  530.  
  531. wi_workflow.soapEnvelop.find('username').text(WCMAPI.userLogin);
  532. wi_workflow.soapEnvelop.find('companyId').text(WCMAPI.getTenantId());
  533. wi_workflow.soapEnvelop.find('parentDocumentId').text(this.formFolderId);
  534. wi_workflow.soapEnvelop.find('publisherId').text(WCMAPI.userLogin);
  535.  
  536. wi_workflow.anexosPromise.push(wi_workflow.montaPromiseAnexo(form.name, true, form.dsFilePath));
  537.  
  538. for(var j = 0; j < form.anexos.length; j++){
  539. wi_workflow.anexosPromise.push(wi_workflow.montaPromiseAnexo(form.anexos[j].name, false, form.anexos[j].dsFilePath));
  540. }
  541.  
  542. Promise.all(wi_workflow.anexosPromise).then((result) => {
  543. wi_workflow.uploadFormWS(wi_workflow.soapEnvelop);
  544. })
  545.  
  546. },
  547.  
  548. montaPromiseAnexo: function(fileName, filePrincipal, fileUrl){
  549. console.log("URL da Promise: " + fileUrl);
  550.  
  551. return new Promise(function(resolve, reject) {
  552. let xhr = new XMLHttpRequest();
  553. xhr.open("GET", fileUrl, true);
  554. xhr.responseType = 'blob';
  555. xhr.onload = function() {
  556. if (xhr.status >= 200 && xhr.status < 300) {
  557. console.log("Chegou aqui", this.response);
  558. blob = this.response;
  559. var reader = new window.FileReader();
  560. reader.readAsDataURL(blob);
  561. reader.onloadend = function () {
  562. console.log(reader.result.split(';base64,')[1]);
  563. wi_workflow.addToSoapEnvelop(fileName, filePrincipal, reader.result.split(';base64,')[1]);
  564. resolve(true);
  565. }
  566. } else {
  567. reject(xhr.statusText);
  568. resolve(false);
  569. }
  570. };
  571. xhr.onerror = () => {
  572. console.log(xhr.statusText);
  573. reject(xhr.statusText);
  574. };
  575. xhr.send();
  576. });
  577. },
  578.  
  579. /**
  580. * Monta o XML do WS(ECMCardIndexService_createCard.xml) com o HTML convertido para Base64 em anexo
  581. */
  582. addToSoapEnvelop: function(fileName, filePrincipal, fileData){
  583. var attachmentItem = '<item><attach>true</attach><fileName>' + fileName + '</fileName><filecontent>' + fileData + '</filecontent><principal>' + filePrincipal + '</principal></item>';
  584. wi_workflow.soapEnvelop.find('Attachments').append(attachmentItem);
  585. },
  586.  
  587. getSoapEnvelop: function(){
  588. return new Promise(function(resolve, reject) {
  589. $.ajax({
  590. url : "/reembolso_install_workflow/resources/process/ECMCardIndexService_createCard.xml",
  591. type : "GET",
  592. datatype : "xml",
  593. headers : {
  594. 'Content-Type' : 'text/xml',
  595. 'X-Requested-With' : 'XMLHttpRequest'
  596. },
  597. processData : false,
  598. success : function(xml) {
  599. wi_workflow.soapEnvelop = $(xml);
  600. resolve(true);
  601. },
  602. error: function(jqXHR, textStatus, errorThrown){
  603. reject(textStatus);
  604. resolve(false);
  605. }
  606. })
  607. });
  608. }
  609. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement